美文网首页
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