swift3集成支付宝支付

作者: revon | 来源:发表于2017-07-25 18:54 被阅读1310次

项目中用到了支付宝支付,记录一下集成过程
1、登录支付宝开放平台,完成签约,完成签约才可以创建应用
2、创建应用

创建应用.jpeg

我这个是app支付,就选择了支付应用,可以根据自己的需要,选择相应的类型,名称,一般写程序的名称就行
申请完成,会有这个图

WechatIMG54.jpeg

注意状态, 是在审核还是上线,上线就可以直接调用接口调试,如果是在审核中,想要测试,就用里边的沙盒测试。
点击图中的查看

WechatIMG55.jpeg

根据需要,签约相应功能,状态显示为已生效就可以使用了
下一步就是进入应用概述,进行环境配置了

WechatIMG56.jpeg

支付宝网关不用设置,应用网关就是支付宝验证消息是不是你的商户发出的请求,授权回调地址,就是你支付的结果,支付宝会给这个地址发送一个post请求,返回支付的结果等很多信息,后台会给你一个地址,方便以后对账等操作。
接下来就是加签方式的设置了(这里,我是放在我这里处理,更好的方式是放在服务器生成,你直接用后台给你公钥上传就行),我是用的支付宝给的密钥生成工具,下载运行,会是这样的

WechatIMG57.jpeg

根据你们后台使用的开发语言,进行相应的选择,运行之后,会得到一个应用公钥,一个应用私钥

WechatIMG56.jpeg

点击设置应用公钥,上传你生成的公钥,成功之后,会有一个支付宝公钥,这个是支付宝直接生成的,不用管
然后,验证公钥,我是下载的支付宝提供的工具进行验证,打开验证工具,是这样的

WechatIMG58.jpeg

如果你生成签名的时候,选择的是java适用,那就可以直接把私钥放进去,点击生成签名,如果不是,你可以打开你生成签名的那个工具,有一个格式转换

WechatIMG59.jpeg

然后进行上一步的验证,将生成的sign直接放入支付宝开放平台的那个验证框里就可以验证了。
再验证一下你的公钥私钥是不是匹配的,打开签名生成工具

WechatIMG60.jpeg

导入公钥私钥,如果匹配成功,那就说明,签名是正确的配置
接下来就是按照开发文档导入SDK(没找到pod方式安装,只能手动导入了),具体的可以看这个

WechatIMG61.jpeg

其实对于我们客户端来说,很简单,只需要调用这一个接口就行

AlipaySDK.defaultService().payOrder(sign, fromScheme: "ZhiFuBao") { (result) in
                    print("支付宝支付结果\(String(describing: result))")
                }

前提是,后台已经帮我们把sign生成了,如果后台不帮我们生成,那就需要我们自己生成,可以看支付宝的demo

//重要说明
    //这里只是为了方便直接向商户展示支付宝的整个支付流程;所以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 = @"";
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
    
    //partner和seller获取失败,提示
    if ([appID length] == 0 ||
        ([rsa2PrivateKey length] == 0 && [rsaPrivateKey length] == 0))
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
                                                        message:@"缺少appId或者私钥。"
                                                       delegate:self
                                              cancelButtonTitle:@"确定"
                                              otherButtonTitles:nil];
        [alert show];
        return;
    }
    
    /*
     *生成订单信息及签名
     */
    //将商品信息赋予AlixPayOrder的成员变量
    Order* order = [Order new];
    
    // NOTE: app_id设置
    order.app_id = appID;
    
    // NOTE: 支付接口名称
    order.method = @"alipay.trade.app.pay";
    
    // NOTE: 参数编码格式
    order.charset = @"utf-8";
    
    // NOTE: 当前时间点
    NSDateFormatter* formatter = [NSDateFormatter new];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    order.timestamp = [formatter stringFromDate:[NSDate date]];
    
    // NOTE: 支付版本
    order.version = @"1.0";
    
    // NOTE: sign_type 根据商户设置的私钥来决定
    order.sign_type = (rsa2PrivateKey.length > 1)?@"RSA2":@"RSA";
    
    // NOTE: 商品数据
    order.biz_content = [BizContent new];
    order.biz_content.body = @"我是测试数据";
    order.biz_content.subject = @"1";
    order.biz_content.out_trade_no = [self generateTradeNO]; //订单ID(由商家自行制定)
    order.biz_content.timeout_express = @"30m"; //超时时间设置
    order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01]; //商品价格
    
    //将商品信息拼接成字符串
    NSString *orderInfo = [order orderInfoEncoded:NO];
    NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
    NSLog(@"orderSpec = %@",orderInfo);
    
    // NOTE: 获取私钥并将商户信息签名,外部商户的加签过程请务必放在服务端,防止公私钥数据泄露;
    //       需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
    NSString *signedString = nil;
    RSADataSigner* signer = [[RSADataSigner alloc] initWithPrivateKey:((rsa2PrivateKey.length > 1)?rsa2PrivateKey:rsaPrivateKey)];
    if ((rsa2PrivateKey.length > 1)) {
        signedString = [signer signString:orderInfo withRSA2:YES];
    } else {
       signedString = [signer signString:orderInfo withRSA2:NO];
    }
    
    // NOTE: 如果加签成功,则继续执行支付
    if (signedString != nil) {
        //应用注册scheme,在AliSDKDemo-Info.plist定义URL types
        NSString *appScheme = @"alisdkdemo";
        
        // NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式
        NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",
                                 orderInfoEncoded, signedString];
        
        // NOTE: 调用支付结果开始支付
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
        }];
    }

