Claim Tournament Rewards
The claim tournament rewards method allows players to claim their prizes and rewards after tournament completion. This is typically used when players finish in prize-eligible positions.
Overview
The claimTournament method:
- Claims tournament rewards for eligible players
- Validates player's prize eligibility
- Processes reward distribution
- Returns status code indicating success or failure
Method Signature
public function claimTournament(string $gameID, string $tournamentID): int
Parameters
Required Parameters
gameID(String) - The Game ID for the tournamenttournamentID(String) - The Tournament ID to claim rewards from
Return Value
Returns an integer status code:
- Positive value - Rewards claimed successfully
- Zero or negative - Claim failed
Basic Usage
Simple Reward Claim
use Veniso\Moitribe\Sdk\modules\classes\MoitribeApi;
$moitribe = new MoitribeApi([
'gameid' => 'your-game-id',
'channelid' => 'your-channel-id',
'playerid' => 'player-123'
]);
try {
$result = $moitribe->tournRequestsHandler->claimTournament(
'your-game-id',
'tournament-123'
);
if ($result > 0) {
echo "Rewards claimed successfully!\n";
echo "Claim ID: " . $result . "\n";
} else {
echo "Failed to claim rewards\n";
echo "Error code: " . $result . "\n";
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
}
Reward Claim with Validation
function claimTournamentRewards($gameId, $tournamentId, $playerId) {
global $moitribe;
try {
// First check if player is eligible for rewards
$tournamentData = $moitribe->tournRequestsHandler->getTournamentData(
$gameId,
$tournamentId,
1, // current rankings
100, // get enough results to find player
0
);
$playerRanking = null;
foreach ($tournamentData['rankings'] as $index => $player) {
if ($player->getId() === $playerId) {
$playerRanking = [
'rank' => $index + 1,
'player' => $player,
'prize' => $player->getPrize()
];
break;
}
}
if (!$playerRanking) {
return ['success' => false, 'message' => 'Player did not participate in this tournament'];
}
if (!$playerRanking['prize']) {
return ['success' => false, 'message' => 'Player is not eligible for rewards (rank: ' . $playerRanking['rank'] . ')'];
}
// Check if tournament has ended
$tournament = $tournamentData['tournament'];
if ($tournament->getStatus() !== 'ended') {
return ['success' => false, 'message' => 'Tournament has not ended yet'];
}
// Claim rewards
$result = $moitribe->tournRequestsHandler->claimTournament($gameId, $tournamentId);
if ($result > 0) {
return [
'success' => true,
'message' => 'Rewards claimed successfully',
'claim_id' => $result,
'prize' => $playerRanking['prize'],
'rank' => $playerRanking['rank']
];
} else {
return ['success' => false, 'message' => 'Failed to claim rewards'];
}
} catch (Exception $e) {
error_log("Reward claim error: " . $e->getMessage());
return ['success' => false, 'message' => 'Server error occurred'];
}
}
// Usage
$result = claimTournamentRewards('your-game-id', 'tournament-123', 'player-456');
if ($result['success']) {
echo "Success: " . $result['message'] . "\n";
echo "Rank: " . $result['rank'] . "\n";
echo "Prize: " . $result['prize'] . "\n";
} else {
echo "Error: " . $result['message'] . "\n";
}
Integration Examples
Tournament Reward System
class TournamentRewardManager {
private $moitribe;
private $gameId;
public function __construct($moitribe, $gameId) {
$this->moitribe = $moitribe;
$this->gameId = $gameId;
}
public function getPlayerRewards($playerId) {
try {
// Get player's tournament history
$history = $this->moitribe->tournRequestsHandler->getTournamentHistory($this->gameId);
$availableRewards = [];
foreach ($history as $tournament) {
if ($tournament->getStatus() === 'ended') {
$eligibility = $this->checkRewardEligibility($tournament->getId(), $playerId);
if ($eligibility['eligible'] && !$eligibility['claimed']) {
$availableRewards[] = [
'tournament_id' => $tournament->getId(),
'tournament_name' => $tournament->getName(),
'player_rank' => $eligibility['rank'],
'prize' => $eligibility['prize'],
'end_date' => $tournament->getEndDate()
];
}
}
}
return $availableRewards;
} catch (Exception $e) {
error_log("Error getting player rewards: " . $e->getMessage());
return [];
}
}
public function claimReward($tournamentId, $playerId) {
try {
// Validate eligibility before claiming
$eligibility = $this->checkRewardEligibility($tournamentId, $playerId);
if (!$eligibility['eligible']) {
return [
'success' => false,
'message' => $eligibility['reason']
];
}
if ($eligibility['claimed']) {
return [
'success' => false,
'message' => 'Rewards already claimed for this tournament'
];
}
// Claim the reward
$result = $this->moitribe->tournRequestsHandler->claimTournament(
$this->gameId,
$tournamentId
);
if ($result > 0) {
// Log the claim
$this->logRewardClaim($tournamentId, $playerId, $eligibility['prize'], $result);
return [
'success' => true,
'message' => 'Reward claimed successfully',
'claim_id' => $result,
'prize' => $eligibility['prize']
];
} else {
return [
'success' => false,
'message' => 'Failed to claim reward',
'error_code' => $result
];
}
} catch (Exception $e) {
error_log("Reward claim error: " . $e->getMessage());
return [
'success' => false,
'message' => 'Server error occurred'
];
}
}
private function checkRewardEligibility($tournamentId, $playerId) {
try {
$tournamentData = $this->moitribe->tournRequestsHandler->getTournamentData(
$this->gameId,
$tournamentId,
1,
100,
0
);
$playerRanking = null;
foreach ($tournamentData['rankings'] as $index => $player) {
if ($player->getId() === $playerId) {
$playerRanking = [
'rank' => $index + 1,
'player' => $player,
'prize' => $player->getPrize()
];
break;
}
}
if (!$playerRanking) {
return ['eligible' => false, 'reason' => 'Player did not participate'];
}
if (!$playerRanking['prize']) {
return [
'eligible' => false,
'reason' => 'No prize for rank ' . $playerRanking['rank'],
'rank' => $playerRanking['rank']
];
}
// Check if already claimed (this would typically be tracked in your database)
$claimed = $this->isRewardAlreadyClaimed($tournamentId, $playerId);
return [
'eligible' => true,
'claimed' => $claimed,
'rank' => $playerRanking['rank'],
'prize' => $playerRanking['prize']
];
} catch (Exception $e) {
return ['eligible' => false, 'reason' => 'Error checking eligibility'];
}
}
private function isRewardAlreadyClaimed($tournamentId, $playerId) {
// Check your local database for existing claims
// This is a placeholder - implement based on your system
return false;
}
private function logRewardClaim($tournamentId, $playerId, $prize, $claimId) {
$logData = [
'claim_id' => $claimId,
'tournament_id' => $tournamentId,
'player_id' => $playerId,
'prize' => $prize,
'claimed_at' => date('Y-m-d H:i:s')
];
error_log("Reward claimed: " . json_encode($logData));
}
}
// Usage
$rewardManager = new TournamentRewardManager($moitribe, 'your-game-id');
// Get available rewards for player
$rewards = $rewardManager->getPlayerRewards('player-123');
echo "Available Rewards:\n";
foreach ($rewards as $reward) {
echo "- {$reward['tournament_name']}: {$reward['prize']} (Rank: {$reward['player_rank']})\n";
}
// Claim a specific reward
$claimResult = $rewardManager->claimReward('tournament-456', 'player-123');
if ($claimResult['success']) {
echo "Reward claimed: {$claimResult['prize']}\n";
} else {
echo "Claim failed: {$claimResult['message']}\n";
}
Web Reward Claim Handler
function handleRewardClaimRequest() {
global $moitribe;
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['error' => 'Method not allowed']);
return;
}
$input = json_decode(file_get_contents('php://input'), true);
if (!isset($input['tournament_id']) || !isset($input['player_id'])) {
http_response_code(400);
echo json_encode(['error' => 'Missing required fields']);
return;
}
$tournamentId = $input['tournament_id'];
$playerId = $input['player_id'];
$gameId = $input['game_id'] ?? 'your-game-id';
try {
// Validate request
if (empty($tournamentId) || empty($playerId)) {
throw new InvalidArgumentException('Tournament ID and Player ID are required');
}
// Claim reward
$result = $moitribe->tournRequestsHandler->claimTournament($gameId, $tournamentId);
if ($result > 0) {
http_response_code(200);
echo json_encode([
'success' => true,
'message' => 'Reward claimed successfully',
'claim_id' => $result
]);
} else {
http_response_code(400);
echo json_encode([
'success' => false,
'message' => 'Failed to claim reward',
'error_code' => $result
]);
}
} catch (InvalidArgumentException $e) {
http_response_code(400);
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
} catch (Exception $e) {
http_response_code(500);
echo json_encode(['success' => false, 'message' => 'Server error occurred']);
error_log("Reward claim API error: " . $e->getMessage());
}
}
// Route handler
if (strpos($_SERVER['REQUEST_URI'], '/api/tournament/claim-reward') !== false) {
handleRewardClaimRequest();
}
Error Handling
Common Error Scenarios
- Tournament not found - Invalid tournament ID
- Player not eligible - Player didn't win a prize
- Already claimed - Rewards already claimed by player
- Tournament not ended - Tournament still in progress
- Network issues - API communication problems
Error Handling Example
function safeClaimReward($gameId, $tournamentId) {
global $moitribe;
try {
if (empty($gameId) || empty($tournamentId)) {
throw new InvalidArgumentException("Game ID and Tournament ID are required");
}
$result = $moitribe->tournRequestsHandler->claimTournament($gameId, $tournamentId);
if ($result > 0) {
return ['success' => true, 'claim_id' => $result];
} else {
$errorMessage = $this->getClaimErrorMessage($result);
return ['success' => false, 'message' => $errorMessage, 'error_code' => $result];
}
} catch (InvalidArgumentException $e) {
return ['success' => false, 'message' => $e->getMessage()];
} catch (Exception $e) {
error_log("Reward claim error: " . $e->getMessage());
return ['success' => false, 'message' => 'Failed to claim reward'];
}
}
function getClaimErrorMessage($errorCode) {
switch ($errorCode) {
case 0:
return 'Failed to claim reward';
case -1:
return 'Tournament not found';
case -2:
return 'Player not eligible for rewards';
case -3:
return 'Rewards already claimed';
case -4:
return 'Tournament has not ended yet';
default:
return 'Unknown error occurred';
}
}
Best Practices
-
Validate Eligibility
- Check player's final ranking
- Verify prize eligibility
- Confirm tournament has ended
-
Prevent Duplicate Claims
- Track claimed rewards in your database
- Check claim history before processing
- Implement claim cooldowns if needed
-
Provide Clear Feedback
- Show specific prize information
- Display player's final rank
- Explain eligibility requirements
-
Log Claim Events
- Track all reward claims
- Monitor for unusual patterns
- Maintain audit trails
Related Methods
- Get Tournament Data - Check final rankings and prizes
- Submit Tournament Score - Submit scores to compete for prizes
- Get Tournament History - View completed tournaments
- Join Tournament - Participate in tournaments