美文网首页iOS技术交流收藏
ios支付宝支付集成及实现

ios支付宝支付集成及实现

作者: _Luyouli | 来源:发表于2017-09-26 10:50 被阅读1172次

    许久未写博客,趁着这段时间项目比较轻松来写写。最近的项目的遇到了第三方支付,有支付宝支付、微信支付,这里我先写一下支付宝支付的集成和使用,可以给小白们一些帮助。具体的集成流程在官方文档中都有,可以前去参考。

    第一步集成

    支付宝的集成比较简单,首先进入蚂蚁金服开放平台,注册好开发者账号,然后创建应用

    选择自用型应用

    在创建应用后会进行完善应用信息,如果要使用支付功能必须要进行签约,签约的话会审核商家也就是应用内支付的收款方的相关信息,只有用过了审核才能使用支付功能。关于签约我们就不细说了,直接先说集成。
    步骤1:启动IDE(如Xcode),把iOS包中的压缩文件中以下文件拷贝到项目文件夹下,并导入到项目工程中。
    AlipaySDK.bundleAlipaySDK.framework
    在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:


    在导入依赖库后集成就基本完成了。
    作为移动端在支付上做的事其实很少,具体的如公钥密钥的配置,商品信息的配置还有价格计算等等都是放在商户服务端完成,从安全的角度来说在移动端代码中是不允许进行商品加密的。所以这交给后台人员就好了,他们处理后我们直接调用支付接口获取组装和签名后的请求串orderString,将获取到的orderString直接传入调用启动支付宝的的SDK中。

    第二步使用

    首先在Appdelegate中写下以下方法

    - (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;
    }
    
    // NOTE: 9.0以后使用新API接口
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
    {
        if ([url.host isEqualToString:@"safepay"]) {
            //跳转支付宝钱包进行支付,处理支付结果
            [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
                NSLog(@"result = %@",resultDic);
            }];
        }
        return YES;
    }
    
    

    在使用支付宝支付前,先写一个支付单列,方便在各个地方调用支付,当然也有其他方式,我这里使用的是单列。
    1.首先创建支付单列
    在.m文件中

    /**
     *  支付单例管理类
     */
    +(id)sharePayManager
    {
        static SYPayManager *asAlixPay = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            asAlixPay = [[SYPayManager alloc] init];
        });
       
    

    支付宝支付方法

    /**
     *  支付宝支付
     */
    -(void)handleOrderPayWithParams:(NSDictionary *)aParam
    {
     
        
        NSLog(@"aParm = %@",aParam);
        NSString *appScheme = @"alisdkofshuyinHotel";
        NSString *orderString = aParam[@"payInfo"];
        
        
        // NOTE: 调用支付结果开始支付
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
            int statusCode = [resultDic[@"resultStatus"]  intValue];
            
            if (statusCode == 9000)
            {
                //订单支付
                [MBProgressHUD showText:@"支付成功"];
                [[NSNotificationCenter defaultCenter] postNotificationName:@"paySuccess" object:nil];
                
            }
            else
            {
                //交易失败
               // [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
                [MBProgressHUD showText:@"支付异常"];
            }
    
            
        }];
    }
    

    在.h文件里面

    //生成支付宝单例类
    +(id)sharePayManager;
    
    
    //支付宝支付
    //aParam 后端返回支付信息
    -(void)handleOrderPayWithParams:(NSDictionary *)aParam;
    

    记得先引用头文件
    #import <AlipaySDK/AlipaySDK.h>

    单列写好后,在需要支付的地方调用单列就可以了。我这里采用的是字典,在用的地方将从服务端请求下来支付商品信息orderString装入字典,appScheme是在开发平台中得到的。得到这两个后传入调用支付宝的方法中。

     NSString *appScheme = @"alisdkofshuyinHotel";
       NSString *orderString = aParam[@"payInfo"];
    

    调用支付宝

     // NOTE: 调用支付结果开始支付
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
            int statusCode = [resultDic[@"resultStatus"]  intValue];
            
            if (statusCode == 9000)
            {
                //订单支付
                [MBProgressHUD showText:@"支付成功"];
                [[NSNotificationCenter defaultCenter] postNotificationName:@"paySuccess" object:nil];
                
            }
            else
            {
                //交易失败
               // [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
                [MBProgressHUD showText:@"支付异常"];
            }
    
            
        }];
    

    在使用单列的地方如下写
    [[SYPayManager sharePayManager]handleOrderPayWithParams:responseObject[@"data"]];
    以上基本就是移动端所需要做的事了。麻烦的事情都交给服务端去做了,我们简单调用接口就好了,所以支付还是比较简单的。微信支付其实也差不多,有空再写微信支付。

    相关文章

      网友评论

        本文标题:ios支付宝支付集成及实现

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