这里,私钥是我们自己保存的,如果后台签名,在“获取私钥并将商户信息签名”这一步,要使用自己生成的私钥给后台,如果后台严格按照开发文档执行签名,这里就可以测试了,如果有错误,在调起支付宝的界面,会有错误代码,根据错误代码,来修改相应内容,
支付结果的回调就在这个里边

AlipaySDK.defaultService().payOrder(sign, fromScheme: "ZhiFuBao") { (result) in
                   //支付结果回调
                }

根据不同结果,进行不同处理,至此,就可以完整的集成支付宝支付。

相关文章

  • iOS Alipay -支付宝

    iOS 集成Alipay -支付宝支付 集成 AliPay - 支付宝

  • 支付宝支付流程(I)

    参考资料:支付宝支付集成支付宝支付集成实现蚂蚁金服iOS支付集成

  • iOS支付宝功能集成

    iOS快速集成支付宝详解/支付宝集成获取私钥与公钥 在集成支付宝功能前,我们必须了解下什么支付宝流程,下图是支付宝...

  • ## [iOS 支付宝支付]

    [iOS开发系列-支付宝支付] 概述 开发中支付通常都会集成支付宝支付,下面讲解支付宝的整体流程。 集成支付宝支付...

  • Android:支付宝支付封装

    集成支付宝APP支付 直接按照官方文档逐步集成官方文档:支付宝APP支付官方文档 Android客户端封装支付宝支...

  • 支付宝 ’openssl/asn1.h' file no

    起因 项目需要集成支付宝,下载了支付宝demo(地址点击这里)然后开启搬砖。按照支付宝的集成说明开始集成。文档地址...

  • 支付宝支付

    支付宝集成的介绍 第三方支付平台,支付宝是用户将钱付款给支付宝,之后支付宝将钱转入我们自己的账户。 集成支付宝的步...

  • iOS APP集成微信支付&&支付宝支付

    相对来讲不是很难,两个sdk集成都只需要四个步骤就搞定了! 一、集成支付宝支付 支付宝支付集成官方教程支付宝官方D...

  • ios支付宝签名

    支付宝: iOS 支付功能概述 - 简书 1.iOS集成支付宝 - 简书 2.iOS 集成支付宝 - 简书 3.i...

  • iOS 支付宝集成流程

    iOS 集成支付宝支付 SDK下载 集成支付宝首先是去官网下载SDK https://doc.open.alipa...

网友评论

  • 102161005715:非常感谢
  • 三少爷_贱:问个问题:swift调用微信支付,在支付完成之后,点击返回商家,在点击返回商家之后,我发现,他不是直接返回到我的应用中,而是重新启动了一次我的应用,这是为啥????
    revon:返回你的应用,就是重新启动了一下应用啊,如果你app没有杀死,就是回到你支付时候的界面

本文标题:swift3集成支付宝支付

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