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 微信支付 调起只出现确定按钮

问题: 1.调用微信支付代码,调起不到微信app? 2.调用起微信app,但是只出现了确定按钮? 问题一 NSString *stamp = [dict objectForKey:@”timeS...

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

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

iOS开发调起微信支付显示白色确定按钮的解决方案

问题描述:     第一次做微信支付功能,有很多地方不是很懂,下面分享一下很多人都会遇到的一个问题,在调起微信支付的界面的时候,只出现了一个白色的确定按钮,如下图: 问题原因:     查了很多资...

ios微信支付调起微信只显示一个确定按钮

今天遇到一非常奇葩的问题,搞了一上午,写此文章纪念下= =! 情况是这样,同一个APP,正式环境支付没有问题,一切正常;换了个测试环境,就出现了如题的问题,然后就认定是后台有问题。 网上找...

iOS 9.0之后调用支付宝或者微信支付,点击右上角返回按钮会当前APP后订单状态的判断

看到有人说可以在唤起APP的地方调用后台接口,根据后台查询,我这里说说我的解决方案。 typedef enum{     CUR_PAY_TYPE_NONE = 0,     CUR_PAY_...

iOS 9.0后,微信支付回调处理

微信支付

关于微信支付IWXAPIEventHandler接口中onresp不能调用的问题

1.首先确定包名.wxapi 新建个包 放WXPayEntryActivity  是否正确这相比大多人不会弄错。 2容易忽略的是上面的创建的.wxapi包必须跟你申请时,填写的包目录一样,必须放在申...

UITableViewCell高亮(按下)时,子视图背景色变透明的解决方法

UITableViewCell highlighted subviews backgroundColor自定义的UITableViewCell,在上面添加一个UIView(这里是UILabel),设置...

软件项目报价方法

软件项目一般包括解决方案、开发、维护、系统集成等。以下将分别介绍软件开发价格、软件(系统)维护价格、系统集成价格、系统解决方案费用的价格估算方法,以供大家参考。

软件项目开发报价指南

公司一直以来都在接新开发的,定制化的解决方案开发项目,在和客户取得了互信以后,首先会遇到的问题就是:多少钱?报个价吧。往往,我们的销售经理就蔫吧了,具体研发需要多少钱?我得去问问项目经理,那项目经理又...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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