总结做支付过程中遇到的坑

来源:互联网 发布:mac触摸板怎么右键 编辑:程序博客网 时间:2024/04/30 03:58

一、支付宝的坑要比微信的少些

这个真是直观的感受,不得不说支付宝的文档还是比较健全的,客服也非常人性化,直接点客服进去是机器人,但一个问题好像问3次得不到你想要的解答,他会提示接入人工客服。接入人工客服就感觉好多了。

微信这边,文档倒也可以,但问题解答太差,也没有客服,机器的也没有。有问题只能百度..

二、支付宝提供了很好的SDK

方便了和项目的集成,方便了开发。计算签名,验签都给做好了,只要参数传对,就没有什么问题。

唯一有点问题的就是支付宝接口升级,维护老版本支付就稍微麻烦点。

支付宝的API文档里有很多这样的代码示例


诶~看上去很方便,直接复制一下,就搞定了。

结果运行的时候就会请求失败,参数不对。但看看参数,也都没有问题。

这也是一个坑,setBizContent中的参数最好自己手打,直接复制下来的可能会有问题。

三、微信支付遇到的问题

1、是中文编码问题,商品描述、详情,避免不了用中文,可如果不注意,请求下单的时候就容易遇到签名错误,其实不是签名算错了,而是你传过去的中文发生乱码了,微信支付服务器算的sign和你传过去的不匹配,你把商品描述换成数字、英文,就好使了。

网上好多都是要你在拼参数的时候把中文转码,比如这样

weixin.setBody(   new String(weixin.getBody().getBytes("utf-8"))   );

但我项目里这样做并不好使,因为我的字符集本身就是utf8了。最后发现,其实是在发送请求的时候没有设置编码。比如这样

PrintWriter pout = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(),"UTF-8"));

2、微信退款返回的结果,不是指退款成没成功

而是指退款申请成功与否。具体退款成没成功,得调用退款查询接口,来查询退款的状态。这得注意一下。


3、关于重新支付的问题

无论支付宝还是微信,下单时都需要填写一个商户订单号,对于同一商户来说,这个号应该是唯一的。下单成功后,根据返回的二维码链接,或者调用APP进行支付。这时就会有好死不死爱死不活故意或者不故意的没付款,比如忘用了一张优惠卷。然后进行重新付款时,就产生了一些问题:

对于支付宝,同一商户同一订单号的,另一些参数进行了修改,是可以再次提交下单成功的,比如使用了优惠卷,需付钱数发生了改变。

但微信支付的时候,同一商户同一订单号下,只有随机字符串可以改变,其他参数都不可改变,才会下单成功。

所以对于微信支付,订单确认去支付后,要么支付,要么重新下单。




这些比较印象深刻,两家的支付也再不断完善,可能当你看这篇文章时,上面这些坑可能都不存在了。

现在微信上也提供了SDK和demo,方便了大家的开发。