支付宝开发

#pragma mark   ==============点击订单模拟支付行为==============

//

//选中商品调用支付宝极简支付

//

- (void)doAlipayPay

{

    //重要说明

    //这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;

    //真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;

    //防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;

/*============================================================================*/

/*=======================需要填写商户app申请的===================================*/

/*============================================================================*/

    NSString *appID =@"";

    

    // 如下私钥,rsa2PrivateKey或者 rsaPrivateKey只需要填入一个

    // 如果商户两个都设置了,优先使用 rsa2PrivateKey

    // rsa2PrivateKey 可以保证商户交易在更加安全的环境下进行,建议使用 rsa2PrivateKey

    // 获取 rsa2PrivateKey,建议使用支付宝提供的公私钥生成工具生成,

    // 工具地址:https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106097&docType=1

    NSString *rsa2PrivateKey =@"";

    NSString *rsaPrivateKey =@"";

/*============================================================================*/

/*============================================================================*/

/*============================================================================*/

    //partnerseller获取失败,提示

    if ([appIDlength] ==0 ||

        ([rsa2PrivateKey length] ==0 && [rsaPrivateKeylength] == 0))

    {

        UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"提示"

                                                        message:@"缺少appId或者私钥。"

                                                       delegate:self

                                              cancelButtonTitle:@"确定"

                                              otherButtonTitles:nil];

        [alert show];

        return;

    }

    

    /*

     *生成订单信息及签名

     */

    //将商品信息赋予AlixPayOrder的成员变量

    Order* order = [Ordernew];

    

    // NOTE: app_id设置

    order.app_id = appID;

    

    // NOTE: 支付接口名称

    order.method =@"alipay.trade.app.pay";

    

    // NOTE: 参数编码格式

    order.charset =@"utf-8";

    

    // NOTE: 当前时间点

    NSDateFormatter* formatter = [NSDateFormatternew];

    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    order.timestamp = [formatterstringFromDate:[NSDatedate]];

    

    // NOTE: 支付版本

    order.version =@"1.0";

    

    // NOTE: sign_type 根据商户设置的私钥来决定

    order.sign_type = (rsa2PrivateKey.length >1)?@"RSA2":@"RSA";

    

    // NOTE: 商品数据

    order.biz_content = [BizContentnew];

    order.biz_content.body =@"我是测试数据";

    order.biz_content.subject =@"1";

    order.biz_content.out_trade_no = [selfgenerateTradeNO];//订单ID(由商家自行制定)

    order.biz_content.timeout_express =@"30m";//超时时间设置

    order.biz_content.total_amount = [NSStringstringWithFormat:@"%.2f",0.01];//商品价格

    

    //将商品信息拼接成字符串

    NSString *orderInfo = [orderorderInfoEncoded:NO];

    NSString *orderInfoEncoded = [orderorderInfoEncoded:YES];

    NSLog(@"orderSpec = %@",orderInfo);

    

    // NOTE: 获取私钥并将商户信息签名,外部商户的加签过程请务必放在服务端,防止公私钥数据泄露;

    //       需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode

    NSString *signedString =nil;

    RSADataSigner* signer = [[RSADataSigneralloc]initWithPrivateKey:((rsa2PrivateKey.length >1)?rsa2PrivateKey:rsaPrivateKey)];

    if ((rsa2PrivateKey.length >1)) {

        signedString = [signer signString:orderInfowithRSA2:YES];

    } else {

       signedString = [signer signString:orderInfowithRSA2:NO];

    }

    

    // NOTE: 如果加签成功,则继续执行支付

    if (signedString !=nil) {

        //应用注册scheme,AliSDKDemo-Info.plist定义URL types

        NSString *appScheme =@"alisdkdemo";

        

        // NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式

        NSString *orderString = [NSStringstringWithFormat:@"%@&sign=%@",

                                 orderInfoEncoded, signedString];

        

        // NOTE: 调用支付结果开始支付

        [[AlipaySDKdefaultService]payOrder:orderStringfromScheme:appSchemecallback:^(NSDictionary *resultDic) {

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

         NSString * str = [resultDicobjectForKey:@"resultStatus"];

        if ([strisEqualToString:@"9000"])

        {

            [selfpaySuccess];

        }

        

        else

        {

            [selfpayError];

        }


        }];

    }

}


#pragma mark -

#pragma mark   ==============点击模拟授权行为==============


- (void)doAlipayAuth

