今天写 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));
	}
}

0 Comments

Leave a Reply