标签:
今天在支付宝接口开发时,遇到的两个坑
第一个:
https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8nHr4i&treeId=62&articleId=103740&docType=1
支付宝的PC版即时到账接口中,发起的请求可带此参数extra_common_param
公用回传参数 |
String(100) |
如果用户请求时传递了该参数,则返回给商户时会回传该参数。 |
于是,不管在同步或者异步通知中,均可接收到此参数进行业务逻辑的处理
但是今天在wap版的开发中,遇到request。。。一大堆的参数时,总是报错。然而奇怪的是,返回的参数验签却是通过的。
百思不得其解。最后发现request["extra_common_param"]始终为空。。。。
最后找到https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8JI7Bt&treeId=60&articleId=103698&docType=1
wap的支付接口中,果然没有此参数。
(因为wap版的官方demo中发起请求没有MD5的签名方式,于是就照搬了web版的请求方式,当然。这其中就含有了extra_common_param参数的设置,所以一开始对验签通过。却报reques为空的错误深深的搞得抓狂)
问了客服,我说微信支付有此相同参数,web版也有此参数,为什么wap就没了呢? 【内心是抓狂的】
最后客服直接说,不能已经给过建议了么?【内心是崩溃的】
他给到的建议是一,写在body中,但这样买家付款的时候也会看到。
二。写在notify_url的?后面。但同样的,在验签的时候,这个url需要保证和提交时所设置的那个一样。
所以最后只能靠自己了。提交订单时就将相关信息写入数据库,在付款成功后,根据此订单号去更改其状态
第二个:
手机支付。微信中提起发送请求时,总是正确的。
在测试完手机浏览器中的支付宝支付时,我登录账号的也是对的
在别人进行支付时,就是错的。收银台显示的金额总是0.00(这个金额是发起请求时支付宝再显示出来)
于是就奇怪了。。。微信支付和支付宝支付所提交请求的参数都是来源于同一个代码,支付金额,body等什么的。
而且提交后,打印出来的参数也是没问题的。
又是无限抓狂中。最后,我把自己的支付金额0.01的设置取消掉后[if id=6223 then total_pay=‘0.01‘ else total_pay=model.total_pay] 改为 [total_pay=model.total_pay]
同其他人支付时出现的问题一样,这次我自己也重现了此问题。
最后的最后,终于想到了,数据是从数据库读出来的,这个字段是decimal,小数点后有4位。。。
而发起的支付宝请求只要小数点后两位。虽然它是string类型。。。。
total_fee | 交易金额 | String | 该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
我把金额处理后。问题终于解决。
微信没有问题是因为它的单位是分。也就是一分钱也是整型的,提交给微信的数据是1
本来6点半准时下班。然而此时已经是8点半了。
支付宝,知托付!!!谢谢你哦
标签:
原文地址:http://www.cnblogs.com/jasonlam/p/5343208.html