iOS微信支持遇到的问题:只显示一个确定按钮、onResp不回调、闪回


今天在联调微信支付,遇到下面这个问题

这种只有一个确定按钮的真的是让人抓狂了,点击后返回的状态竟然是-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]];  
}  

3、关于闪回

发起支付后,打开微信,然后立即返回到了你的程序。

原因是项目同时集成了友盟,注册微信的方法写在了初始化友盟分享的前面,调换一下位置即可。

//向微信注册,需要写到初始化友盟分享的后面  
[WXApi registerApp:@"wx000000000" withDescription:@"**weixinpay"];  //你的微信appid  




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信SDK支付回调WXPayEntryActivity主要是通过发送广播的方式实现的。 在微信支付完成后,微信SDK会将支付结果回调到你在微信支付时指定的回调Activity中,这个Activity就是WXPayEntryActivity。在WXPayEntryActivity中,你需要重写`onResp`方法来接收微信支付的结果。 具体而言,`onResp`方法接收一个`BaseResp`对象,该对象包含了微信支付的结果信息。在`onResp`方法中,你可以根据支付结果的状态,进行相应的处理。例如,如果支付成功,你可以跳转到支付成功的页面,如果支付失败,你可以提示用户支付失败并让用户重新支付。 另外,为了将支付结果传递到你的其他组件中,你还需要在`onResp`方法中发送广播。具体而言,你需要创建一个Intent对象,并将支付结果放入Intent中,然后通过`sendBroadcast`方法将Intent发送出去。在其他组件中,你可以注册一个BroadcastReceiver来接收这个广播,并根据支付结果的状态进行相应的业务处理。 在微信SDK中,发送支付结果广播的代码如下: ```java Intent intent = new Intent(ACTION_PAY_RESULT); intent.putExtra(EXTRA_PAY_RESULT, resp.errCode); sendBroadcast(intent); ``` 其中,`ACTION_PAY_RESULT`是广播的Action,`EXTRA_PAY_RESULT`是支付结果的Extra字段。在你的组件中,你需要注册一个BroadcastReceiver,并监听`ACTION_PAY_RESULT`这个Action,当收到这个广播时,你就可以根据`EXTRA_PAY_RESULT`字段来处理支付结果了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值