前几天刚开通了支付宝快捷支付,接口申请下来马上做了测试,按照官方文档写好了,但是支付时候总是返回4001参数不正确错误.检查了一天也没发现我的参数有错误.咨询了官方技术支持,刚好是周末,人家不上班,所以索性丢一边去.
过了几天后,代码未修改,再次测试,出现了4000错误.和上次的错误不一样的.我就在思考,之前为什么会出现4001错误? 官方未细化错误代码,其中4001错误的一种可能是权限问题,我就猜测几天前测试出现的4001是因为刚开通,账号的支付权限还没有下来,过了几天自动下来了.
接下来就集中精力解决新问题, 对照官方的Demo和文档,没发现参数有任何错误. 其中有疑惑的是支付的参数顺序问题,因为参数要经过签名,参数的顺序不一样得到的签名自然不一样, 如果签名的参数顺序和上传的参数顺序不一样,服务器验证肯定出错,这时候要么是官方规定的顺序传递,或者是自己保证签名参数的顺序和上传的参数顺序一样. 在咨询官方客服人员,他说签名参数是有顺序的,按照文档的顺序,关于顺序我在这里纠结了很久. 不管是按照文档的还是自己定义顺序,都不能成功,且返回的错误代码是 4000(支付失败).和官方Demo对比很久发现,我自己设置了Alipay的sandbox属性
// 设置为沙箱模式,不设置默认为线上环境
// alipay.setSandBox(true);
Demo中把它注释掉了,并且有一句话提示,我是测试的,所以手贱设置了SandBox模式,导致出现4000错误, 删掉这句话之后,就正常支付了.
对于参数的顺序,并没有规定的顺序,只要签名的参数顺序和上传的参数顺序一样即可.