支付宝支付
来源:互联网 发布:java 面试宝典2017 编辑:程序博客网 时间:2024/06/10 05:58
支付宝SDK下载地址:https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1
集成参考官方文档:
导入代码文档:https://doc.open.alipay.com/doc2/detail.htm?spm=0.0.0.0.RiFaVa&treeId=59&articleId=103676&docType=1
Demo运行注意:https://doc.open.alipay.com/doc2/detail.htm?spm=0.0.0.0.Ravnv1&treeId=59&articleId=103677&docType=1
/* 在调用支付宝支付之前,需要我们将相关订单参数发送至我们的后台服务器,由后台服务器进行签名处理, 并返回客户端所有相关参数,客户端直接使用参数调起支付宝支付。 */
#pragma mark 跳转处理
//被废弃的方法.但是在低版本中会用到.建议写上
//客户端回调
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
if ([url.hostisEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDKdefaultService] processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary *resultDic) {
NSLog(@"resultDic--------------:%@",resultDic);
NSString *result = resultDic[@"result"];
NSLog(@"result--------------:%@",result);
NSString *resultStatus = resultDic[@"resultStatus"];
//9000 订单支付成功
// 支付完成需要把返回的outtradeID给解析出来,给服务器二次确认
if ([resultStatusisEqualToString:@"9000"]){
//获取支付宝交易流水号
NSString *outNum =nil;
NSMutableString *outTradeNum = [[NSMutableStringalloc] init];
NSString *outMsg =nil;
NSMutableString *outMsgs = [[NSMutableStringalloc] init];
NSArray *contentArray= [resultcomponentsSeparatedByString:@","];
for (NSString *strContentin contentArray) {
NSLog(@"strContent-1----------:%@",strContent);
if ([strContentcontainsString:@"trade_no"]){//判断','前面
outNum = [strContent componentsSeparatedByString:@":"][1];
[outTradeNum appendString:outNum];
[outTradeNum replaceOccurrencesOfString:@"\""withString:@""options:NSLiteralSearchrange:NSMakeRange(0, outTradeNum.length)];
break;
}elseif ([strContent containsString:@"msg"]){
outMsg = [strContent componentsSeparatedByString:@":"][1];
[outMsgs appendString:outMsg];
[outMsgs replaceOccurrencesOfString:@"\""withString:@""options:NSLiteralSearchrange:NSMakeRange(0, outMsgs.length)];
break;
}
}
NSLog(@"outTradeNum----------:%@",outTradeNum);
NSLog(@"outMsgs----------:%@",outMsgs);
// 第一个参数传的是alipay返回给我的out_trade_id 异步回调二次验证
//发出通知从支付宝回调回来之后,发一个通知,让请求支付的页面接收消息,并且展示出来,或者进行一些自定义的展示或者跳转
NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:outMsgs,@"outMsgs",outTradeNum,@"outTradeNum",nil];
NSNotification * notification = [NSNotificationnotificationWithName:@"AlipayPay"object:selfuserInfo:dict];
[[NSNotificationCenterdefaultCenter] postNotification:notification];
}else{
NSLog(@"resultStatus--------------:%@",resultStatus);
NSNotification * notification = [NSNotificationnotificationWithName:@"resultState"object:resultStatus];
[[NSNotificationCenterdefaultCenter] postNotification:notification];
}
}];
}
if ([url.hostisEqualToString:@"pay"]) {
//微信支付,处理支付结果
return [WXApihandleOpenURL:url delegate:self];
}
returnYES;
}
// 配置好的回调scheme
//h5端回调 这部分代码 写在需要支付的页面
NSString *appScheme =@"AliPayKit";
// 拉起支付宝,2016年5月之后更新是H5回调到这里
[[AlipaySDKdefaultService] payOrder:self.strAlipayPrivateKeyfromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"resultDic--------------:%@",resultDic);
// 解析 auth code
NSString *result = resultDic[@"result"];
NSLog(@"result-----------:%@",result);
NSString *resultStatus = resultDic[@"resultStatus"];
NSLog(@"resultStatus--------------:%@",resultStatus);
//9000 订单支付成功正常流程会进入这里如果中断了就去外面delegate那里的Block
if ([resultStatusisEqualToString:@"9000"]){
//获取支付宝交易流水号
NSString *outNum =nil;
NSMutableString *outTradeNum = [[NSMutableStringalloc] init];
NSString *outMsg =nil;
NSMutableString *outMsgs = [[NSMutableStringalloc] init];
NSArray *contentArray= [resultcomponentsSeparatedByString:@","];
NSLog(@"-------------3:%@",contentArray);
for (NSString *strContentin contentArray) {
NSLog(@"strContent-1----------:%@",strContent);
if ([strContentcontainsString:@"trade_no"]){//判断','前面
outNum = [strContent componentsSeparatedByString:@":"][1];
[outTradeNum appendString:outNum];
[outTradeNum replaceOccurrencesOfString:@"\""withString:@""options:NSLiteralSearchrange:NSMakeRange(0, outTradeNum.length)];
break;
}elseif ([strContent containsString:@"msg"]){
outMsg = [strContent componentsSeparatedByString:@":"][1];
[outMsgs appendString:outMsg];
[outMsgs replaceOccurrencesOfString:@"\""withString:@""options:NSLiteralSearchrange:NSMakeRange(0, outMsgs.length)];
break;
}
}
NSLog(@"outTradeNum-----------:%@",outTradeNum);
NSLog(@"outMsgs-----------:%@",outMsgs);
// 第一个参数传的是alipay返回给我的out_trade_id 异步回调二次验证
[self.alipayUtilsorderAliPayment:self.orderNumbermsg:outMsgs tradeNo:outTradeNum];
}else{
if ([resultStatusisEqualToString:@"8000"]){
[self.qxacUtilspopWindowNotFinish:@"订单正在处理中"content:nilVC:selfisDelegate:YESparams:@"return"];
}elseif ([resultStatus isEqualToString:@"4000"]){
[self.qxacUtilspopWindowNotFinish:@"订单支付失败"content:nilVC:selfisDelegate:YESparams:@"return"];
}elseif ([resultStatus isEqualToString:@"6001"]){
[self.qxacUtilspopWindowNotFinish:@"订单取消"content:nilVC:selfisDelegate:YESparams:@"return"];
}elseif ([resultStatus isEqualToString:@"6002"]){
[self.qxacUtilspopWindowNotFinish:@"网络连接出错"content:nilVC:selfisDelegate:YESparams:@"return"];
}
//8000 正在处理中 4000 订单支付失败 6001用户中途取消/重复操作取消 6002 网络连接出错 --->从H回来
// 弹出失败的界面,弹出之后的话就不支付界面消失,方便重新支付
}
}];
- app支付--支付宝支付
- 支付宝支付--手机支付
- 支付-支付宝APP支付
- 支付--支付宝APP支付
- 支付宝 支付认识
- iOS 支付宝支付
- ios 支付宝支付
- android支付宝支付
- Android 支付宝【支付】
- 支付宝支付流程
- 支付宝快捷支付
- 支付宝支付
- 支付宝支付
- 支付宝-移动支付
- iOS 支付宝支付
- android 支付宝支付
- IOS支付宝支付
- 支付宝支付写法
- Flume之监控文件内容变化
- 字符串的最长回文子序列以及最长子串
- 使用aspectj声明事务
- 剑指offer-平衡二叉树
- 搭建百度地图SDK的Android开发环境(百度地图SDK版本V4.3.0)
- 支付宝支付
- IE,谷歌访问跨域问题
- Django+nginx+gunicorn部署流程(一)
- docker下使用disconf:细说demo开发
- python extend和append总结
- 51单片机之中断的实现过程
- mybatis系列五:mybatis代码生成工具
- 139. Word Break
- android 录制视频及调取本地视频