Подтверждение возврата URL Amazon FPS CBUI - PHP
Я пытаюсь запустить руководство по быстрому запуску Amazon FPS для PHP, и у меня возникают проблемы с проверкой URL-адреса возврата, предоставленного CBUI.
Вот URL:
http://local-screen.com/wp-content/plugins/lclscrn_projects/amazon_fps/FPS/ReturnUrlVerificationSampleCode.php?tokenID=N1G9E5I7BH72563866UZ23YZ1X1AL9AZ2A9291Q1PKDATS8R7BLZ6Y7LEHY2QRHS&signatureMethod=RSA-SHA1&status=SC&signatureVersion=2&signature=WbBPFQku5BA67CR9vWr664eLNDahErYWZM6GrOYTnlDmLZf0rBm0XATrGPLgj5V94GsP0n%2BJ0uye%0A0MRZ3gastZX9M0cjbaPBcCjW1ydt%2BtCiatd%2BjQA6ZRs7XD%2BmWMqHVT3b4eY5WXKHHHQIvp4xLjJY%0AxuwtLf4MaYuiATtdnCY%3D&certificateUrl=https%3A%2F%2Ffps.sandbox.amazonaws.com%2Fcerts%2F090911%2FPKICert.pem%3FrequestId%3Dbjyk7pqb789b33qxg4h9lx8kn8ijplnc5pow0ycey00olslowmv&expiry=01%2F2018&callerReference=%241%24yo8s
Это ошибка, которую я получаю:
Verifying return url signed using signature v2 ....
Fatal error: Uncaught exception 'Amazon_FPS_SignatureException' with message 'Certificate could not be verified by the FPS service' in /home/content/85/9687085/html/wp-content/plugins/lclscrn_projects/amazon_fps/FPS/SignatureUtilsForOutbound.php:103 Stack trace: #0 /home/content/85/9687085/html/wp-content/plugins/lclscrn_projects/amazon_fps/FPS/SignatureUtilsForOutbound.php(50): Amazon_FPS_SignatureUtilsForOutbound->validateSignatureV2(Array, 'http://local-sc...', 'GET') #1 /home/content/85/9687085/html/wp-content/plugins/lclscrn_projects/amazon_fps/FPS/ReturnUrlVerificationSampleCode.php(93): Amazon_FPS_SignatureUtilsForOutbound->validateRequest(Array, 'http://local-sc...', 'GET') #2 /home/content/85/9687085/html/wp-content/plugins/lclscrn_projects/amazon_fps/FPS/ReturnUrlVerificationSampleCode.php(97): Amazon_FPS_ReturnUrlVerificationSampleCode::test() #3 {main} thrown in /home/content/85/9687085/html/wp-content/plugins/lclscrn_projects/amazon_fps/FPS/SignatureUtilsForOutbound.php on line 103
Вот функция, которая получает переменные и вызывает страницу проверки:
public static function test() {
$aws_access_key = self::$aws_access_key;
$aws_secret_key = self::$aws_secret_key;
$utils = new Amazon_FPS_SignatureUtilsForOutbound($aws_access_key, $aws_secret_key);
/* Verification of an return url signed using signature version 2.*/
// New parameters sent in return url signed using signature v2
$params["certificateUrl"] = self::$certificate_url;
$params["signature"] = self::$signature;
$params["signatureMethod"] = self::$signature_method;
$params["signatureVersion"] = self::$signature_version;
// foreach ($params as $param) {
// echo $param;
// echo '<br/><br/>';
// }
// echo self::$return_url;
// return;
$urlEndPoint = self::$return_url; //Your return url end point.
print "Verifying return url signed using signature v2 ....\n";
//return url is sent as a http GET request and hence we specify GET as the http method.
//Signature verification does not require your secret key
print "Is signature correct: " . $utils->validateRequest($params, $urlEndPoint, "GET") . "\n";
}
У меня также есть вывод цикла foreach, выше которого я могу PM, если кому-то это нужно. Я просто не понимаю, почему я не могу подтвердить этот URL. Любая помощь будет принята с благодарностью.
Ник
1 ответ
Я также использую пример кода PHP от Amazon, и получаю точно такое же сообщение об ошибке.
Решение
Требование 1: стоимость HttpParameters
то, что вы передаете в запросе VerifySignature, должно иметь параметры в том же порядке, в каком они были переданы на ваш обратный URL пользовательским интерфейсом Amazon. Поэтому вместо того, чтобы вручную извлекать каждый параметр GET, как это делает пример кода Amazon, просто используйте $_GET
объект как значение $parameters
переменная в SignatureUtilsForOutbound.php
,
Требование 2: Тестировать нужно из ящика, доступного в интернете. Вы всегда получите эту ошибку, если тестируете с localhost.