微信支付比起支付宝支付感觉要麻烦很多,或者微信内部实现更严谨吧 ,下面来说说微信支付过程中遇到的一些问题:
1、运行[WXApi sendReq:req];
,运行这句代码就是跳转微信,调起支付,但是发现并没有跳转微信,没有任何反应,任何错误提示都没有
解决方法: 查看调起微信支付是所传的参数是否有问题,参数如下(res.)
NSDictionary *orderInfo = responseObject[@"params"];//后台传给我们的参数
//创建支付对象
PayReq *req = [[PayReq alloc] init];
//由用户微信号和AppID组成的唯一标识,用于校验微信用户
// req.openID = orderInfo[@"appid"]; //就是自己的APPId,可以不用写,文档中没要求
// 商户号,在注册的时候给的
req.partnerId = orderInfo[@"partnerid"];
// 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你
req.prepayId = orderInfo[@"prepayid"];
// 根据财付通文档填写的数据和签名
//这个比较特殊,是固定的,只能是即req.package = Sign=WXPay
req.package = orderInfo[@"package"];
// 随机编码,为了防止重复的,在后台生成
req.nonceStr = orderInfo[@"noncestr"];
// 这个是时间戳,也是在后台生成的,为了验证支付的
NSString * stamp = orderInfo[@"timestamp"];
req.timeStamp = stamp.intValue;
// 这个签名也是后台做的
req.sign = orderInfo[@"sign"];
//发送请求到微信,等待微信返回onResp
[WXApi sendReq:req];
req 的各个参数是否都有设置,设置的是否有值(与后台给的参数是否对应),设置了并且有值,那就问后台那边的的参数值(不是参数名)在他那边整个过程中是否一致
2、跳转微信后提示“支付验证签名失败”
如果签名以及其他所有参数都是后台传过来的,那一般都是后台的问题
解决方法:
1)后台那边的参数名的大小写以及给你的参数名的大小写,目前貌似都是小写的
2)后台的两次签名是否正确
注意:时间戳应该是10位的,如果是13位的,必须先除以1000后才可以使用
下面是一篇评论不错的相关文章(可以给你后台看看哦)
微信支付 一步一个坑的APP支付!