【发布时间】:2012-01-21 14:38:00
【问题描述】:
我正在尝试使用亚马逊支付服务,他们要求我这样做:
这是完整的签名,你可以看到我添加了签名方法:
$string_to_sign = "GET\n
authorize.payments-sandbox.amazon.com\n
cobranded-ui/actions/start?
SignatureMethod=HmacSHA256&SignatureVersion=2&callerKey=my_key&callerReference=YourCallerReference&paymentReason=donation&pipelineName=SingleUse&returnUrl=http%3A%2F%2Fyourwebsite.com%2Freturn.html&transactionAmount=4.0";
然后我像下面这样加密它。
$encoded_string_to_sign = URLEncode(Base64_Encode(hash_hmac("sha256", $string_to_sign, 'my_secret_key')));
我这样做了,但随后我从他们那里收到错误消息:
Caller Input Exception: The following input(s) are either invalid or absent:[signatureMethod]
知道这里可能出了什么问题吗?
这里是完整的代码:(上面的变量被赋值)
<?php
$string_to_sign = 'GET
authorize.payments-sandbox.amazon.com/cobranded-ui/actions/startSignatureMethod=HmacSHA256&SignatureVersion=2&callerKey=AKIAJENBYSJCJX2IDWDQ&callerReference=YourCallerReference&paymentReason=donation&pipelineName=SingleUse&returnUrl=http%3A%2F%2Fproblemio.com&transactionAmount=4.0';
$encoded_string_to_sign = URLEncode(Base64_Encode(hash_hmac("sha256", $string_to_sign, 'my_secret_key')));
$amazon_request_sandbox = 'https://authorize.payments-sandbox.amazon.com/cobranded-ui/actions/start?SignatureVersion=2&returnUrl='.$return_url.'&paymentReason='.$payment_reason.'&callerReference=YourCallerReference&callerKey='.$my_access_key_id.'&transactionAmount=4.0&pipelineName=SingleUse&SignatureMethod=HmacSHA256&Signature='.$encoded_string_to_sign;
//echo $amazon_request_sandbox; - use this if you want to see the resulting request and paste it into the browser
header('Location: '.$amazon_request_sandbox);
?>
谢谢!!
【问题讨论】:
-
我编辑了我的原始 Q 以显示我包含 SignatureMethod=HmacSHA256 字符串,但它没有帮助:(
-
你确定没有空格进入你的查询字符串,比如在“开始”之后?
-
如果你还是 URLEncoding 的话,我还能问你为什么要在 returnUrl 中编码 : 和 / 字符吗?
-
请提供用于生成请求的所有代码。您没有为我们提供足够的代码来重现该问题。如果无法重现此问题,我们将无法解决此问题。您可以期待的最佳答案是基于提供的错误代码的推测。正如我在您之前的两个与 FPS 相关的问题中向您建议的那样,您需要使用此处提供的 FPS 库aws.amazon.com/code/Amazon-FPS/4094948623747680,或者至少您需要学习代码作为示例。
-
@JonathanSpooner 刚刚添加了所有代码来生成请求。感谢您的帮助:)
标签: php sha256 amazon-fps