2011-10-21 27 views
5

Tôi đang sử dụng Amazon API và nhận được lỗi này khi cập nhật chứng khoán của tôi từ cơ sở dữ liệu của tôi vào trang web Amazon:SignatureDoesNotMatch ở Amazon API

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

Tôi đọc chủ đề này (amazonsellercommunity com/diễn đàn/thread.jspa.? MessageID = 2194823) và sau đó nhận được lời giải thích lỗi:

<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> 

Vì vậy, tôi nghĩ MARKETPLACE_ID tôi, merchant_id, AWS_ACCESS_KEY_ID hoặc AWS_SECRET_ACCESS_KEY có thể là sai. Nhưng tôi đã kiểm tra và những thông tin này là chính xác.

Thực ra, tôi không hiểu tại sao lỗi này xảy ra ... Trước đây, nó hoạt động hoàn hảo và từ một vài ngày nó chỉ gặp sự cố. Và tôi không thay đổi bất cứ điều gì trong mã của tôi. Lạ thật, phải không?

Chỉnh sửa:

Đây là mã phần của tôi để ký.

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); 

Nếu bạn muốn xem một số phần của mã, chỉ cần hỏi.

Cảm ơn bạn trước.

+0

Hãy thể ai đó giúp tôi? – Octelio

+0

Hãy thử điều này với amazon Scratchpad.https: //mws.amazonservices.de/scratchpad/index.html –

+0

Tôi đang sử dụng bàn di chuột và vẫn gặp phải lỗi tương tự này. Tôi đã gõ lại các phím nhiều lần, sao chép và dán, nhưng ngay cả các scratchpad báo cáo rằng chữ ký không phù hợp, không chắc chắn những gì để thử tiếp theo. – Jeff

Trả lời

2

Nếu tôi nhớ chính xác, cơ chế xác thực cho API Amazon nhạy cảm với ngày/giờ hiện tại trên máy của bạn (được sử dụng trong quá trình ký yêu cầu). Kiểm tra xem ngày/giờ của bạn đã được đặt chính xác chưa.

+1

Lưu ý rằng các dịch vụ khác nhau có dung sai thời gian khác nhau. Đối với SQS, dung sai là khá thấp, trong khi S3 có vài phút khoan dung. Chỉ cần chạy chronyd trên hộp của bạn (không phải NTPD, nó không xử lý tốt VM). – BraveNewCurrency

1

Đối với tôi, đó chỉ là lỗi với ứng dụng web của tôi thông qua chuỗi thoát url. Các nhân vật đặc biệt không giống như amazon và lỗi này (không hữu ích) đã xuất hiện. Đảm bảo rằng tên tệp của bạn không có các ký tự thoát khỏi url.

0

Tôi giải quyết nó (trên Ubuntu 14.04 Server) sử dụng ntpdate:

Đầu tiên chắc chắn rằng nó đã được cài đặt:

apt-get install ntpdate 

Và sau đó thực hiện:

ntpdate ntp.ubuntu.com 
+1

bạn có thể giải thích tại sao điều này sẽ khắc phục được sự cố của người hỏi? – polka

+0

Đồng hồ nghiêng giữa thời gian hệ thống trên máy mà mã này đang chạy và máy chủ của Amazon có thể đủ để Amazon từ chối yêu cầu vì nó cho rằng nó quá cũ. Bạn sẽ nhận được một tin nhắn, nếu đó là trường hợp. Đã xảy ra sự cố với "Yêu cầu đã hết hạn". hoặc tương tự. Tôi đã nhìn thấy nó, mặc dù tôi không nhớ chính xác từ ngữ. – clintm

Các vấn đề liên quan