{

    //重要说明

    //这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;

    //真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;

    //防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;

    /*============================================================================*/

    /*=======================需要填写商户app申请的===================================*/

    /*============================================================================*/

    NSString *pid =@"";

    NSString *appID =@"";

    

    // 如下私钥,rsa2PrivateKey或者 rsaPrivateKey只需要填入一个

    // 如果商户两个都设置了,优先使用 rsa2PrivateKey

    // rsa2PrivateKey 可以保证商户交易在更加安全的环境下进行,建议使用 rsa2PrivateKey

    // 获取 rsa2PrivateKey,建议使用支付宝提供的公私钥生成工具生成,

    // 工具地址:https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106097&docType=1

    NSString *rsa2PrivateKey =@"";

    NSString *rsaPrivateKey =@"";

    /*============================================================================*/

    /*============================================================================*/

    /*============================================================================*/

    

    //pidappID获取失败,提示

    if ([pidlength] ==0 ||

        [appID length] ==0 ||

        ([rsa2PrivateKey length] ==0 && [rsaPrivateKeylength] == 0))

    {

        UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"提示"

                                                        message:@"缺少pid或者appID或者私钥。"

                                                       delegate:self

                                              cancelButtonTitle:@"确定"

                                              otherButtonTitles:nil];

        [alert show];

        return;

    }

    

    //生成 auth info对象

    APAuthV2Info *authInfo = [APAuthV2Infonew];

    authInfo.pid = pid;

    authInfo.appID = appID;

    

    //auth type

    NSString *authType = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"authType"];

    if (authType) {

        authInfo.authType = authType;

    }

    

    //应用注册scheme,AlixPayDemo-Info.plist定义URL types

    NSString *appScheme =@"alisdkdemo";

    

    // 将授权信息拼接成字符串

    NSString *authInfoStr = [authInfodescription];

    NSLog(@"authInfoStr = %@",authInfoStr);

    

    // 获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode

    NSString *signedString =nil;

    RSADataSigner* signer = [[RSADataSigneralloc]initWithPrivateKey:((rsa2PrivateKey.length >1)?rsa2PrivateKey:rsaPrivateKey)];

    if ((rsa2PrivateKey.length >1)) {

        signedString = [signer signString:authInfoStrwithRSA2:YES];

    } else {

        signedString = [signer signString:authInfoStrwithRSA2:NO];

    }

    

    // 将签名成功字符串格式化为订单字符串,请严格按照该格式

    if (signedString.length >0) {

        authInfoStr = [NSStringstringWithFormat:@"%@&sign=%@&sign_type=%@", authInfoStr, signedString, ((rsa2PrivateKey.length >1)?@"RSA2":@"RSA")];

        [[AlipaySDKdefaultService]auth_V2WithInfo:authInfoStr

                                         fromScheme:appScheme

                                           callback:^(NSDictionary *resultDic) {

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

                                               //解析 auth code

                                               NSString *result = resultDic[@"result"];

                                               NSString *authCode =nil;

                                               if (result.length>0) {

                                                   NSArray *resultArr = [resultcomponentsSeparatedByString:@"&"];

                                                   for (NSString *subResultin resultArr) {

                                                       if (subResult.length >10 && [subResult hasPrefix:@"auth_code="]) {

                                                           authCode = [subResultsubstringFromIndex:10];

                                                           break;

                                                       }

                                                   }

                                               }

                                               NSLog(@"授权结果 authCode = %@", authCode?:@"");

                                           }];

    }

}








- (BOOL)application:(UIApplication *)application

            openURL:(NSURL *)url

  sourceApplication:(NSString *)sourceApplication

         annotation:(id)annotation {

    

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

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

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

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

        }];

        

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

        [[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary *resultDic) {

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

            // 解析 auth code

            NSString *result = resultDic[@"result"];

            NSString *authCode =nil;

            if (result.length>0) {

                NSArray *resultArr = [resultcomponentsSeparatedByString:@"&"];

                for (NSString *subResultin resultArr) {

                    if (subResult.length >10 && [subResulthasPrefix:@"auth_code="]) {

                        authCode = [subResult substringFromIndex:10];

                        break;

                    }

                }

            }

            NSLog(@"授权结果 authCode = %@", authCode?:@"");

        }];

    }

    returnYES;

}


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

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*,id> *)options

{

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

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

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

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

        }];

        

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

        [[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary *resultDic) {

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

            // 解析 auth code

            NSString *result = resultDic[@"result"];

            NSString *authCode =nil;

            if (result.length>0) {

                NSArray *resultArr = [resultcomponentsSeparatedByString:@"&"];

                for (NSString *subResultin resultArr) {

                    if (subResult.length >10 && [subResulthasPrefix:@"auth_code="]) {

                        authCode = [subResult substringFromIndex:10];

                        break;

                    }

                }

            }

            NSLog(@"授权结果 authCode = %@", authCode?:@"");

        }];

    }

    returnYES;

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值