解决 MWS GetEligibleShippingServices 返回 SignatureDoesNotMatch
今天写 MWS 的 Merchant Fulfillment ,调用 GetEligibleShippingServices 一直出错,返回 SignatureDoesNotMatch ,奇了怪?
后来对比 MWS scratchpad 工具发现 ShipmentRequestDetails.ShipFromAddress 输入中有空格,而我的是“+” ,MWS scratchpad 是“%20”,所以 SignatureDoesNotMatch 。
我php版本是5.3.3,不能在 http_build_query 函数使用 PHP_QUERY_RFC3986
enc_type
默认使用 PHP_QUERY_RFC1738。如果 enc_type 是 PHP_QUERY_RFC1738,则编码将会以 » RFC 1738 标准和 application/x-www-form-urlencoded 媒体类型进行编码,空格会被编码成加号(+)。
如果 enc_type 是 PHP_QUERY_RFC3986,将根据 » RFC 3986 编码,空格会被百分号编码(%20)。
写个函数转换下,问题解决了。
function arr2url($arr){ if(version_compare(PHP_VERSION, '5.4.0', '>=')){ return http_build_query($arr, null, null, PHP_QUERY_RFC3986); }else{ return str_replace('+', '%20', http_build_query($arr)); } }