为坑了我一星期的ALI64错误,纪念一篇

正在开发的APP,用到支付宝付款,因为考虑到android和ios都需要调用,为了数据统一,就服务接口生成支付宝需要的参数。

按照支付宝的文档一步步来,结果死活不行,各种错误,“系统异常”,4000错误,ALI64错误。一次次反思自己哪里错了,重新生成密钥提交。

后来让APP开发自己生成参数签名,居然就顺利通过,说明密钥是没问题的。

拿着APP生成的参数签名,和自己JAVA服务端生成的比较,发现APP开发人员根本没把参数排序,而支付宝文档要求是把参数排序,再生成签名。以为是支付宝的坑,我就按APP他们的顺序拼接参数,生成签名,和APP自己生成的签名比对,也是对的,可是支付宝还是报错ALI64。

仔细看看APP的处理,发现他们参数拼接时每个参数值都用双引号包起来,服务端没加,好吧,我把双引号加上,还是报错。

折磨了几天,再看看对比,又发现一个不同,服务端生成的签名字符串最后是等号,而APP是%3D。难道是url编码的问题?再改服务端代码,把生成的签名用URLEncoder.encode编码,终于能支付了。

相关推荐