亚马逊 API 中的签名不匹配

发布于 2024-12-10 22:37:44 字数 2004 浏览 1 评论 0原文

我正在使用亚马逊 API,在将我的库存从数据库更新到亚马逊网站时收到此错误:

Caught Exception: Internal Error
Response Status Code: 0
Error Code:
Error Type:
Request ID:
XML:

我阅读了此线程 (amazonsellercommunity.com/forums/thread.jspa?messageID=2194823),然后得到错误解释:

<Error><Type>Sender</Type><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message><Detail/></Error>

所以我想我的 MARKETPLACE_ID、MERCHANT_ID、AWS_ACCESS_KEY_ID 或 AWS_SECRET_ACCESS_KEY 可能是错误的。但我查了一下,这些信息都是正确的。

实际上,我不明白为什么会发生这个错误......之前,它工作得很好,但几天后它就崩溃了。而且我不会更改代码中的任何内容。很奇怪,不是吗?

编辑:

这是我的签名部分代码。

define ('DATE_FORMAT', 'Y-m-d\TH:i:s\Z');
define('AWS_ACCESS_KEY_ID', 'ABC...'); // My AWS Access Key Id (20 characters)
define('AWS_SECRET_ACCESS_KEY', 'ABCDEF...'); // My AWS Secret Access Key (40 characters)
define('APPLICATION_NAME', 'MyCompany_AmazonMWS');
define('APPLICATION_VERSION', '0.0.1');
define ('MERCHANT_ID', 'XXXXXXX'); // My Merchant ID
define ('MARKETPLACE_ID', 'XXXXXXX'); // My Marketplace ID

$config = array (
'ServiceURL' => "https://mws.amazonservices.fr",
'ProxyHost' => null,
'ProxyPort' => -1,
'MaxErrorRetry' => 3,
);

$service = new MarketplaceWebService_Client(
AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY,
$config,
APPLICATION_NAME,
APPLICATION_VERSION
);

$parameters = array (
'Marketplace' => MARKETPLACE_ID,
'Merchant' => MERCHANT_ID,
'FeedType' => '_POST_INVENTORY_AVAILABILITY_DATA_',
'FeedContent' => $feedHandle,
'PurgeAndReplace' => false,
'ContentMd5' => base64_encode(md5(stream_get_contents($feedHandle), true)),
);

// and then I do this:

$request = new MarketplaceWebService_Model_SubmitFeedRequest($parameters);
invokeSubmitFeed($service, $request);

如果您想查看我的代码的某些部分,请询问。

I am using the Amazon API and get this error while updating my stock from my database to Amazon website:

Caught Exception: Internal Error
Response Status Code: 0
Error Code:
Error Type:
Request ID:
XML:

I read this thread (amazonsellercommunity . com/forums/thread.jspa?messageID=2194823) and then get the error explanation:

<Error><Type>Sender</Type><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message><Detail/></Error>

So I thought my MARKETPLACE_ID, MERCHANT_ID, AWS_ACCESS_KEY_ID or AWS_SECRET_ACCESS_KEY could be wrong. But I checked and these informations are correct.

Actually, I don't understand why this error happens... Before, it worked perfectly and since a couple of days it just crash. And I don't change anything in my code. Strange, isn't it?

Edit :

Here is my section code for signature.

define ('DATE_FORMAT', 'Y-m-d\TH:i:s\Z');
define('AWS_ACCESS_KEY_ID', 'ABC...'); // My AWS Access Key Id (20 characters)
define('AWS_SECRET_ACCESS_KEY', 'ABCDEF...'); // My AWS Secret Access Key (40 characters)
define('APPLICATION_NAME', 'MyCompany_AmazonMWS');
define('APPLICATION_VERSION', '0.0.1');
define ('MERCHANT_ID', 'XXXXXXX'); // My Merchant ID
define ('MARKETPLACE_ID', 'XXXXXXX'); // My Marketplace ID

$config = array (
'ServiceURL' => "https://mws.amazonservices.fr",
'ProxyHost' => null,
'ProxyPort' => -1,
'MaxErrorRetry' => 3,
);

$service = new MarketplaceWebService_Client(
AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY,
$config,
APPLICATION_NAME,
APPLICATION_VERSION
);

$parameters = array (
'Marketplace' => MARKETPLACE_ID,
'Merchant' => MERCHANT_ID,
'FeedType' => '_POST_INVENTORY_AVAILABILITY_DATA_',
'FeedContent' => $feedHandle,
'PurgeAndReplace' => false,
'ContentMd5' => base64_encode(md5(stream_get_contents($feedHandle), true)),
);

// and then I do this:

$request = new MarketplaceWebService_Model_SubmitFeedRequest($parameters);
invokeSubmitFeed($service, $request);

If you want to see some parts of my code, just ask.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怎樣才叫好 2024-12-17 22:37:44

如果我没记错的话,Amazon API 的身份验证机制对您计算机上的当前日期/时间(在签署请求的过程中使用)敏感。检查您的日期/时间设置是否正确。

If I recall correctly, the authentication mechanism for Amazon APIs is sensitive to the current date/time on your machine (which is used in the process of signing the request). Check to see if your date/time is set correctly.

£烟消云散 2024-12-17 22:37:44

对我来说,这只是我的网络应用程序传递 url 转义字符串时出现的错误。特殊字符与亚马逊不一样,并且出现了这个(不太有用)错误。确保您的文件名没有 url 转义字符。

For me it was just an error with my web app passing url escaped strings. The special characters weren't like by amazon and this (not so useful) error came up. Make sure your file names have no url escaped characters.

梦幻之岛 2024-12-17 22:37:44

我使用 ntpdate 解决了这个问题(在 Ubuntu 14.04 Server 上):

首先确保它已安装:

apt-get install ntpdate 

然后执行:

ntpdate ntp.ubuntu.com

I solved it (on Ubuntu 14.04 Server) using ntpdate:

First make sure it is installed:

apt-get install ntpdate 

And then execute:

ntpdate ntp.ubuntu.com
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文