iOS 集成流程
导入代码
通过 CocoaPods 导入
pod 'AlipaySDK-iOS'
手动导入
AlipaySDK.bundle
AlipaySDK.framework
增加头文件引用
# import <AlipaySDK/AlipaySDK.h>
组装请求信息
//将商品信息赋予AlixPayOrder的成员变量
Order* order = [Order new];
// NOTE: app_id设置
order.app_id = appID;
// NOTE: 支付接口名称
order.method = @"alipay.trade.app.pay";
// NOTE: 参数编码格式
order.charset = @"utf-8";
// NOTE: 当前时间点
NSDateFormatter* formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
order.timestamp = [formatter stringFromDate:[NSDate date]];
// NOTE: 支付版本
order.version = @"1.0";
// NOTE: sign_type设置
order.sign_type = @"RSA";
// NOTE: 商品数据
order.biz_content = [BizContent new];
order.biz_content.body = @"我是测试数据";
order.biz_content.subject = @"1";
order.biz_content.out_trade_no = [self generateTradeNO]; //订单ID(由商家自行制定)
order.biz_content.timeout_express = @"30m"; //超时时间设置
order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01]; //商品价格
//将商品信息拼接成字符串
NSString *orderInfo = [order orderInfoEncoded:NO];
NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
NSLog(@"orderSpec = %@",orderInfo);
// NOTE: 获取私钥并将商户信息签名,外部商户的加签过程请务必放在服务端,防止公私钥数据泄露;
// 需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderInfo];
// NOTE: 如果加签成功,则继续执行支付
if (signedString != nil) {
//应用注册scheme,在AliSDKDemo-Info.plist定义URL types
NSString *appScheme = @"alisdkdemo";
// NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",
orderInfoEncoded, signedString];
// NOTE: 调用支付结果开始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
}
配置返回 URL 处理方法
# import <AlipaySDK/AlipaySDK.h>
@implementation AppDelegate
中以下代码中的 NSLog 改为实际业务处理代码:- (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;
}
针对Demo的运行注意
1.
1.
Cannot find interface declaration for 'NSObject', superclass of 'Base64'
# import <Foundation/Foundation.h>
1.
# import <AlipaySDK/AlipaySDK.h>
1.

2.

3.
NSString *appScheme = @"alisdkdemo";
。**注意:**这里的 URL Schemes 中输入的 alisdkdemo,为测试 demo,实际商家的 App 中要填写独立的 scheme,建议跟商家的 App 有一定的标示度,要做到和其它的商家 App 不重复,否则可能会导致支付宝返回的结果无法正确跳回商家 App。

配置基本信息
NSString *appid = @"";
NSString *privateKey = @"";
参数 | 含义 |
---|---|
appid | 应用的 APPID,调用 API 时用来识别开发者。可查看 [创建应用并获取APPID](https://opendocs.alipay.com/open/200/105310#查看 APPID)。 |
private_key | 应用私钥,pkcs8 格式。可查看 配置应用。 |
示例代码运行逻辑
1.
app_id=2015052600090779&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.02","subject":"1","body":"我是测试数据","out_trade_no":"ZQLM3O56MJD4SK3"}&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA2×tamp=2016-07-28 20:36:11&version=1.0
1.
"GsSZgPloF1vn52XAItRAldwQAbzIgkDyByCxMfTZG%2FMapRoyrNIJo4U1LUGjHp6gdBZ7U8jA1kljLPqkeGv8MZigd3kH25V0UK3Jc3C94Ngxm5S%2Fz5QsNr6wnqNY9sx%2Bw6DqNdEQnnks7PKvvU0zgsynip50lAhJmflmfHvp%2Bgk%3D"
1.
app_id=2015052600090779&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.02","subject":"1","body":"我是测试数据","out_trade_no":"ZQLM3O56MJD4SK3"}&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA2×tamp=2016-07-28 20:36:11&version=1.0&sign=*********
1.
(void)payOrder:(NSString *)orderStr
fromScheme:(NSString *)schemeStr
callback:(CompletionBlock)completionBlock
1.
- (BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString )sourceApplication annotation:(id)annotation
中调用获取返回数据的代码(iOS 9.0 及以上需要在 - (BOOL)application:(UIApplication )app openURL:(NSURL )url options:(NSDictionary<NSString, id> *)options
中执行):[[AlipaySDK defaultService]
processOrderWithPaymentResult:url
standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);//返回的支付结果
}];
针对 Swift 接入 AlipaySDK 的问题
#import <AlipaySDK/AlipaySDK.h>
。如此,在需要调用 AlipaySDK 的地方,即可直接使用,具体调用方式参照 OC。#import <UIKit/UIKit.h>
。iOS 调用说明
接口名称:AlipaySDK 接口描述:提供支付功能。
方法名称 | 方法描述 |
---|---|
+(Alipay *)defaultService; | 获取服务实例。 |
-(void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr callback:(CompletionBlock)completionBlock; | 支付并通过回调返回结果。 |
-(void)processOrderWithPaymentResult:(NSURL*)resultUrl standbyCallback:(CompletionBlock)completionBlock; | 处理支付宝客户端返回的 URL(在 App 被强行停止运行时,通过这个方法获取支付结果)。 |
快捷订单支付 iOS
方法名称:pay 方法 方法原型:(void)payOrder:(NSString )orderStr fromScheme:(NSString )schemeStr callback:(CompletionBlock)completionBlock; 方法功能:提供给商户快捷订单支付功能。
参数名称 | 参数描述 |
---|---|
NSString* scheme | 商家程序注册的 URL protocol,供支付完成后回调商家程序使用。 |
(CompletionBlock)completionBlock | 快捷支付开发包回调函数,返回免登、支付结果。本地未安装支付宝客户端,或未成功调用支付宝客户端进行支付的情况下(走 H5 收银台),会通过该 completionBlock 返回支付结果。相应的结果可查看 同步返回参数说明。 |
NSString* orderString | App 支付请求参数字符串,主要包含商户的订单信息,key=value 形式,以&连接。 |
app_id=2015052600090779&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.02%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22314VYGIAGG7ZOYY%22%7D&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA2×tamp=2016-08-15%2012%3A12%3A15&version=1.0&sign=MsbylYkCzlfYLy9PeRwUUIg9nZPeN9SfXPNavUCroGKR5Kqvx0nEnd3eRmKxJuthNUx4ERCXe552EV9PfwexqW%2B1wbKOdYtDIb4%2B7PL3Pc94RZL0zKaWcaY3tSL89%2FuAVUsQuFqEJdhIukuKygrXucvejOUgTCfoUdwTi7z%2BZzQ%3D
处理客户端返回 URL
方法名称:处理客户端方法 方法原型:-(void)processOrderWithPaymentResult:(NSURL*)resultUrl standbyCallback:(CompletionBlock)completionBlock; 方法功能:设备已安装支付宝客户端情况下,处理支付宝客户端返回的 URL。
参数名称 | 参数描述 |
---|---|
NSURL *resultUrl | 支付宝客户端回传的 URL。 |
CompletionBlock completionBlock | 本地安装了支付宝客户端,且成功调用支付宝客户端进行支付的情况下,会通过该 completionBlock 返回支付结果。 |
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
中调用该方法,iOS9.0 及以上请在 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
中调用该方法,具体可查看 Demo。回调接口
联调问题排查
修改于 2023-11-20 03:35:36