最近在集成微信支付,使用过程中遇到的那些坑分享出来,共勉。
微信支付平台下载SDK 集成。 看到这开发文档,心中不免高兴一番,这么少。。。 多简单
接下来 按照文档步骤操作,集成完毕了。
这里要说一下,微信官方的开发文档获取订单和数据交互都交给服务器做了,如果你的应用需要在客户端对微信支付做交互 请点击这里
当然,为了安全,数据交互建议交给服务器操作。
服务器交互完毕最终给客户端返回 开发文档如出一辙的数据。
NSMutableString *stamp = [dict objectForKey:@"timestamp"];
//调起微信支付
PayReq* req = [[PayReq alloc] init];
req.partnerId = [dict objectForKey:@"partnerid"];
req.prepayId = [dict objectForKey:@"prepayid"];
req.nonceStr = [dict objectForKey:@"noncestr"];
req.timeStamp = [stamp intValue];
req.package = [dict objectForKey:@"package"];
//req.package = @"Sign=WXPay";
req.sign = [dict objectForKey:@"sign"];
[WXApi sendReq:req];
好了,终于能调起来微信。
如图。。
什么,这是什么鬼,, 微信bug吗,,有些还会遇到 刚刚调起微信 看到一闪而过的空白页就结束了(这里还能看到微信的确定,。, )
好了,, 是时候展现程序员们检测bug的技术了
排查1.如上 声明的 req 对象 属性 需要对应正确的类型值,也就是跟服务器对接 返回的数据类型是否与对象属性要求符合。
排查2.req.timeStamp 时间戳是10位的 不是14位。
排查3.req.package 必须是@"Sign=WXPay"。
排查4.req.nonceStr 必须是第一次签名时候的 conceStr, 这里,你可以跟服务器说一下。
好了 排查完了。。。但是。。 --- 还没有能成功看到支付页面(有些可以了,就不需要往下看了)
最终的一个bug,, 超乎想象。(如果你的应用集成了友盟分享组件 或者 其他分享组件里面包含了 微信分享 分享授权登录的第三方 就得注意了)
排查5.
//友盟微信分享授权注册
[UMSocialWechatHandler setWXAppId:WEIXINPayID appSecret:WEIXINSECRET url:UMSocialCallBack];
//微信支付注册
[WXApi registerApp:WEIXINPayID withDescription:WEIXINDescription];
对了 这个bug 就是这两者注册的顺序
微信支付必须在友盟注册完成之后。
终于,看到最美丽的风景。
转载 记得标明原址。分享是学习最大的力量!