关于支付宝支付, 首先了解一下, 支付流程:
1.用户点击支付
2.客户端请求服务器用户支付
3.服务器接收请求生成金额订单等要给第三方支付的一切信息,并生成回调参数传给客户端
4.客户端接收信息(一般会再让用户确认支付或者干脆购买后是生成订单,然后才是付款)并将服务器给的信息分别传入SDK需要的参数中,调用SDK的支付方法
5.由支付宝SDK向支付宝自己的服务器发出支付请求,支付宝的服务器接收支付请求处理成功后,给客户端本身与公司的后台都发送一条支付成功的消息,客户端与后台根据这条消息再做处理.
开发步骤
第一步: 仔细看开发文档, 并 下载 SDK开发文档 很重要, 建议先把开发文档仔仔细细看一遍, 可以避免很多坑, 特别是交互流程:
支付功能的交互流程
第二步: 集成 SDK
1 . 将 SDK 拖进 工程
2 . 在Build Phases 选项卡的 Link Binary With Libraries 中,增加以下依赖:
添加SDK依赖的类库
3 . 设置为URL Schemes
设置为URL Schemes
4 . 添加支付逻辑代码,完成支付过程
AppDelegate.m
#import <AlipaySDK/AlipaySDK.h>//支付宝支付
#import <AlipaySDK/AlipaySDK.h>//支付宝支付
API调用说明
orderString
- 由后端统一生成,
appScheme
- 就是环境配置中设置的URLScheme
[[AlipaySDK defaultService] payOrder:orderString
fromScheme:appScheme
callback:^(NSDictionary *resultDic) { //支付结果返回
NSLog(@"reslut = %@",resultDic);
- 处理支付结果:在AppDelegate的以下三个方法中调用,这里调用方法单独封装出来
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
NSString *urlStr = [NSString stringWithFormat:@"%@",url];
if ([url.host isEqualToString:@"safepay"]) { //判断支付宝回调
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//TY_Log(@"result = %@",resultDic);
//处理支付结果
}];
}else if ([sourceApplication isEqualToString:@"com.tencent.xin"] && [urlStr containsString:@"pay"]){ //判断微信回调
TYLLog(@"跳转微信支付处理支付方式结果");
return [WXApi handleOpenURL:url delegate:self];
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary<NSString*, id> *)options {
NSString *urlStr = [NSString stringWithFormat:@"%@",url];
if ([url.host isEqualToString:@"safepay"]) { //判断支付宝回调
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//TY_Log(@"result = %@",resultDic);
//处理支付结果
}];
}else if ([sourceApplication isEqualToString:@"com.tencent.xin"] && [urlStr containsString:@"pay"]){ //判断微信回调
TYLLog(@"跳转微信支付处理支付方式结果");
return [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
[WXApi handleOpenURL:url delegate:self];