iOS集成微信支付的一些坑:onResp不回调、只显示一个确定按钮、闪回

原创 2016年03月03日 18:36:06

iOS集成微信支付总体来说还是比较容易的(如果没有那些坑的话),所有文档都在:

    https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_1


甚至只要看:

    https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3 

    https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5

这两部分就可以搞定。

遇到的大部分问题来自于另一个非常常用的第三方:友盟分享


关于

已经集成了友盟分享

只要下载微信sdk,并复制到友盟目录下的UMSocial_Sdk_Extra_Frameworks/Wechat文件夹中,替换存在文件。



关于

发起支付之后只显示一个确定按钮



就是这样,没有任何错误提示,断点返回的Url Schemes,也只有一个ret=-2,官方文档解释为:

  “无需处理。发生场景:用户不支付了,点击取消,返回APP。”


遇到这个问题,基本就是发起请求的参数传错了。

PayReq *request = [[[PayReq alloc] init] autorelease];
request.partnerId = @"10000100";
request.prepayId= @"1101000000140415649af9fc314aa427";
request.package = @"Sign=WXPay";
request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";
request.timeStamp= @"1397527777";
request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";
[WXApi sendReq:request];


对照文档仔细排查吧,一定要注意大小写,另外,sign签名时,参数名要用小些(此处官方文档有错误,文档写的用驼峰那种:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3 步骤3-参与签名的字段名,此处感谢 @挨踢实习生) 。


关于

闪回


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

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

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



关于

onResp不回调


这个问题依然来自跟友盟分享的冲突。虽然友盟提供了一个

+(BOOL)handleOpenURL:(NSURL *)url wxApiDelegate:(id<WXApiDelegate>)wxApiDelegate;

方法,但是通过此方法注册的delegate并没有被回调(这个有可能在不同系统版本,友盟sdk版本上效果不同)。


解决方法就是判断一下回调是不是微信支付:

//url Schemes回调
- (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]];
}


如过你遇到其他问题,欢迎加微信探讨:lofocus



版权声明:本文为博主原创文章,未经博主允许不得转载。博主微信:lofocus

相关文章推荐

iOS微信支付客户端无法跳转到微信或跳转到微信后,出现[确定]按钮,却无订单信息

iOS微信支付无法跳转及出现[确定]按钮的解决方案

微信支付不回调支付成功的方法,这是为什么

如果你是Xcode7.2,或者IOS9.2的话,可能会遇见在微信客户端操作返回程序之后不能执行微信的onResp回调方法的问题,就是因为一下这两个方法被废弃掉了,所以我的新demo替换了一个新的方法在...

微信SDK踩过的那些坑。。登录分享支付

由于第一次接微信SDK。沿路踩过一个又一个大大小小的坑,以此做一下记录。 对于安卓版来说。前期一些基本jar导入。xml配置什么的都基本不会有什么问题,按照微信文档来就可以了。 第一个坑在出在签名上,...
  • wl41206
  • wl41206
  • 2016年08月18日 13:54
  • 3659

iOS开发支付那些事(一)微信支付

很多网友面试的时候 都会被问到你的APP使用什么支付,说下支付的流程,什么,不知道!!!!!!那就回家等通知吧 如何 就没有然后了 接入支付宝开流程 点击这里 iOS支付那些事(二)支付宝 ...

ShareSDK微信支付成功不调用onResp、openURL、handleOpenURL等方法

ShareSDK最新的是3.x版本,以前老的2.x需要更新,毕竟ios9已经更新啦。然后ShareSDK里的最新方法也是肯定更换,这是比较痛苦的事情,项目里又要重新来一遍,检查、测试等。 按照官网的...
  • WZios
  • WZios
  • 2016年05月20日 11:36
  • 1076

Android微信支付直接跳转WXPayEntryActivity

本文写于Android端微信支付v10。
  • Synaric
  • Synaric
  • 2016年09月18日 13:13
  • 8839

微信分享配置回调Activity中android:exported="true"的一个坑

在做微信分享的时候,需要用到一个微信的回调Activity:WXEntryActivity 需要用到微信的jar包,可以去开放平台获取 public class WXEntryActivity ex...

微信支付 WXPayEntryActivity的onResp(BaseResp resp)方法 跳转处理的问题

在android接入微信支付的时候,微信会把结果回调到WXPayEntryActivity的onResp(BaseResp resp)方法,我拿到成功code之后,需要请求服务器去拿到这个订单的数据,...

android微信支付之调起支付和支付结果页面回调

之前搞微信支付一直不能够回调支付结果的回调页面,现在来说一下怎么成功回调页面 参照文档:调起支付的代码: private void sendPayReq(String appid, String p...

iOS跳转支付宝 微信支付成功后一直不会返回

哎, 是后来改过一次Bundle id,URL Schemes 没改,  支付宝的话appScheme也要和 URL Schemes改一直   /*  * 支付宝支付...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS集成微信支付的一些坑:onResp不回调、只显示一个确定按钮、闪回
举报原因:
原因补充:

(最多只允许输入30个字)