因公司业务需要,需集成"支付宝"在线支付功能.
发现一个问题:支付宝在我所集成过的所有支付方式中,是最"烂"的,最难集成,老是会出现或这或那的问题.特别是:调试错误,重新发起请求,错误代码ILLEGAL_SIGN
该错误的引起因素有好几点:
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” 参数设置制定的字符集,并且我们返回通知也会使用该字符集,解决乱码的问题。