支付宝APP支付的第一步是需要由服務端调用支付宝接口(类似预创建)获得一个orderInfo(这个orderInfo包含了订单数据)返回给客户端,客户端调用支付宝SDK发起支付时需要这个orderInfo
问题是客户端这邊拿到的安卓的调用demo,所给的orderInfo示例却没有这个字段而且调用demo发起支付成功。
好吧没关系,先测试看看
(由于测试用的支付金额超过下限->这个是根本原因,但一开始我们还不知道)客户端发起支付失败,提示的是“该操作已取消”根据返回码也无法在官网找到任何对应嘚说明,另一边后台预订单却得到success的返回,(坑就坑在客户端sdk没有显示金额下限的通知)只是告知操作失效。
由此结合上面的那个区别。
我们怀疑是orderInfo的alipay-sdk这个字段多余了截掉这个字段,客户端再发起支付这次不会操作失效了,返回40002一看是签名无效开始怀疑起签名问题。。然后各种找看到sdk源码里面去了解签名的具体细节,最后发现并没有问题(其实我们傻了生产开发出的SDK怎么会那么容易有bug人家都不知道测了几周期,但缺少友好说明我们实在难以排查问题)。
就用阿里给的签名工具试试吧并用安卓那个能成功调起支付的demo里的orderInfo来改,(咜的签名肯定没有问题吧哈哈)然后一个个修改参数测试,得到签名然后自己拼装orderInfo给客户端去调,最后发现只有totalAmount出了事突然间恍然大悟,阿里的服务器验证步骤应该是1. 签名验证—2.参数合理化验证—
所以我们之前带了alipay-sdk字段的orderInfo其实已经通过了签名验证只是在金额totalAmount这一步被發现超出下限了,所以客户端无法成功掉起sdk
再回去官网一个个链接路径翻看文档,终于在某个“角落”看到了totalAmount的区间最低0.01。
行了这丅行了,直接改totalAmount果然OK。
总结一下我们到底想说明什么呢:
1、测试用例的选取问题,我们其实太笨没考虑到测试用例的合理性
2、支付寶的返回信息还是咳咳咳啊,真的返回msg不够明白的话我们用的人真的只能踩坑哈哈