支付集成

iOS支付三部曲之集成支付宝支付

2018-11-14  本文已影响67人  骑马纵天下
支付宝支付

一. 开发前的准备

二. 支付宝支付流程

系统交互流程

三. App支付iOS集成流程

1. 导入支付宝SDK:
pod 'AlipaySDK-iOS'

保存并执行 pod install

支付宝SDK下载地址 新版本
下载完成后,把下面的文件拷贝到项目文件夹下,导入到项目中,并添加依赖库。

AlipaySDK.bundle
AlipaySDK.framework

选择你的工程设置项,选中“TARGETS”一栏,在“Build Phases”标签栏的“Link Binary With Libraries“添加以下依赖库:


依赖库

关于设置URL Types在上篇文章微信支付有写传送门
到此,项目集成SDK完成下面进入代码环节。

2. 代码

代码仅供参考 有所删减

//点击支付调的方法其中有微信支付
- (void)cd_paymentMeetingTicketsWithPaymentType:(CDPayFeePayStyle)paymentType
                                   paymentState:(CDPaymentState)paymentState
                                        buyType:(CDPaymentType)buyType
                                           view:(UIView *)view
                                     parameters:(NSDictionary *)parameters
                                   successBlock:(void(^)(NSDictionary * resultStatusDic,BOOL flage))successBlock{
      WS(weakSelf);//这个方法是创建订单 返回调用SDK所需参数
    [CdPaymentHttpRequest cd_payInfoWithPayState:paymentState paymentType:paymentType buyType:buyType view:nil parameter:parameters success:^(NSString *payOrderStr) {
            if (paymentType == CDPayFeePayStyleAlibaba) {//支付宝支付 拿到参数调用支付API
                [[AlipaySDK defaultService]payOrder:payOrderStr fromScheme:ZWYJY_SCHEME callback:^(NSDictionary *resultDic) {
                //注意这个回调是在没有装支付宝APP使用的网页支付才会走的回调,通过APP支付会走appdelegate
                    successBlock(resultDic,YES);
                }];
            }else{//微信支付
                if ([payOrderStr isKindOfClass:[NSString class]]) {
                    NSData *data = [payOrderStr mj_JSONData];
                    NSDictionary *weChatDic = [data mj_JSONObject];
                    if (weChatDic != nil) {
                        ////调起微信支付
                        PayReq *weChatReq = [[PayReq alloc]init];
                        weChatReq.openID = weChatDic[@"appid"];
                        weChatReq.partnerId = weChatDic[@"partnerid"];
                        weChatReq.prepayId = weChatDic[@"prepayid"];
                        weChatReq.nonceStr = weChatDic[@"noncestr"];
                        weChatReq.timeStamp = [weChatDic[@"timestamp"] integerValue];
                        weChatReq.package = weChatDic[@"package"];
                        weChatReq.sign = weChatDic[@"sign"];
                        [WXApi sendReq:weChatReq];
                        successBlock(@{},YES);
                    }else{
                        [[CdPaymentCenter sharedCdPaymentCenter].hud hide:YES];
                        [MBProgressHUD showMessage:@"服务器返回错误"];
                    }
                    
                }
        }else{
            successBlock(@{},NO);
        }
        
    } errBlock:^(NSString *errMsg) {
        
    }];
   
    
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return  [WXApi handleOpenURL:url delegate:[CdWeChatAPIManager sharedCdWeChatAPIManager]];
}

// 配置系统回调接口
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    BOOL result = [UMSocialSnsService handleOpenURL:url];
    
    if (result == FALSE) {
        //调用其他SDK,例如支付宝SDK等
        if ([url.host isEqualToString:@"safepay"]) {
            //跳转支付宝钱包进行支付,处理支付结果
            [[AlipaySDK defaultService]processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {//这个方法是支付宝支付结果回调
                [kNotificationCenter postNotificationName:kAlibabaPaymentStatus object:resultDic];//发起通知处理支付结果
            }];
            return YES;
        }
        
        return [WXApi handleOpenURL:url delegate:[CdWeChatAPIManager sharedCdWeChatAPIManager]];
        
    }
    
    return result;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    BOOL result = [UMSocialSnsService handleOpenURL:url];
    if (result == false) {
        if ([url.host isEqualToString:@"safepay"]) {
            //跳转支付宝钱包进行支付,处理支付结果
            [[AlipaySDK defaultService]processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
                [kNotificationCenter postNotificationName:kAlibabaPaymentStatus object:resultDic];//发起通知处理支付结果
            }];
            return YES;
        }
        return [WXApi handleOpenURL:url delegate:[CdWeChatAPIManager sharedCdWeChatAPIManager]];
    }
    return result;
}
返回码 含义
9000 订单支付成功
8000 正在处理中,支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态
4000 订单支付失败
5000 重复请求
6001 用户中途取消
6002 网络连接出错
6004 支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态
其它 其它支付错误

关于处理支付结果根据需求来写,这里就不写了。

上一篇 下一篇

猜你喜欢

热点阅读