为了更大的兼容性,我做网站习惯用UTF-8编码,没想到也带来了一些麻烦。
今天在调试商城的支付宝接口,所有参数都写好了。结果出现:[quote]调试错误,请回到请求来源地,重新发起请求。
错误代码 ILLEGAL_SIGN
说明:如果您不是因为本接口集成调试而看见该错误提醒,请联系本次请求来源网站,本错误属于网站集成接口的错误。[/quote]
上网搜索,说是编码问题,支付宝的帮助里也这样说,解决办法是加个参数,说明如下:[quote]该错误的引起因素有好几点:
1、传递的参数有空值。在支付宝的支付请求url中,某个参数是空值。这样空值在经过md5签名以后,比对会报错,所以请注意您传递过来的url中无空值。建议检查您购物车的支付宝代码,例如:subject=”shop”而非subject= “”
2、程序中安全校验码填写错误(请务必保存好该码,泄漏出去有可能被人伪造消息)。在您拿到不同测试中都有一个key的参数,该参数代表支付宝的安全校验码。从账户内复制过来的时候,会多余空格,请消息检查。例如某一个用户的key是kXXXXXXXXXXXXXXXXXXXXXXXXXXXati,复制到程序中key=” kXXXXXXXXXXXXXXXXXXXXXXXXXXXati ”多了空格的。
3、中文编码的问题。不同网站采用不同的中文编码。有utf-8.gbk,iso-8859-1等,而程序中md5对中文签名会不一样,造成显示该错误。现asp的程序没有直接utf-8编码的md5。Php和jsp。Net程序都是支持该编码的,您可以通过支付接口的 _input_charset = “utf-8” 参数设置制定的字符集,并且我们返回通知也会使用该字符集,解决乱码的问题。
[/quote]
然而,还是不管用。
无奈之中,把从支付宝论坛上下载的接口文档拿来调试。写好参数后,一切正常,但由于原文件里的写法是程序里用Redirect直接跳转至支付宝的付款页面,而不是自己点击链接,为了方便调试,我把跳转改成链接。这时,意外的事情发生了,也出现了那样的错误。于是我想,难道是因为这个原因?把我的程序里也改成直接跳转,也不行,但意外地发现链接中包含有乱码,与生成的链接里的中文不一致,只好把Subject参数里的中文去了,再试,成功了。把直接跳转改回链接,也行了。
看来,还是中文编码做的怪。不过,为什么加了参数,还不行呢?还哪里出错了?改天有空再好好研究研究?
[GoodLuck]
3Q