支付宝APP支付开始遇到的一个小坑

支付宝APP支付的第一步是需要由服务端调用支付宝接口(类似预创建),获得一个orderInfo(这个orderInfo包含了订单数据)返回给客户端,客户端调用支付宝SDK发起支付时需要这个orderInfo。

那么,

由官网文档,下载的服务端sdk来发起请求,通过response.getBody()就获得了orderInfo。

看了下日志,这个orderInfo带有一个大概是alipay-sdk的字段,

问题是客户端这边拿到的安卓的调用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不够明白的话我们用的人真的只能踩坑哈哈

你可能感兴趣的:(学习笔记)