ios 支付宝支付集成

客户端集成支付宝、微信支付,所限还是需要后台的配合,后台做一些逻辑数据处理,客户端只需要进行第三方集成、授权、调起支付接口就行了,其实从客户端来讲还是比较简单的。先讲讲支付宝支付的集成,后续再讲微信支付。

1、注册支付宝开发者账号、创建应用 https://openhome.alipay.com/ (这一步就不细讲了,使用第三方不备步骤)。

创建应用后,需要授权应用支持的功能:支付、登录等功能。

2、从官网上下载SDK,并导入到工程中

下载SDK解压后如下文件:


导入SDK文件.png

将上面文件拖入工程后,下一步添加依赖库:


添加依赖库.png

3、写个单例类,实现支付宝支付功能,方便APP中各个地方的调用

创建HCAlipayManager 类:

.h文件:
#import <AlipaySDK/AlipaySDK.h>

NS_ASSUME_NONNULL_BEGIN

@interface HCAlipayManager : NSObject

//生成支付宝单例类
+(id)sharePayManager;

//支付宝支付
//aParam 后端返回支付信息
-(void)handleOrderPayWithParams:(NSString *)aParam;

@end

NS_ASSUME_NONNULL_END

.m文件:

@implementation HCAlipayManager

+ (id)sharePayManager{
    static HCAlipayManager *asAlixPay = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        asAlixPay = [[HCAlipayManager alloc] init];
    });
    return asAlixPay;
}

/**
 支付宝支付

 @param aParam <#aParam description#>
 */
- (void)handleOrderPayWithParams:(NSString *)aParam{
    NSLog(@"aParm = %@",aParam);
    NSString *appScheme = @"alipayredpag";//appScheme是你在项目中添加的URL Type(别写错)
    NSString *orderString = aParam;//aParam[@"payInfo"];
    
    
    // NOTE: 调用支付结果开始支付
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        NSLog(@"reslut = %@",resultDic);
        int statusCode = [resultDic[@"resultStatus"]  intValue];
        
        if (statusCode == 9000){
            //订单支付
            [[HCToast shareInstance] showToast:@"支付成功"];
            [[NSNotificationCenter defaultCenter] postNotificationName:@"alipay_paySuccess" object:nil];
            
        }else{
            //交易失败
            // [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
            [[HCToast shareInstance] showToast:@"支付异常"];
        }
    }];
}
@end

4、支付成功后跳转

在AppDelegate.m中写拦截跳转协议:

#pragma mark - openURL Delegate
///ios9.0之后实现该方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:
    //支付宝支付跳转
    if ([url.host isEqualToString:@"safepay"]) {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"支付宝支付跳转 result = %@",resultDic);
            int statusCode = [resultDic[@"resultStatus"]  intValue];
            
            if (statusCode == 9000){
                //订单支付
                [[HCToast shareInstance] showToast:@"支付成功"];
                [[NSNotificationCenter defaultCenter] postNotificationName:@"alipay_paySuccess" object:nil];
                
            }else{
                //交易失败
                // [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
                [[HCToast shareInstance] showToast:@"支付异常"];
            }
        }];
    }
    
    
    return YES;
}

///ios9.0之前实现该方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    
    //支付宝支付跳转
    if ([url.host isEqualToString:@"safepay"]) {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"支付宝支付跳转 result = %@",resultDic);
            int statusCode = [resultDic[@"resultStatus"]  intValue];
            
            if (statusCode == 9000){
                //订单支付
                [[HCToast shareInstance] showToast:@"支付成功"];
                [[NSNotificationCenter defaultCenter] postNotificationName:@"alipay_paySuccess" object:nil];
                
            }else{
                //交易失败
                // [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
                [[HCToast shareInstance] showToast:@"支付异常"];
            }
        }];
    }
    
    return YES;
}

///ios9.0之前实现该方法
-(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);
            int statusCode = [resultDic[@"resultStatus"]  intValue];
            
            if (statusCode == 9000){
                //订单支付
                [[HCToast shareInstance] showToast:@"支付成功"];
                [[NSNotificationCenter defaultCenter] postNotificationName:@"alipay_paySuccess" object:nil];
                
            }else{
                //交易失败
                // [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
                [[HCToast shareInstance] showToast:@"支付异常"];
            }
        }];
    }
    
    return YES;
}

5、在需要支付的地方,调用支付方法

///调起支付宝支付
- (void)doAlipayWithParams:(NSString *)params{
    NSLog(@"支付宝支付信息:%@",params);
    ///没错,只需要调用单例方法 一句话搞定。但是需要注意,params:一般是后台给你的支付所需的信息,拼接成字符串传给支付宝就可以了。
    [[HCAlipayManager sharePayManager] handleOrderPayWithParams:params];
}

结束了,感谢阅读~

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 154,532评论 23 678
  • 今天,下雨了。不能出去玩儿,因为下雨爸爸还乒乓球去啦,每天早上他都去打球。妈妈做家务,我帮妈妈叠完衣服后,写了生字...
    刘彦博阅读 31评论 0 0
  • 前言:学历可以证明一个人在一段时间内完成了一些学习任务。 完成之后有没有可能利用起来,是另一回事。 学以致用才不会...
    阿嘉丽阅读 226评论 8 6
  • 从前有个人叫李浩,与老母亲相伴生活。他每天上山砍柴为生,年轻力盛,日子倒也过得丰盈有余,时常接济往来的贫困之人。...
    钱小闲阅读 658评论 0 0