美文网首页支付相关
iOS支付系列之(一)---支付宝支付

iOS支付系列之(一)---支付宝支付

作者: 2897275c8a00 | 来源:发表于2017-02-10 13:59 被阅读121次

Copyright © 2017年ZaneWangWang. All rights reserved.

       总结一下最近项目中出现的三种支付方式,供大家借鉴,不足之处还望大家提出,方便后期的完善共同进步,如果你看到的不是原文请到原文查看支付宝支付过程

--支付宝集成过程

1.cocoapods 集成不在赘述 直接podFile 加入pod'AliPay','~> 最新版本号'

2.支付宝sdk拖入工程集成方式

(1).支付宝sdk下载地址

(2).把iOS包中的压缩文件中AlipaySDK.bundle、 AlipaySDK.framework拷贝到项目文件夹下,并导入到项目工程中。

(3).在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:

支付宝sdk依赖库

(4).如果你的app基于9.0编译,那么为了适配iOS9.0中的App Transport Security(ATS)对http的限制,需要在infoplist中加入相应的配置:

加入字典NSAppTransportSecurity在字典中加入键NSAllowsArbitraryLoads值YES

------------------------------到这里集成过程完成-----------------------------

--支付过程

1.支付界面导入#import <AlipaySDK/AlipaySDK.h>

2.自定义一个下单方法在该方法中,调用自己服务器提供的支付接口,一定要按照服务器要求组织订单参数

- (IBAction)respondsToOrderBnt:(UIButton*)sender {

NSDictionary*params =[[ShoppingCart  shareShoppingCart] getOrderInfoWithType:_isDetailCome withRemarks:[cell.userMessage.text isEqualToString:@""]?@"支付":cell.userMessage.textwithAddress:_userAddress?_userAddress:_address.addresss[0] withInvoiceState:@"1"withFreight:_freight];

//这里我是使用购物车model实例方法组织的订单参数格式如下图


组织方式一定要按照自己公司要求

NSData*jsonData=[NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil];

NSString*jsonStr=[[NSStringalloc]initWithData:jsonDataencoding:NSUTF8StringEncoding];

//1.加粗这一段是我们公司要求的组织订单,运费等信息的方式,大家一定要按自己的公司的要求来做。

//2.下边调用公司的下单接口下单,成功与否这要取决于你组织参数的正确与否了.

[SettlementViewModel sendOrderWithDic:@{@"data":jsonStr} withBackData:^(NSDictionary *info,NSString *error) {

if(error) {

ZANEALERT(@"下单失败",self);

}else{

if([[info objectForKey:@"httpCode"] integerValue] ==200) {

//3.下单成功后调用公司的支付接口,在这里后台会对相应的信息进行加密,返回给我们加密后的信息(加密这一块在面试的时候回问到,但是真正在项目中加密都是放在后台的)

[self payWithOrderno:[[[info objectForKey:@"data"] firstObject] objectForKey:@"orderNu"]];

}else{

NSString*message = [NSStringstringWithFormat:@"下单失败:%@", [modelobjectForKey:@"msg"]];

ZANEALERT(message,self);

}}}];}}

//公司的支付接口

- (void)payWithOrderno:(NSString*)numberno{

[SettlementViewModel payWithDic:orderInfo/*按要求组织这里需要用到后台返回的下单成功后的订单号*/ withBackData:^(NSDictionary*info,NSString*error) {

if(error) {

//这里是错误信息

}else{

if([[info objectForKey:@"httpCode"] integerValue] ==200) { 

//自己服务器的支付接口成功后调用支付宝sdk方法调起支付

[[AlipaySDK defaultService] payOrder:[info objectForKey:@"data"] fromScheme:urlScheme/*你自己项目的scheme,用于回调*/ callback:^(NSDictionary*resultDic) {

URL Schemes位置

//这里是没有安装支付宝客户端反回的支付结果信息

}];}}}}];}

-----------到这里支付的调起已经完成-----------

--回调处理

1.在appdelegate里面,导入#import<AlipaySDK/AlipaySDK.h>

2.在相应的方法中完成回调

#pragma mark - Alipay

- (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.hostisEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode

[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary*resultDic) {

//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】

NSLog(@"result = %@",resultDic);

}];

}

return YES;

}

// NOTE: 9.0以后使用新API接口支付宝

- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options

{

if([url.host isEqualToString:@"safepay"]) {

//跳转支付宝钱包进行支付,处理支付结果

[[AlipaySDK defaultService] processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic) {

//支付结果的处理

if([[resultDic objectForKey:@"resultStatus"]integerValue] ==6001) {

//取消支付

}elseif([[resultDicobjectForKey:@"resultStatus"]integerValue] ==9000){

//支付成功

}}];}

return YES;}

-----------------------------到这里整个支付过程就完成了---------------------------

第一次分享经验,不足之处还望大家提出,方便后期的完善共同进步,如果你看到的不是原文请到原文查看支付宝支付过程


相关文章

网友评论

  • 山已几孑:1.cocoapods 集成不在赘述 直接podFile 加入pod'AliPay','~> 最新版本号'

    这个不是ali官方的git, 并且版本及其落后,大家不要用那个。
    还是手动导入吧,cocoaPods上面也灭有及时更新的
  • SigridZane:加个总结性内容本

本文标题:iOS支付系列之(一)---支付宝支付

本文链接:https://www.haomeiwen.com/subject/dicgittx.html