Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Amazon灵活支付异常:呼叫方输入异常:签名无效_Php_Amazon Web Services_Amazon Pay - Fatal编程技术网

Php Amazon灵活支付异常:呼叫方输入异常:签名无效

Php Amazon灵活支付异常:呼叫方输入异常:签名无效,php,amazon-web-services,amazon-pay,Php,Amazon Web Services,Amazon Pay,我正在尝试使用PHP API实现亚马逊的灵活支付 以下是我发送付款请求的PHP代码片段: <?php $string_to_sign = 'GET authorize.payments-sandbox.amazon.com /cobranded-ui/actions/start SignatureMethod=HmacSHA256&SignatureVersion=2&callerKey=my_access_key&callerReference=YourCall

我正在尝试使用PHP API实现亚马逊的灵活支付

以下是我发送付款请求的PHP代码片段:

<?php

$string_to_sign = 'GET
authorize.payments-sandbox.amazon.com
/cobranded-ui/actions/start
SignatureMethod=HmacSHA256&SignatureVersion=2&callerKey=my_access_key&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;

// When it goes to the url, it gets the invalid signature error
header('Location: '.$amazon_request_sandbox); 
?>

这似乎是按照他们的指示进行的,但我无法克服那个错误


谢谢

试试这段代码:

<?php

$method = 'GET';
$host   = 'authorize.payments-sandbox.amazon.com';
$path   = '/cobranded-ui/actions/start';

$params = array(
    'SignatureMethod'  => 'HmacSHA256'
    'SignatureVersion' => 2,
    'callerKey'        => 'my_access_key',
    'callerReference'  => 'YourCallerReference',
    'paymentReason'    => 'donation',
    'pipelineName'     => 'SingleUse',
    'returnUrl'        => 'http://problemio.com&transactionAmount=4.0',
);

$string_to_sign = $method . "\n"
    . $host . "\n"
    . $path . "\n"
    . http_build_query($params);

$signature = base64_encode(hash_hmac(
    'sha256',
    $string_to_sign,
    'my_secret_key'
));

$params['Signature'] = $signature;

$amazon_request_sandbox = "https://{$host}{$path}?" . http_build_query($params);

header('Location: ' . $amazon_request_sandbox);

替换为:

$queryString = str_replace('+', '%20', http_build_query($parameters, '', '&'));
这将解决旧版本PHP(<5.4)的空间编码问题。在最新版本中,有一个“enc_type”标志可以设置

最后的事情最后。。。
这是我在StackOverflow上的第一篇帖子,所以如果我违反了协议,请不要杀了我。希望有帮助

我不确定你是否看到了我的答案,但我想知道它是否有用。
$queryString = http_build_query($parameters, '', '&');
$queryString = str_replace('+', '%20', http_build_query($parameters, '', '&'));