您的位置:首页 > 移动开发 > 微信开发

iOS微信支付那些坑

2016-01-14 11:38 561 查看
最近在集成微信支付,使用过程中遇到的那些坑分享出来,共勉。

微信支付平台下载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 就是这两者注册的顺序

微信支付必须在友盟注册完成之后。



终于,看到最美丽的风景。

转载 记得标明原址。分享是学习最大的力量!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: