支付宝支付

来源:互联网 发布: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";

    // 拉起支付宝,20165月之后更新是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回来

           // 弹出失败的界面,弹出之后的话就不支付界面消失,方便重新支付

        }

    }];


0 0