iOS技术交流收藏

ios支付宝支付集成及实现

2017-09-26  本文已影响1172人  _Luyouli

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

第一步集成

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

选择自用型应用

在创建应用后会进行完善应用信息,如果要使用支付功能必须要进行签约,签约的话会审核商家也就是应用内支付的收款方的相关信息,只有用过了审核才能使用支付功能。关于签约我们就不细说了,直接先说集成。
步骤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"]];
以上基本就是移动端所需要做的事了。麻烦的事情都交给服务端去做了,我们简单调用接口就好了,所以支付还是比较简单的。微信支付其实也差不多,有空再写微信支付。

上一篇 下一篇

猜你喜欢

热点阅读