支付宝sdk使用

支付宝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 = @"[email protected]";

 // 订单号 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使用)