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

微信官方集成文档:

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

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

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

1.项目设置appid

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

    

ios 微信支付universalLink ios 微信支付 苹果提成_配置参数

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

   

ios 微信支付universalLink ios 微信支付 苹果提成_配置参数_02


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

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

ios 微信支付universalLink ios 微信支付 苹果提成_微信_03

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"];
}