iOS9支付宝移动开发笔记--MollyMmm

MollyMmm的github

前几天,头儿给我布置了一项任务,在我们APP里集成支付宝支付和微信支付,于是我分分钟去它们的官网找对应的开发文档以及demo.最初完全按官网的开发文档捣鼓,遇到了几个小问题,接下来我分享一下在iOS9平台上集成支付宝超级详细的过程,主要针对像我这样的新手菜鸟小白!

第一步:先把需要的所有的库和文件弄到我们的工程里!

alipay01

1.alipaySDK相关

(1)framework和bundle包.

AlipaySDK.bundle

AlipaySDK.framework

(2)依赖的所有库
在General最下方的Linked Framesorks and Libraries中添加如下依赖(这里直接从支付宝开发文档上拿的图)

alipay02

注意: 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 添加如下信息

alipay03

支付宝开发文档上以XML形式展示
alipay05
上述做法是适配iOS9.0 中App Transport Security(ATS)对http的限制,这里对支付宝的请求地址alipay.com、alipayobjects.com做例外.

如果Info 中对NSAppTransportSecurity进行配置
alipay06
则上述的NSAppTransportSecurity可以不配置.

第三步:在info中添加Url Scheme ,如下图所示

alipay04

第四步:添加代码

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++ ,几行代码就轻松搞定支付咯!

菜鸟新手初次做开发总结,如有问题,欢迎各位小伙伴帮忙指正~~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值