前几天,头儿给我布置了一项任务,在我们APP里集成支付宝支付和微信支付,于是我分分钟去它们的官网找对应的开发文档以及demo.最初完全按官网的开发文档捣鼓,遇到了几个小问题,接下来我分享一下在iOS9平台上集成支付宝超级详细的过程,主要针对像我这样的新手菜鸟小白!
第一步:先把需要的所有的库和文件弄到我们的工程里!
1.alipaySDK相关
(1)framework和bundle包.
AlipaySDK.bundle
AlipaySDK.framework
(2)依赖的所有库
在General最下方的Linked Framesorks and Libraries中添加如下依赖(这里直接从支付宝开发文档上拿的图)
注意: libc++.tbd 和 libz.tbd 是Xcode7.0之后添加的库,Xcode7.0以前只需添加libc++.dylib和libz.dylib !!!!!!
2.openssl相关
(1)支付宝官方demo里的openssl文件夹以及Util文件夹拷贝到自己的工程里
(2)libcrypto.a 和 libssl.a 拷贝到工程里(支付宝官方demo这两个文件夹在Frameworks文件中)
(3)在Build Setting的Header Search Paths中添加 $(SRCROOT)/工程名/AliPay
3.需要在General最下方的Linked Framesorks and Libraries中将libsqlite 库添加进去,我这里用的libsqlite3.0.tbd
第二步:适配iOS9
在info中的App Transport Security 添加如下信息
支付宝开发文档上以XML形式展示
上述做法是适配iOS9.0 中App Transport Security(ATS)对http的限制,这里对支付宝的请求地址alipay.com、alipayobjects.com做例外.
如果Info 中对NSAppTransportSecurity进行配置
则上述的NSAppTransportSecurity可以不配置.
第三步:在info中添加Url Scheme ,如下图所示
第四步:添加代码
1.在要发起支付的文件中添加
/**发起支付*/
- (void)useAliPay{
NSString *partner = @”“;
NSString *seller = @”“;//商家的支付宝账户
NSString *privateKey = @”“;
if ([partner length] == 0 || [seller length] == 0 || [privateKey length] == 0){
//ios9之后,使用UIAlertController代替UIAlertView
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@”提示”
message:@”缺少partner或者seller或者私钥。”
preferredStyle:UIAlertControllerStyleAlert];UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@”OK” style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[self dismissViewControllerAnimated:YES completion:nil];
}];[alert addAction:defaultAction];
[self presentViewController:alert animated:YES completion:nil];
return;
}
Order *order = [[Order alloc] init];
order.partner = partner;
order.seller = seller;
order.tradeNO = [self generateTradeNO]; //订单ID(由商家自行制定)
order.productName = _product.subject; //商品标题
order.productDescription = _product.body; //商品描述
order.amount = [NSString stringWithFormat:@”%.2f”,_product.price]; //商品价格
order.notifyURL = @”http://www.xxx.com“; //回调URL
order.service = @”mobile.securitypay.pay”;
order.paymentType = @”1”;
order.inputCharset = @”utf-8”;
order.itBPay = @”30m”;
order.showUrl = @”m.alipay.com”;
//第三步中设置的Url Scheme就是appScheme的值,用于安全支付成功后重新唤起商户应用
NSString *appScheme = @”Alipay”;
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@”orderSpec = %@”,orderSpec);
id signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@”%@&sign=\”%@\”&sign_type=\”%@\”“,
orderSpec, signedString, @”RSA”];[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@”reslut = %@”,resultDic);
//对接收到的结果进行处理
}];
}
}
/**随机生成订单号*/
- (NSString *)generateTradeNO{
static int kNumber = 15;
NSString *sourceStr = @”0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
NSMutableString *resultStr = [[NSMutableString alloc] init];
srand(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.在APPDelega.m文件中添加支付完成后调用的代码
(外部存在支付包钱包,支付宝钱包将处理结果通过url返回。)
- (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) {
//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
NSLog(@”result = %@”,resultDic);
}];
}
if ([url.host isEqualToString:@”platformapi”]){
//支付宝钱包快登授权返回authCode
[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
NSLog(@”result = %@”,resultDic);
}];
}
return YES;
}
结束语
参照:支付宝开发文档
OK ,按照以上的方法小伙伴们就可以轻松的集成支付宝移动支付咯~如果小伙伴会配置pod,推荐使用ping++ ,几行代码就轻松搞定支付咯!
菜鸟新手初次做开发总结,如有问题,欢迎各位小伙伴帮忙指正~~~