最近做微信支付,遇到几个坑,故写下此文,愿能帮助到那些还在坑里的兄弟们.
iOS端做微信支付有两套方案
1.客户端调用服务器端接口完成下单功能,统一下单在服务器端处理-----------------------iOS微信demo
下载地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
2.客户端直接调用微信统一下单接口,统一下单在iOS客户端完成----------------------cocoa中狂龙天使的demo
下载地址:http://www.cocoachina.com/bbs/read.php?tid-309177-keyword-%CE%A2%D0%C5%D6%A7%B8%B6.html
本文所有问题都是针对第一种情况而言,如果是第二种的话,只要把服务器端的注意事项在iOS客户端实现时注意即可.
问题1:iOS客户端点击微信支付无法跳转
原因:返回key值的大小写,iOS微信demo的接口返回的值都是appid,partnerid之类的key值,所以demo写的时候也是直接取appid,partnerid
方案1:修改服务器端的返回json的key值均设置为小写
方案2:修改iOS客户端,解析时采用和服务器端同样的key值
问题2:iOS客户端点击微信支付后,跳转至微信,但是订单信息没有,只有确定按钮
原因:服务器端给客户端返回的prepayid或者sign签名或者noncestr不对,建议让服务器端开发人员改(服务器端改只要多调用两次原有接口就行)
方案:
1.调用统一下单接口https://api.mch.weixin.qq.com/pay/unifiedorder时,也一定要传入sign,sign为整个传入参数排序后的md5得到的大写字符串.----------------------------这步是为了得到正确的prepayid值
2.将appid,partnerid,nonceStr,package,timestamp及统一下单接口返回的prepayid,排序后md5加密得到的大写字符串才是真正的sign--------------------这步是为了得到正确sign
3.noncestr只要使用统一下单时的传入参数nonce_str--------------------------这步是为了得到并使用正确的noncestr
ps:调用统一下单接口后,会得到下单成功后的xml信息,里面最有用的信息只有prepayid,并且noncestr和sign都是不对,如果使用noncestr和sign返回给客户端,客户端直接使用的话,肯定是调用不起来微信支付的.