Editing: /home/goacom/awcproapi.com/includes/GameLauncher.php
<?php // Game Launcher Logic class GameLauncher { private $apiToken; // agency_uid private $apiSecret; // aes_key private $serverUrl; private $playerPrefix; public function __construct($token, $secret, $serverUrl = 'https://jsgame.live', $playerPrefix = '') { $this->apiToken = $token; $this->apiSecret = $secret; $this->serverUrl = rtrim($serverUrl, '/'); $this->playerPrefix = trim((string)$playerPrefix); } public function launchGame($userId, $balance, $gameUid, $returnUrl, $callbackUrl, $currency = null, $language = null) { // 1. Format Player ID with prefix $formattedUserId = (string)$userId; if ($this->playerPrefix !== '' && strpos($formattedUserId, $this->playerPrefix) !== 0) { $formattedUserId = $this->playerPrefix . '_' . $formattedUserId; } $timestamp = (string)round(microtime(true) * 1000); // 2. Prepare Inner Payload (As per Doc) $innerPayload = [ 'agency_uid' => $this->apiToken, 'member_account' => $formattedUserId, 'game_uid' => (string)$gameUid, 'timestamp' => $timestamp, 'credit_amount' => (string)$balance, 'currency_code' => $currency ?: 'USD', 'language' => $language ?: 'en', 'home_url' => $returnUrl, 'platform' => 1, // 1 for Web 'callback_url' => $callbackUrl ]; // 3. Encrypt Payload (AES-256-ECB) $encryptedPayload = $this->encryptPayload($innerPayload); // 4. Prepare Outer JSON Body (As per Doc) $requestBody = json_encode([ 'agency_uid' => $this->apiToken, 'timestamp' => $timestamp, 'payload' => $encryptedPayload ]); // 5. Set Exact API Endpoint URL (https://jsgame.live/game/v1) $parsedUrl = parse_url($this->serverUrl); $domain = $parsedUrl['scheme'] . '://' . $parsedUrl['host']; $endpoint = $domain . '/game/v1'; // 6. Send POST Request $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $endpoint); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Accept: application/json' ]); $raw = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if (curl_errno($ch)) { $err = curl_error($ch); curl_close($ch); return [ 'parsed' => ['code' => -1, 'msg' => 'Curl Error: ' . $err], 'raw' => is_string($raw) ? $raw : '', ]; } curl_close($ch); // 7. Parse Response $parsed = json_decode($raw, true); if (is_array($parsed)) { // Check if code is 0 (Success) if (isset($parsed['code']) && $parsed['code'] == 0) { $payloadData = $parsed['payload']; // Payload might be a JSON string, decode it if so if (is_string($payloadData)) { $payloadData = json_decode($payloadData, true); } // Extract Game Launch URL if (is_array($payloadData) && isset($payloadData['game_launch_url'])) { return [ 'parsed' => [ 'code' => 0, 'msg' => 'Success', 'data' => ['url' => $payloadData['game_launch_url']] ], 'raw' => $raw ]; } } // Return error from provider if code != 0 return ['parsed' => $parsed, 'raw' => $raw]; } return [ 'parsed' => ['code' => -1, 'msg' => 'Invalid JSON from provider', 'http_code' => $httpCode, 'body' => $raw], 'raw' => $raw, ]; } private function encryptPayload($data) { $json = json_encode($data); // AES-256-ECB encryption with PKCS7 padding (OPENSSL_RAW_DATA) $encrypted = openssl_encrypt($json, 'AES-256-ECB', $this->apiSecret, OPENSSL_RAW_DATA); return base64_encode($encrypted); } }
💾 Save