前期准备
- 接入前期准备工作包括商户签约和密钥配置,已完成商户可略过。
- 下载支付宝SDK
SDK集成流程
-
将支付宝SDK中以下文件拷贝到项目文件夹下,并导入开发环境中。
AlipaySDK.bundle
AlipaySDK.framework
libcrypto.a
libssl.a
AliSDKDemo\\Util 及下面所有文件
AliSDKDemo\\openssl 及下面所有文件
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#import "Order.h"#import "DataSigner.h"#import 复制代码
但是会出现错误:
这是为什么呢,原因是项目没有找到之前导入的AliSDKDemo\\Util 及下面所有文件
,AliSDKDemo\\openssl 及下面所有文件
头文件,解决方法 在项目文件夹中找到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 = @"";//商户私钥 idsigner = 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复制代码
- 配置返回处理代码 在 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中添加路径
一样把文件夹拖进去!