这几天一直在调支付宝的条码支付的接口,遇到不少问题,想跟大家分享一下。我还是建议大家在官网下载的接口先调通了,再放入自己的项目中。我的小伙伴做的是微信条码支付,不得不说,支付宝的接口文档比微信的详细多了,此外支付宝还附带一个样例demo,非常便于新手开发与学习
所谓的条码支付,就是商家扫用户的付款二维码进行结账,用户只需展示付款二维码即可。而扫码支付是用户扫商家的二维码,然后输入金额支付,在我的生活周围目前扫码支付比较多,条码支付在一些大型超市,饮料贩卖机会出现。
具体的开发步骤,一些需要修改的参数我就不叙述了,这些在支付宝的接口文档中都有提到,而且很详细。不过在这之前,你需要有商户私钥(private_key),商户公钥(public_key),以及pid,appid等。下面主要是叙述我遇到的问题,以及解决方法:
(1) 支付宝的接口mian里把函数test_trade_pay注释掉了,没有注意到这点,所以控制台一直输出一些打印信息,很郁闷;
解决方法是:在main函数里把需要用到的函数去注释;
(2) 输入我的付款码之后,运行程序出现连接超时:
解决方法:我一直以为是我的付款码(authCode)输入的速度不够快,失效了,因为它的有效期是1分钟,然后就多次测试,还是不行,最后怀疑可能我的网设限了,查看是否设限,在控制台用 ping openapi.alipaydns.com,结果是请求超时,果然是网络受限(好吧,那天教研室网不行)。解决网络问题,该问题就解决了。
(3) 接下来的是签名加密的问题了,具体错误如下:
解决方法是:要弄清楚你申请时签名算法用的是RSA2还是RSA,我下载的支付宝接口里默认是RSA2,但是我的应该对应的是RSA,在支付宝提供的配置文件中修改即可。
我解决完以上问题之后,样例demo就可以正常运行,并付款成功了,接下来就把demo放入自己的项目中。(ps:完成这一步的时候,我心里窃喜,结果后面简直是一盘冷水下来,透心凉啊)
根据接口文档的描述,我把按步骤把demo放入到自己的项目中,结果出现一下问题:
天真的我一直以为是alipay和maven里面的包冲突了,但是在maven中找不到所描述的包啊,真的是一脸懵逼啊。根本一点都没有怀疑是alipay接口内部包冲突了,在小伙伴的帮助下,发现真的是内部包冲突了,把core-2.1.jar包去掉了(ps:这个问题花费我不少时间,我还没想明白这个问题,如果是内部冲突,为什么在单独调试的时候没有出现这个问题,知道的朋友请分享下答案哦)。
好吧,解决了这个问题又出现了新问题:
解决方法:
在pom.xml中加入红框的代码:
到此为止,可以在项目中正常付款了。