iOS 接入
导入代码
通过 CocoaPods 导入
pod 'AlipaySDK-iOS'手动导入
启动 IDE(如 Xcode),把 iOS 包中的压缩文件中以下文件拷贝到项目文件夹下,并导入到项目工程中。
AlipaySDK.bundle
AlipaySDK.framework在 Build Phases 选项卡的 Link Binary With Libraries 中,增加以下依赖:
其中,需要注意的是:
- 如果是 Xcode 7.0之后的版本,需要添加 libc++.tbd、libz.tbd;
- 如果是 Xcode 7.0之前的版本,需要添加 libc++.dylib、libz.dylib(如下图所示)。
增加头文件引用
在需要调用 AlipaySDK 的文件中,增加头文件引用。
import <AlipaySDK/AlipaySDK.h>组装请求信息
注意:这一步应在商户服务端完成,商户服务端直接将组装和签名后的请求串 orderString 传给客户端,客户端直接传给 SDK 发起请求。文档和 Demo 是为了示例效果在客户端实现。
//将商品信息赋予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);
}];
}详细可参见 Demo 中示例文件
- AliSDKDemo\APViewController.h
- AliSDKDemo\APViewController.m
- AliSDKDemo\Order.h
- AliSDKDemo\Order.m
配置返回 url 处理方法
本步骤指引开发者配置支付宝客户端返回 url 处理方法(外部存在支付宝钱包,支付宝钱包将处理结果通过 url 返回)。
如示例 AliSDKDemo\APAppDelegate.m 文件中,增加引用代码:
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.如果遇到运行后报错,类似于以下提示信息:
Cannot find interface declaration for 'NSObject', superclass of 'Base64'那么需要打开报错了的文件,增加头文件。
# import <Foundation/Foundation.h>2.如果商户要在某个文件中使用支付宝的开发包类库,需增加引用头文件。
# import <AlipaySDK/AlipaySDK.h>3.点击项目名称,点击 Build Settings 选项卡,在搜索框中,以关键字“search”搜索,对“Header Search Paths”增加头文件路径:$(SRCROOT)/项目名称。如果头文件信息已增加,可不必再增加。

4、点击项目名称,点击 Build Phases 选项卡,在“Link Binary with Librarles”选项中,新增“AlipaySDK.framework”和“SystemConfiguration.framework”两个系统库文件。如果商户项目中已有这两个库文件,可不必再增加。

5、点击项目名称,点击 Info 选项卡,在“URL Types”选项中,点击“+”,在“URL Schemes”中输入“alisdkdemo”。“alisdkdemo”来自于文件“APViewController.m”的 NSString *appScheme = @"alisdkdemo";。
注意:这里的 URL Schemes 中输入的 alisdkdemo,为测试 demo,实际商户的 app 中要填写独立的 scheme,建议跟商户的 app 有一定的标示度,要做到和其他的商户 app 不重复,否则可能会导致支付宝返回的结果无法正确跳回商户 app。
更多详情参见支付宝官方文档