iOS支付宝集成

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析DNS,个人版 1个月
简介: iOS支付宝集成

iOS支付宝集成


使用cocopods安装

第一步:https://docs.open.alipay.com/54/104509来到这下载支付宝的示例Demo

10bd6f89b238555ded77eda045ffa47f.png

image.png


第二步:打开示例Demo找到这几个文件拷贝放到桌面

662ce87a26f34e8bb04e519ae99cfb66.png

Snip20180315_4.png


第三步:建一个Demo

3.1先把刚才拷贝出来的文件添加进工程

AlipaySDK.bundle

AlipaySDK.framework

3.2导入依赖库

3190d82d957656600baa9588df1e603b.png

Snip20180315_5.png


3.3把俩个.a文件加入库中

f413261f33c5eec72d7e66245e5f191f.png

Snip20180315_6.png


3.4把openssl和Utils两个文件夹加入到项目中

这里注意要这样加入这两个文件

04c17d92a7db09b5f58a17c1b136a77d.jpg

1025776-042b20e49de65d9b.gif

459000c81b50575a3f89965315c3c21d.png

Snip20180315_7.png

否则容易报下面这个错误

eca91df45996c7ad6bb65d448e05e296.png

Snip20180315_8.png

如果还是报这个错,那就这样

d613fd1488b87cc44f6c32197579e7b6.png

Snip20180315_9.png

3.4把下载的示例代码的几个文件拖入到项目中

0c39ae123d9da8b2e3db9818e094e811.png

Snip20180315_10.png


3.5.别忘记了把在info.plist中加上这个

b6c12618273c1ddcfc3a0e6a02110aed.png

Snip20180315_11.png


总于到代码了

1.在AppDelegate.m中导入头文件#import <AlipaySDK/AlipaySDK.h>添加如下代码

- (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);
        }];
        // 授权跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            // 解析 auth code
            NSString *result = resultDic[@"result"];
            NSString *authCode = nil;
            if (result.length>0) {
                NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                for (NSString *subResult in resultArr) {
                    if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                        authCode = [subResult substringFromIndex:10];
                        break;
                    }
                }
            }
            NSLog(@"授权结果 authCode = %@", authCode?:@"");
        }];
    }
    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);
        }];
        // 授权跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            // 解析 auth code
            NSString *result = resultDic[@"result"];
            NSString *authCode = nil;
            if (result.length>0) {
                NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                for (NSString *subResult in resultArr) {
                    if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                        authCode = [subResult substringFromIndex:10];
                        break;
                    }
                }
            }
            NSLog(@"授权结果 authCode = %@", authCode?:@"");
        }];
    }
    return YES;
}

在需要支付的地方

导入头文件

import <AlipaySDK/AlipaySDK.h>

这里的aliPay 就是调起支付宝支付

- (void)aliPay
{
        NSString *appScheme = @"app.haha.2018.3.15";
    // NOTE: 调用支付结果开始支付
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
        }];
}

特别注意⚠️这里的appScheme要设置为一样,因为支付后,要回到原来的应用程序,必须要对应一样

a22e1ba1e11330cf833cad539409d248.png

Snip20180315_17.png

结果如下

b99820a1aabe303668540c42d540ee2d.png

Snip20180315_15.png

方式二:

第一步:

platform :ios, ’10.0’
#use_frameworks!个别需要用到它,比如reactiveCocoa
def pods
  pod 'AlipaySDK-iOS'
end
target 'alipayDEMO' do
  pods
end

第二步:把demo中下载的这个几个文件拖到到项目中

56b79053804ba952f3da8bc6df7794a1.png

image.png

第三步:特别注意openssl这个文件的路径,容易报找不到这个头文件

24a8e1216ce08f8173d300c8fb70eaa6.png

image.png

第四步:注意添加URL Schemes

a84c6ed770bed84f8b30f2d7cb00f810.png

image.png

第五步:代码

在AppDelegate.h文件中导入头文件#import <AlipaySDK/AlipaySDK.h>

并添加如下代码

// 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);
        }];
        // 授权跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            // 解析 auth code
            NSString *result = resultDic[@"result"];
            NSString *authCode = nil;
            if (result.length>0) {
                NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                for (NSString *subResult in resultArr) {
                    if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                        authCode = [subResult substringFromIndex:10];
                        break;
                    }
                }
            }
            NSLog(@"授权结果 authCode = %@", authCode?:@"");
        }];
    }
    return YES;
}

在需要的地方添加支付或者添加预授权

