iOS快速集成支付宝
2016 - 06 - 13
Posted by TianBai
前期准备
- 接入前期准备工作包括商户签约和密钥配置,已完成商户可略过。
- 下载支付宝SDK支付宝SDK下载地址
SDK集成流程
- 将支付宝SDK中以下文件拷贝到项目文件夹下,并导入开发环境中。
AlipaySDK.bundle
AlipaySDK.framework
libcrypto.a
libssl.a
AliSDKDemoUtil 及下面所有文件
AliSDKDemoopenssl 及下面所有文件
Order.h
和 Order.m
- 导入系统依赖库
在link Binary With Libraries 里面添加
CoreMotion.framework
CFNetwork.framework
SystemConfiguration.framework
QuartzCore.framework
CoreText.framework
CoreTelephony.framework
CoreGraphics.framework
libc++.tbd
libz.tbd
加上之前导入的3个
AlipaySDK.framework
libcrypto.a
libssl.a
共计12个
- 在需要使用SDK的文件中,增加头文件引用。
#import <alipaysdk alipaysdk.h="">
#import "Order.h"
#import "DataSigner.h"
#import <alipaysdk alipaysdk.h="">
但是会出现错误:
这是为什么呢,原因是项目没有找到之前导入的AliSDKDemoUtil 及下面所有文件
,AliSDKDemoopenssl 及下面所有文件
头文件,解决方法 在项目文件夹中找到Util
和openssl
文件夹 ,在Header Search Paths中添加路径
到这一步,SDK集成已经完毕
配置代码
- 配置alipay支付
#pragma mark ==============配置alipay支付==============
- (void)payAction
{
/*
*生成订单信息及签名
*/
//将商品信息赋予AlixPayOrder的成员变量
Order *order = [[Order alloc] init];
order.partner = @"";//商户在支付宝签约时,支付宝为商户分配的唯一标识号(以2088开头的16位纯数字)。
order.sellerID = @"";////卖家支付宝账号对应的支付宝唯一用户号(以2088开头的16位纯数字),订单支付金额将打入该账户,一个partner可以对应多个seller_id。
order.outTradeNO = [self generateTradeNO]; //订单ID(由商家自行制定)
order.subject = @"测试商品"; //商品的标题/交易标题/订单标题/订单关键字等。
order.body = @"runbey商品描述"; //对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
order.totalFee = @"0.01"; //该笔订单的资金总额,单位为RMB(Yuan)。取值范围为[0.01,100000000.00],精确到小数点后两位。
order.notifyURL = @"http://*****"; //支付宝服务器主动通知商户网站里指定的页面http路径。
//实际项目开发中 订单信息应该由服务器返回
order.service = @"mobile.securitypay.pay";
order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
order.showURL = @"m.alipay.com";
//应用注册scheme 便于支付结束后重新打开客户端
NSString *appScheme = @"";
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec);
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
NSString * privateKey = @"";//商户私钥
id<datasigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
NSLog(@"签名字符串:%@",orderString);
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"支付结果reslut = %@",resultDic);
}];
}
}
#pragma mark ==============产生随机订单号==============
- (NSString *)generateTradeNO
{
static int kNumber = 15;
NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSMutableString *resultStr = [[NSMutableString alloc] init];
srand((unsigned)time(0));
for (int i = 0; i < kNumber; i++)
{
unsigned index = rand() % [sourceStr length];
NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];
[resultStr appendString:oneStr];
}
return resultStr;
}
此时运行,这2个文件:
base64.h
openssl_wrapper.h
会出现:
Cannot find interface declaration for 'NSObject', superclass of 'Base64'
那么需要打开的文件base64.h
openssl_wrapper.h
,顶部添加头:
#import <foundation foundation.h="">
- 配置返回处理代码
在 AppDelegate.m 文件中,增加引用代码:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
//如果极简 SDK 不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给 SDK
if ([url.host isEqualToString:@"safepay"])
{
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
- 添加URL Schemes
点击项目名称,点击”Info”选项卡,在”URL Types”选项中,点击”+”, 在”URL Schemes”中输入项目的bundleid。”bundleid”来自于 NSString *appScheme = @”****”(一般为项目的bundleid)
至此,完成了支付宝iOS客户端的配置
微信支付撰写中。。。。
后记:
有朋友反馈,运行时在 rsa.h
中,会出现:
解决方法:
在在项目文件夹中找到找到和项目同名的文件夹 ,在Header Search Paths中添加路径
一样把文件夹拖进去!