美文网首页
iOS 微信支付以及左上角按钮的处理

iOS 微信支付以及左上角按钮的处理

作者: 雪_晟 | 来源:发表于2017-12-06 15:01 被阅读504次

    大概说一下流程。
    1.去微信开放平台注册应用。https://open.weixin.qq.com/(大概需要5天左右才能通过。)
    2.应用审批后进一步去获得支付能力。(需要提供营业资格,法人或者负责人的身份证以及开户许可证,如果应用没有上线需要上传应用截图,具体的截图根据指示即可。)
    3.微信审核后会在第二步提供的银行卡账户扣除小额不等的money,然后会把商户号、密码等等一些重要的信息发到提供的邮箱里。
    4.登录微信商户平台。https://pay.weixin.qq.com/ 在商户平台里安装证书,配置一个秘钥(Key 必须是32位的,服务器签名要用)。

    签名建议放在后端,前端不存放私钥。

    1.配置QueriesSchemes

    <key>LSApplicationQueriesSchemes</key>
        <array>
            <string>weixin</string>
            <string>wechat</string>
        </array>
    

    2.配置URL Types.

    工程 --- 》 Targets ---->info ---->URL Types,填写在微信中申请的应用id。(跳转需要)

    3.常用依赖库的添加。

    4.如果项目跑不起来,报错需要设置bitcodeNO,那么设置即可。

    前面的配置如果配置好,

    //注册微信支付信息

    第一步注册

        [WeiXinPayTool  RegistApp];
    

    第二步设置好跳转

    #pragma mark - IOS9.0以后废弃了这两个方法的调用
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
    {
        //微信处理
        if ([[WeiXinPayTool shareTool] handleOpenURL:url]) {
            return YES;
        }
        
        
        return YES;
    }
    
    
    // NOTE: 9.0以后使用新API接口
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
    {
        //微信处理
        if ([[WeiXinPayTool shareTool] handleOpenURL:url]) {
            return YES;
        }
        return YES;
    }
    

    接下来只需要调用拿到后台传的一些参数(比如appid,partnerid,prepayid,package,noncestr 等,微信支付需要的参数)调起微信支付即可。
    如果sendReq为NO,可能是签名不对,或者是参数有误。

     NSMutableString *stamp = [programs objectForKey:@"timestamp"];
        //调起微信支付
        PayReq* req            = [[PayReq alloc] init];
        req.partnerId          = [programs objectForKey:@"partnerid"];
        req.prepayId           = [programs objectForKey:@"prepayid"];
        req.nonceStr           = [programs objectForKey:@"noncestr"];
        req.timeStamp          = [stamp intValue];
        req.package            = [programs objectForKey:@"package"];
        req.sign               = [programs objectForKey:@"sign"];
    
        if (![WXApi isWXAppInstalled]) {
            self.failed(ErrorCodeWXAppNotInstalled);
        }
        BOOL isSuccess =  [WXApi sendReq:req];
        NSLog(@"%d",isSuccess);
    
    

    正常支付和取消支付都会走下面的回调。

    - (void)onResp:(BaseResp *)resp{
        if([resp isKindOfClass:[PayResp class]]){
            //支付返回结果,实际支付结果需要去微信服务器端查询
            
            NSLog(@"%@",resp);
            switch (resp.errCode) {
                case WXSuccess:{
                    if (self.success) {
                        self.success();
                    }
                }
                    break;
                    
                case WXErrCodeCommon:{
                    self.failed(ErrorCodeWxPayError);
                }
                    break;
                    
                case WXErrCodeUserCancel:{
                    self.failed(ErrorCodeWxPayCancle);
                }
                    break;
                    
                default:
                    break;
            }
        }
    }
    
    

    关于iOS9 之后应用左上角的返回按钮对微信支付的影响

    iOS 9之后为了方便应用之间跳转,系统增加了左上角的返回按钮。可是在微信支付时,中途点击了左上角的返回按钮,此时我们就拿不到微信的回调。

    我们需要的就是在下面两个方法里面其中一个方法里面发送通知,然后在通知页面调用微信的接口查询订单通知。如果生成的订单参数都是后台来负责签名的,查询订单也可以由后台来做,我们只需要传一个微信订单号(transaction_id)即可。

    QQ20171206-145844.png
    - (void)applicationWillEnterForeground:(UIApplication *)application {
        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
        发送通知,在通知页面查询微信的支付订单
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)application {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
        
    }
    
    
    

    相关文章

      网友评论

          本文标题:iOS 微信支付以及左上角按钮的处理

          本文链接:https://www.haomeiwen.com/subject/ggnkixtx.html