微信支付,支付宝支付 iOS

37 篇文章 0 订阅
15 篇文章 0 订阅

整体感觉微信相对于支付宝稍微复杂一些,但是主要的都是后台那边做,我们只需请求相关的参数,调起支付就可以了。只要后台那边做好了,基本没我们啥事了~

首先做如下设置

URL Types 设置

然后在appdelegate.m 中

首先在didFinishLaunchingWithOptions 方法中注册微信(支付宝不需要注册):

[WXApi registerApp:@"wx13d6dbc9fb091222"];

然后其他方法中:


#pragma 支付宝支付
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {

    if ([url.host isEqualToString:@"safepay"]) {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        return YES;
    }else{
        //微信
        return [WXApi handleOpenURL:url delegate:self];
    }

}

// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    // safepay 是支付宝, pay 是微信
    if ([url.host isEqualToString:@"safepay"]) {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        return YES;
    }else{
        //跳回到APP
        return [WXApi handleOpenURL:url delegate:self];
    }
}

//以下微信独有
#pragma 微信
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return [WXApi handleOpenURL:url delegate:self];
}


#pragma WXApiDelegate
-(void) onReq:(BaseReq*)req{
    NSLog(@"-========请求");
}

-(void) onResp:(BaseResp*)resp{
    //支付结果回调
    if ([resp isKindOfClass:[PayResp class]]){
        PayResp*response=(PayResp*)resp;
        switch(response.errCode){
            case WXSuccess:
                //服务器端查询支付通知或查询API返回的结果再提示成功
                NSLog(@"支付成功");
                [self toHomeVC];
                break;
            default:
                NSLog(@"支付失败,retcode=%d",resp.errCode);
                break;
        }
    }
}

//跳转到首页(自己定义的支付后跳转到指定页面)
- (void)toHomeVC{
    UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    TabBarController *tabVC = [story instantiateViewControllerWithIdentifier:@"tabVC"];
    self.window.rootViewController = tabVC;
}

在支付的页面,点击支付按钮后,从后台那里请求相关参数,然后调起支付,主要代码如下:

if (_payMethod == 1) {
        //支付宝
        [LSHTTPTool wx_POST:kUrl(@"add_Zfbpro") params:params success:^(id responseObject) {
            if (responseObject[@"meg"] == nil) {
                NSString *orderString = responseObject[@"OrderString"];
                //            NSString *payno = responseObject[@"payno"];
                [[AlipaySDK defaultService] payOrder:orderString fromScheme:@"aliPayIQC" callback:^(NSDictionary *resultDic) {
                    NSLog(@"reslut = %@",resultDic);
                }];
            }else{
                [ShowTool showHud:responseObject[@"meg"] view:self.view];
            }
        } failure:^(NSError *error) {
            NSLog(@"");
        }];
    }else{
        //微信支付
        [LSHTTPTool wx_POST:kUrl(@"add_Wxpro") params:params success:^(id responseObject) {
            if (responseObject[@"meg"] == nil) {
                NSDictionary *orderInfo = responseObject[@"params"];
                //创建支付对象
                PayReq *req   = [[PayReq alloc] init];
                //由用户微信号和AppID组成的唯一标识,用于校验微信用户
                //                req.openID = orderInfo[@"appid"];


                // 商户号,在注册的时候给的
                req.partnerId = orderInfo[@"partnerid"];

                // 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你
                req.prepayId  = orderInfo[@"prepayid"];

                // 根据财付通文档填写的数据和签名
                //这个比较特殊,是固定的,只能是即req.package = Sign=WXPay
                req.package   = orderInfo[@"package"];

                // 随机编码,为了防止重复的,在后台生成
                req.nonceStr  = orderInfo[@"noncestr"];

                // 这个是时间戳,也是在后台生成的,为了验证支付的
                NSString * stamp = orderInfo[@"timestamp"];
                req.timeStamp = stamp.intValue;

                // 这个签名也是后台做的
                req.sign = orderInfo[@"sign"];

                //发送请求到微信,等待微信返回onResp
                [WXApi sendReq:req];

                //                BOOL isok = [WXApi sendReq:req];
                //                if (isok) {
                //                    NSLog(@"调用微信支付成功");
                //                }else{
                //                    NSLog(@"调用微信支付失败");
                //                }
            }else{
                [ShowTool showHud:responseObject[@"meg"] view:self.view];
            }
        } failure:^(NSError *error) {
            NSLog(@"");
        }];
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值