UIButton *payBtn = [[UIButton alloc] init];
    payBtn.frame = CGRectMake(10, 100, 100, 100);
    payBtn.backgroundColor = [UIColor redColor];
    [payBtn setTitle:@"支付" forState:UIControlStateNormal];
    [payBtn addTarget:self action:@selector(payBtnClick) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:payBtn];
    UIButton *AuthBtn = [[UIButton alloc] init];
    AuthBtn.frame = CGRectMake(200, 100, 100, 100);
    AuthBtn.backgroundColor = [UIColor redColor];
    [AuthBtn setTitle:@"授权" forState:UIControlStateNormal];
    [AuthBtn addTarget:self action:@selector(AuthBtnClick) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:AuthBtn];
}
//支付
- (void)payBtnClick
{
        NSString *appScheme = @"app.alipay.2020.6.12";
    // NOTE: 调用支付结果开始支付
        [[AlipaySDK defaultService] payOrder:@"111" fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
        }];
}
//预授权
- (void)AuthBtnClick
{
    NSString *pid = @"";
    NSString *appID = @"";
    NSString *rsa2PrivateKey = @"";
    NSString *rsaPrivateKey = @"";
    //pid和appID获取失败,提示
    if ([pid length] == 0 ||
        [appID length] == 0 ||
        ([rsa2PrivateKey length] == 0 && [rsaPrivateKey length] == 0))
    {
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示"
                                                                       message:@"缺少pid或者appID或者私钥,请检查参数设置"
                                                                preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *action = [UIAlertAction actionWithTitle:@"知道了"
                                                         style:UIAlertActionStyleDefault
                                                       handler:^(UIAlertAction *action){
                                                       }];
        [alert addAction:action];
        [self presentViewController:alert animated:YES completion:^{ }];
        return;
    }
    //生成 auth info 对象
    APAuthInfo *authInfo = [APAuthInfo new];
    authInfo.pid = pid;
    authInfo.appID = appID;
    //auth type
    NSString *authType = [[NSUserDefaults standardUserDefaults] objectForKey:@"authType"];
    if (authType) {
        authInfo.authType = authType;
    }
    //应用注册scheme,在AlixPayDemo-Info.plist定义URL types
    NSString *appScheme = @"alipayDEMO";
    // 将授权信息拼接成字符串
    NSString *authInfoStr = [authInfo description];
    NSLog(@"authInfoStr = %@",authInfoStr);
    // 获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
    NSString *signedString = nil;
    APRSASigner* signer = [[APRSASigner alloc] initWithPrivateKey:((rsa2PrivateKey.length > 1)?rsa2PrivateKey:rsaPrivateKey)];
    if ((rsa2PrivateKey.length > 1)) {
        signedString = [signer signString:authInfoStr withRSA2:YES];
    } else {
        signedString = [signer signString:authInfoStr withRSA2:NO];
    }
    // 将签名成功字符串格式化为订单字符串,请严格按照该格式
    if (signedString.length > 0) {
        authInfoStr = [NSString stringWithFormat:@"%@&sign=%@&sign_type=%@", authInfoStr, signedString, ((rsa2PrivateKey.length > 1)?@"RSA2":@"RSA")];
        [[AlipaySDK defaultService] auth_V2WithInfo:authInfoStr
                                         fromScheme:appScheme
                                           callback:^(NSDictionary *resultDic) {
                                               NSLog(@"result = %@",resultDic);
                                               // 解析 auth code
                                               NSString *result = resultDic[@"result"];
                                               NSString *authCode = nil;
                                               if (result.length>0) {
                                                   NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                                                   for (NSString *subResult in resultArr) {
                                                       if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                                                           authCode = [subResult substringFromIndex:10];
                                                           break;
                                                       }
                                                   }
                                               }
                                               NSLog(@"授权结果 authCode = %@", authCode?:@"");
                                           }];
    }
}


相关文章
|
Java
Springboot集成第三方jar快速实现微信、支付宝等支付场景
Springboot集成第三方jar快速实现微信、支付宝等支付场景
635 0
Springboot集成第三方jar快速实现微信、支付宝等支付场景
|
3月前
|
安全 Java 测试技术
Spring Boot集成支付宝支付:概念与实战
【4月更文挑战第29天】在电子商务和在线业务应用中,集成有效且安全的支付解决方案是至关重要的。支付宝作为中国领先的支付服务提供商,其支付功能的集成可以显著提升用户体验。本篇博客将详细介绍如何在Spring Boot应用中集成支付宝支付功能,并提供一个实战示例。
235 2
|
7天前
|
iOS开发 Perl
IOS集成flutter_boost 3.0常见问题
IOS集成flutter_boost 3.0常见问题
13 0
|
2月前
|
人工智能 数据安全/隐私保护 iOS开发
苹果在WWDC24上宣布的所有内容:Apple Intelligence、集成ChatGPT的Siri、iOS 18
苹果在WWDC24上宣布的所有内容:Apple Intelligence、集成ChatGPT的Siri、iOS 18
|
2月前
|
机器学习/深度学习 定位技术 开发工具
必知的技术知识:ios个推推送集成
必知的技术知识:ios个推推送集成
16 0
|
3月前
|
安全 Android开发 iOS开发
构建未来:安卓与iOS的无缝集成技术探索
【5月更文挑战第20天】随着智能设备的普及和技术的不断进步,安卓和iOS两大操作系统之间的界限正在逐渐模糊。本文将深入探讨如何通过最新的API、框架和工具实现安卓与iOS应用的无缝集成,以及这一趋势对开发者和用户的潜在影响。我们将从技术可行性、安全性挑战、用户体验优化等角度出发,分析当前的发展状况,并展望未来可能的技术融合路径。
|
3月前
|
存储 监控 安全
打造高效移动办公环境:Android与iOS平台的集成策略
【5月更文挑战第15天】 在数字化时代,移动办公不再是一种奢望,而是日常工作的必需。随着智能手机和平板电脑的性能提升,Android与iOS设备已成为职场人士的重要工具。本文深入探讨了如何通过技术整合,提高两大移动平台在企业环境中的协同工作能力,重点分析了各自平台上的系统集成策略、安全性考虑以及跨平台协作工具的应用。通过对现有技术的剖析与案例研究,旨在为读者提供一套实用的移动办公解决方案。
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
106 0
|
3月前
|
Java 开发工具
解决SpringBoot集成支付宝支付中文订单描述验签错误问题
解决SpringBoot集成支付宝支付中文订单描述验签错误问题
60 0
|
9月前
|
设计模式 Java Maven
淘东电商项目(60) -聚合支付(集成支付宝)
淘东电商项目(60) -聚合支付(集成支付宝)
57 0

热门文章

最新文章