iOS关于微信支付的一点小事

自支付宝之后,微信支付也靠着自己盘大的用户量逐渐的占领移动支付的市场,为了适应市场变化,果断在项目中集成了微信支付,下面来说说集成过程中的一些坑,菜鸟初成长,大牛绕路。

微信官方集成文档:

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

微信给的demo基本已经一清二楚了,只要按照文档的步骤,以下为简要操作:

建议先运行demo,在demo成功调起支付再集成到项目,大牛可直接上。

1.项目设置appid

    集成第三方的东西都有这个家伙,不解释,关键是看下图,将demo的URL Schemes换成自己的。

    

2.填写一些配置信息,在payRequsestHandler中,填写APP_ID,APP_SECRET,MCH_ID,PARTNER_ID见下图:

   
3.command + r,开启微信支付之旅吧

4.不出意外的话,你可以看到如下界面


5.点击微信支付测试签名,便可成功调起微信支付,若在demo中不能成功调起,请检查URL Schemes有没有正确设置,四个参数是否正确。


demo测试成功,本以为集成到项目也是可以一次成功,可是结果不如人意。

将依赖的微信sdk导入到我自己的项目,设置了URL Schemes,四个参数是在测试成功的demo中copy过来,确保无问题,可是,当运行了项目,点击支付调起微信支付却是调不起微信,[WXApi sendReq:payReq]也一直返回的时false,失败。

后来,在CocoaChina看到有关于这个问题的回答,原文点此查看,大概内容如下:

接入微信支付,成功配置参数,发现无法成功调起微信,将代码抽到一个新的工程可以成功调起,后来发现项目中集成了友盟分享SDK,调起支付的时候,因为library search paths里面友盟SDK里面的微信SDK在前面,这就导致覆盖了我们导入的微信SDK。你调用接口时实际上调用的是友盟SDK里面的微信接口。可能友盟SDK暂时不支持微信支付,所以无法成功调起。

看完这,瞬间想到我项目中集成的shareSDK,果断将shareSDK下面的微信SDK删去,运行,成功了,困扰了一个下午的问题终于搞定了

获取支付后的结果的返回信息,需要去AppDelegate里,添加如下代码,添加微信的代理:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return  [WXApi handleOpenURL:url delegate:self];
}
然后,再实现这个方法:

-(void) onResp:(BaseResp*)resp
通过这个方法,你就可以获取微信支付后的信息了。但是如果这样,所有的支付代码都在AppDelegate里,不好,至少微信给的例子就是这样。以下方法是添加通知,参考此 博客代码如下:

-(void) onResp:(BaseResp*)resp
{
    if ([resp isKindOfClass:[PayResp class]])
    {
        PayResp *response = (PayResp *)resp;
        switch (response.errCode) {
            case WXSuccess: {
                NSNotification *notification = [NSNotification notificationWithName:@"wxPay" object:@"success"];
                [[NSNotificationCenter defaultCenter] postNotification:notification];
                
                break;
            }
                
            default: {
                NSNotification *notification = [NSNotification notificationWithName:@"wxPay" object:@"fail"];
                [[NSNotificationCenter defaultCenter] postNotification:notification];
                break;
            }
        }
    }
}
然后,在我们调起支付的controller添加一个通知,用户接收回调信息:

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    if([WXApi isWXAppInstalled]) // 判断 用户是否安装微信
    {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getOrderPayResult:) name:@"wxPay" object:nil];//监听一个通知
    }
}

- (void)getOrderPayResult:(NSNotification *)notification{
    NSLog(@"%@",notification.object);
    BOOL payResult = [notification.object isEqualToString:@"success"];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

corzfree

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值