美文网首页
支付宝sdk使用

支付宝sdk使用

作者: ios开发_娟 | 来源:发表于2018-03-06 11:32 被阅读0次

    支付宝app调用

    1 支付宝调用遇到的问题:(私钥和公钥)

    公钥: 是交给你的服务端和支付宝开放平台上面的

    私钥: 是app启动支付宝支付的时候提交的钥匙,确保和支付宝平台上面的公钥是一对应

    生成:需要下载支付宝的SKD,然后打开进入目录openssl下面的bin文件夹里面然后打开终端 进入该目录下面,然后输入命令// 生成私钥 

    生成私钥:openssl genrsa -out privatekey.key 1024 (privately.key 是生成的文件,后缀是key)接着命令:openssl pkcs8 -topk8 -inform PEM -in privatekey.key -outform PEM -nocrypt(确定后在终端上面会有一大串字符,这个字符就是项目中运用的私钥)// 

    生成公钥 对应公钥:openssl rsa -in privatekey.key -pubout -out pubkey.key (这个pubkey.key文件就是公钥,如果不能打开,修改后缀为text,公钥还要交给服务端,服务端和支付宝还要进行订单状态的查询还有支付结果的通知)公钥和私钥的生成后就开始上代码1 在info.plist文件中 NSAppTransportSecurity选项下面只有一个bool参数 NSAllowsArbitraryLoads YES (这样子是为了ios9的https的请求方式)

    2 在项目中要倒入demo中的Alipay文件夹下面的内容(这个是你请求过程中需要的参数,里面的Order文件就是清单的详细内容,里面包含所有的订单内容,其中的订单号是调用服务端接口的返回值)

     下面是方法外加参数 

    // 密钥 NSString* privateKey = PRIVATEKEY;

     // 支付宝支付 Order* order = [[Order alloc]init]; 

     // 合作者id order.partner = PID;

     // 卖家账号 order.seller = @"piaojiaowang@163.com";

     // 订单号 order.tradeNO = @"4"; 

     // 产品名称 order.productName = @"票交网1"; 

     // 产品描述 order.productDescription = @"票据信息";

     // 产品价格 order.amount = [NSString stringWithFormat:@"0.1"]; 

     // 回调的url order.notifyURL = @"www.piaojiaowang.com.cn";

    // 支付的方式 order.service = @"mobile.securitypay.pay"; 

     // 支付类型。默认值为:1(商 品购买) order.paymentType = @"1"; 

     // 商户网站使用的编码格式,固 定为 utf-8 order.inputCharset = @"utf-8";

     // 未付款交 易的超时 时间 order.itBPay = @"30m"; // 应用注册scheme,在AlixPayDemo-Info.plist定义URL types NSString *appScheme = @"piaojiaowangAlipayDemo"; 

     //将商品信息拼接成字符串 NSString *orderSpec = [order description]; NSLog(@"orderSpec = %@",orderSpec);

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

            NSString *signedString = [signer signString:orderSpec];

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

            NSString *orderString = nil;

            if (signedString != nil) {

                orderString = [NSStringstringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",

                              orderSpec, signedString, @"RSA"];

                [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {

                //【callback 处理支付结果】

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

                    if ([[resultDic objectForKey:@"resultStatus"] intValue] == 9000) {

                        NSLog(@"支付完成");

                        hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];

                        hud.mode = MBProgressHUDModeText;

                        hud.labelText = @"支付完成";

                        [hud hide:YES afterDelay:2];

                    }else if ([[resultDic objectForKeyedSubscript:@"resultStatus"] intValue] == 4000){

                        NSLog(@"订单支付失败");

                        hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];

                        hud.mode = MBProgressHUDModeText;

                        hud.labelText = @"支付失败";

                        [hud hide:YES afterDelay:2];

                    }else{

                        NSLog(@"网络连接出错");

                        hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];

                        hud.mode = MBProgressHUDModeText;

                        hud.labelText = @"网络连接出错";

                        [hud hide:YES afterDelay:2];

                    }

                }];

            }

    3  APPDelegate

    // 支付宝支付

    -(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.host isEqualToString:@"platformapi"]) {

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

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

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

            }];

        }

        return [UMSocialSnsService handleOpenURL:url];

    }

    相关文章

      网友评论

          本文标题:支付宝sdk使用

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