【发布时间】:2015-08-10 06:54:02
【问题描述】:
我想知道是否有人可以提供帮助。
我正在尝试通过 API 在亚马逊上发布产品。
当使用 GetOrders 时,它可以完美运行,但除了参数之外的代码相似,我在使用 SubmitFeed _POST_PRODUCT_DATA_ 时收到以下错误消息
“Sender SignatureDoesNotMatch 我们计算的请求签名与您提供的签名不匹配。请检查您的 AWS 秘密访问密钥和签名方法。有关详细信息,请参阅服务文档。”
我的所有详细信息都是正确的,密钥、aws 访问密钥等,并且我已将用于登录我的代码的字符串与在 Amazon API 测试工具中生成的字符串进行了比较,它们完全相同,所以我不知道是什么问题。
这是我正在使用的代码 -
$timestamp = date('c', strtotime($todays_date_time));
$timestamp = gmdate('Y-m-d\TH:i:s\Z', strtotime($timestamp));
$params = array(
'AWSAccessKeyId' => "MY_AWS_KEY",
'Action' => "SubmitFeed",
'Merchant' => "MY_SELLER_ID",
'FeedType' => "_POST_PRODUCT_DATA_",
'SignatureMethod' => "HmacSHA256",
'SignatureVersion' => "2",
'Timestamp'=> $timestamp,
'Version'=> "2009-01-01",
'MarketplaceIdList.Id.1' => "MY_MARKETPLACE_ID",
'PurgeAndReplace'=>'false'
);
$secret = 'MY_SECRET_KEY';
$url_parts = array();
foreach(array_keys($params) as $key) {
$url_parts[] = $key . "=" . str_replace('%7E', '~', rawurlencode($params[$key]));
}
然后我在这里创建 XML 并将其存储在变量 $amazon_feed 中,然后 -
sort($url_parts);
$url_string = implode("&", $url_parts);
$string_to_sign = "POST\nmws.amazonservices.co.uk\n/\n" . $url_string;
$signature = hash_hmac("sha256", $string_to_sign, $secret, TRUE);
$http_header = array();
$http_header[] = 'Transfer-Encoding: chunked';
$http_header[] = 'Content-Type: application/xml';
$http_header[] = 'Content-MD5: ' . base64_encode(md5($amazon_feed, true));
$http_header[] = 'Expect:';
$http_header[] = 'Accept:';
$signature = urlencode(base64_encode($signature));
$link = "https://mws.amazonservices.co.uk/Feeds/2009-01-01?".$url_string."&Signature=".$signature;
$ch = curl_init($link);
curl_setopt($ch, CURLOPT_HTTPHEADER, $http_header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $amazon_feed);
$response = curl_exec($ch);
print_r($response);
$info = curl_getinfo($ch);
curl_close($ch);
有人可以帮忙吗?
【问题讨论】:
-
不久前我遇到了这个问题。看看这个问题(和答案),看看它是否对你有帮助:stackoverflow.com/questions/29679646/…