date('Y-m-d H:i:s'), 'log' => $data ]) . "\n"; } /** * translate the UTC amazon date string to Y-m-d H:i:s standard * * @param string $date A UTC string date from Amazon * @return string */ function dateTr(string $date): string { return date('Y-m-d H:i:s', strtotime($date)); } /** * print exception string * * @param string $call_request Call request, eg buyGiftCard * @param integer $error_code $e Exception error code * @param array $error Array from the Exception message json string * @param boolean $debug_print If we should show the debug log * @return void */ function printException( string $call_request, int $error_code, array $error, bool $debug_print ): void { print "AWS: " . $call_request . ": " . $error['status'] . " [" . $error_code . "]: " . $error['code'] . " | " . $error['type'] . " | " . $error['message']; if ($debug_print === true) { print "
" . print_r($error['log'][$error['log_id'] ?? ''] ?? [], true) . "
"; } } // general auto loader require 'autoloader.php'; // env file loader require 'read_env_file.php'; // load env data with dotenv readEnvFile(__DIR__); print "

Amazon Gift Card Incentives


"; // must have set // endpoint/region: AWS_GIFT_CARD_ENDPOINT // aws key: AWS_GIFT_CARD_KEY // aws secret: AWS_GIFT_CARD_SECRET // partner id: AWS_GIFT_CARD_PARTNER_ID // optional // currency: AWS_ICENTIVE_CURRENCY // as in .env // AWS_GIFT_CARD_ENDPOINT.TEST // AWS_GIFT_CARD_ENDPOINT.LIVE define('LOCATION', 'test'); foreach ( [ 'AWS_GIFT_CARD_KEY', 'AWS_GIFT_CARD_SECRET', 'AWS_GIFT_CARD_PARTNER_ID', 'AWS_GIFT_CARD_ENDPOINT', 'AWS_GIFT_CARD_CURRENCY', 'AWS_DEBUG' ] as $key ) { // $_ENV[$key] = $_ENV[$key . '.' . strtoupper((LOCATION))] ?? $_ENV[$key] ?? ''; } /* ENDPOINTS: - remove '-gamma' for non sandox WHERE URL REGION North America https://agcod-v2-gamma.amazon.com us-east-1 https://agcod-v2.amazon.com (US, CA, MX) Europe and Asia https://agcod-v2-eu-gamma.amazon.com eu-west-1 https://agcod-v2-eu.amazon.com (IT, ES, DE, FR, UK, TR, UAE, KSA, PL, NL, SE) Far East https://agcod-v2-fe-gamma.amazon.com us-west-2 https://agcod-v2-fe.amazon.com (JP, AU, SG) CURRENCY USD for US EUR for EU (IT, ES, DE, FR, PL, NL, SE) JPY for JP CAD for CA AUD for AU TRY for TR AED for UAE MXN for MX GBP for UK */ $fp = fopen('log/debug.' . date('YmdHis') . '.log', 'w'); // run info test (prints ENV vars) $run_info_test = false; // run test to get funds info $run_fund_test = true; // run the normal get/cancel gift card tests $run_gift_tests = true; // run mock error check tests $run_mocks = false; // should we print debug info $debug_print = false; // how long to wait between each call $debug_wait = 2; // if set to true will print all the debug logs too $mock_debug = false; // wait in seconds between mock tests $mock_wait = 2; if ($run_info_test === true) { $aws = new Amazon\AmazonIncentives(); print "checkMe:
" . print_r($aws->checkMe(), true) . "
"; fwrite($fp, writeLog($aws->checkMe())); print "
"; } // check balance if ($run_fund_test === true) { try { $aws_test = Amazon\AmazonIncentives::make()->getAvailableFunds(); print "AWS: getAvailableFunds: " . $aws_test->getStatus() . ": " . "Amount: " . $aws_test->getAmount() . ", " . "Currency: " . $aws_test->getCurrency() . ", " . "Timestamp: " . $aws_test->getTimestamp(); if ($debug_print === true) { print "
" . print_r($aws_test, true) . "
"; } fwrite($fp, writeLog((array)$aws_test)); } catch (Exception $e) { $error = Amazon\AmazonIncentives::decodeExceptionMessage($e->getMessage()); printException('getAvailableFunds', $e->getCode(), $error, $debug_print); fwrite($fp, writeLog($error)); }; print "
"; sleep($debug_wait); // print "LOG:
" . print_r($aws_test->getLog(), true) . "

"; print "
"; } if ($run_gift_tests === true) { // create card $value = 1000; $creation_request_id = ''; $gift_card_id = ''; try { // we must be sure we pass FLOAT there $aws_test = Amazon\AmazonIncentives::make()->buyGiftCard((float)$value); $creation_request_id = $aws_test->getCreationRequestId(); $gift_card_id = $aws_test->getId(); $claim_code = $aws_test->getClaimCode(); $expiration_date = $aws_test->getExpirationDate(); $request_status = $aws_test->getStatus(); print "AWS: buyGiftCard: " . $request_status . ": " . "creationRequestId: " . $creation_request_id . ", gcId: " . $gift_card_id . ", " . "EXPIRE DATE: " . dateTr($expiration_date) . ", " . "CLAIM CODE: " . $claim_code . ""; if ($debug_print === true) { print "
" . print_r($aws_test, true) . "
"; } fwrite($fp, writeLog((array)$aws_test)); } catch (\Exception $e) { $error = Amazon\AmazonIncentives::decodeExceptionMessage($e->getMessage()); printException('buyGiftCard', $e->getCode(), $error, $debug_print); fwrite($fp, writeLog($error)); } print "
"; sleep($debug_wait); try { // cancel above created card card $aws_test = Amazon\AmazonIncentives::make()->cancelGiftCard($creation_request_id, $gift_card_id); $request_status = $aws_test->getStatus(); print "AWS: cancelGiftCard: " . $request_status . ": " . "creationRequestId: " . $creation_request_id . ", gcId: " . $gift_card_id; if ($debug_print === true) { print "
" . print_r($aws_test, true) . "
"; } fwrite($fp, writeLog((array)$aws_test)); } catch (\Exception $e) { $error = Amazon\AmazonIncentives::decodeExceptionMessage($e->getMessage()); print "AWS: cancelGiftCard: " . $error['status'] . " [" . $e->getCode() . "]: " . $error['code'] . " | " . $error['type'] . " | " . $error['message']; if ($debug_print === true) { print "
" . print_r($error['log'][$error['log_id'] ?? ''] ?? [], true) . "
"; } fwrite($fp, writeLog($error)); } print "
"; sleep($debug_wait); // set same request ID twice to get same response test try { $aws_test = Amazon\AmazonIncentives::make()->buyGiftCard((float)$value); $creation_request_id = $aws_test->getCreationRequestId(); $gift_card_id = $aws_test->getId(); $claim_code = $aws_test->getClaimCode(); $expiration_date = $aws_test->getExpirationDate(); $request_status = $aws_test->getStatus(); print "AWS: buyGiftCard: CODE A: " . $request_status . ": " . "creationRequestId: " . $creation_request_id . ", gcId: " . $gift_card_id . ", " . "EXPIRE DATE: " . dateTr($expiration_date) . ", " . "CLAIM CODE: " . $claim_code . ""; if ($debug_print === true) { print "
" . print_r($aws_test, true) . "
"; } fwrite($fp, writeLog((array)$aws_test)); } catch (\Exception $e) { $error = Amazon\AmazonIncentives::decodeExceptionMessage($e->getMessage()); printException('cancelGiftCard', $e->getCode(), $error, $debug_print); fwrite($fp, writeLog($error)); } print "
"; sleep($debug_wait); try { $aws_test = Amazon\AmazonIncentives::make()->buyGiftCard((float)$value, $creation_request_id); $request_status = $aws_test->getStatus(); // same? $expiration_date = $aws_test->getExpirationDate(); print "AWS: buyGiftCard: SAME CODE A AGAIN: " . $request_status . ": " . "creationRequestId: " . $creation_request_id . ", gcId: " . $gift_card_id . ", " . "EXPIRE DATE: " . dateTr($expiration_date) . ", " . "CLAIM CODE: " . $claim_code . ""; if ($debug_print === true) { print "
" . print_r($aws_test, true) . "
"; } fwrite($fp, writeLog((array)$aws_test)); } catch (\Exception $e) { $error = Amazon\AmazonIncentives::decodeExceptionMessage($e->getMessage()); printException('buyGiftCard', $e->getCode(), $error, $debug_print); fwrite($fp, writeLog($error)); } print "
"; print "
"; sleep($debug_wait); } // MOCK TEST if ($mock_debug === true) { $mock_ok = 'MOCK OK'; $mock_failure = 'MOCK FAILURE'; $mock_value = 500; $mock['F0000'] = [ 'ret' => '', 'st' => 'SUCCESS']; // success mock $mock['F1000'] = [ 'ret' => 'F100', 'st' => 'FAILURE']; // SimpleAmountIsNull, etc $mock['F2003'] = [ 'ret' => 'F200', 'st' => 'FAILURE']; // InvalidAmountInput $mock['F2004'] = [ 'ret' => 'F200', 'st' => 'FAILURE']; // InvalidAmountValue $mock['F2005'] = [ 'ret' => 'F200', 'st' => 'FAILURE']; // InvalidCurrencyCodeInput $mock['F2010'] = [ 'ret' => 'F200', 'st' => 'FAILURE']; // CardActivatedWithDifferentRequestId $mock['F2015'] = [ 'ret' => 'F200', 'st' => 'FAILURE']; // MaxAmountExceeded $mock['F2016'] = [ 'ret' => 'F200', 'st' => 'FAILURE']; // CurrencyCodeMismatch $mock['F2017'] = [ 'ret' => 'F200', 'st' => 'FAILURE']; // FractionalAmountNotAllowed $mock['F2047'] = [ 'ret' => 'F200', 'st' => 'FAILURE']; // CancelRequestArrivedAfterTimeLimit $mock['F3003'] = [ 'ret' => 'F300', 'st' => 'FAILURE']; // InsufficientFunds $mock['F3005'] = [ 'ret' => 'F300', 'st' => 'FAILURE']; // AccountHasProblems $mock['F3010'] = [ 'ret' => 'F300', 'st' => 'FAILURE']; // CustomerSurpassedDailyVelocityLimit $mock['F4000'] = [ 'ret' => 'F400', 'st' => 'RESEND']; // SystemTemporarilyUnavailable $mock['F5000'] = [ 'ret' => 'F500', 'st' => 'FAILURE']; // UnknownError foreach ($mock as $creation_id => $mock_return) { print "TS: " . microtime() . ": "; try { $aws_test = Amazon\AmazonIncentives::make()->buyGiftCard((float)$mock_value, $creation_id); $creation_request_id = $aws_test->getCreationRequestId(); $gift_card_id = $aws_test->getId(); $claim_code = $aws_test->getClaimCode(); $request_status = $aws_test->getStatus(); print "AWS: MOCK: " . $creation_id . ": buyGiftCard: " . $request_status . ": " . "creationRequestId: " . $creation_request_id . ", gcId: " . $gift_card_id . ", " . "CLAIM CODE: " . $claim_code . ": "; if ($mock_return['st'] == $request_status) { print $mock_ok; } else { print $mock_failure; } if ($mock_debug === true) { print "
" . print_r($aws_test, true) . "
"; } fwrite($fp, writeLog((array)$aws_test)); } catch (Exception $e) { $error = Amazon\AmazonIncentives::decodeExceptionMessage($e->getMessage()); print "AWS: MOCK: " . $creation_id . ": buyGiftCard: " . $error['status'] . " [" . $e->getCode() . "]: " . $error['code'] . " | " . $error['type'] . " | " . $error['message'] . ": "; if ( $mock_return['ret'] == $error['code'] && $mock_return['st'] == $error['status'] ) { print $mock_ok; } else { print $mock_failure; } if ($mock_debug === true) { print "
" . print_r($error['log'][$error['log_id'] ?? ''] ?? [], true) . "
"; } fwrite($fp, writeLog($error)); } print "
"; // Waiting a moment, so we don't flood sleep($mock_wait); } print "
"; } fclose($fp); // __END__