今天在联调微信支付,遇到下面这个问题
这种只有一个确定按钮的真的是让人抓狂了,点击后返回的状态竟然是-2,用户取消。
1、只显示一个确定按钮
遇到这个问题基本是:传递接口的字段导致的问题(也就是发起请求的参数传错了)
可能出现的问题点:
1、注意一下 nonceStr 需要是第一步里生成的 nonceStr,而不是重新生成。
2、package = @"Sign=WXPay" 注意服务器传来的"="会不会被转义成 %3D
3、sign需要大写。
iOS集成微信支付总体来说还是比较容易的(如果没有那些坑的话),所有文档都在:
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1
甚至只要看:
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
这两部分就可以搞定。
遇到的大部分问题来自于另一个非常常用的第三方:友盟分享
2、onResp不回调
来自跟友盟分享的冲突。
+(BOOL)handleOpenURL:(NSURL *)url wxApiDelegate:(id<WXApiDelegate>)wxApiDelegate;
解决办法就是判断下回调是否是微信支付
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [self applicationOpenURL:url]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [self applicationOpenURL:url]; } - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options { return [self applicationOpenURL:url]; } - (BOOL)applicationOpenURL:(NSURL *)url { if([[url absoluteString] rangeOfString:@"wx000000000000://pay"].location == 0) //你的微信开发者appid return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]]; else return [UMSocialSnsService handleOpenURL:url wxApiDelegate:[WXApiManager sharedManager]]; }
发起支付后,打开微信,然后立即返回到了你的程序。
原因是项目同时集成了友盟,注册微信的方法写在了初始化友盟分享的前面,调换一下位置即可。
//向微信注册,需要写到初始化友盟分享的后面 [WXApi registerApp:@"wx000000000" withDescription:@"**weixinpay"]; //你的微信appid