美文网首页iOS面试知识点收集
ios记录一下自己集成支付宝移动支付的流程--

ios记录一下自己集成支付宝移动支付的流程--

作者: antns丶 | 来源:发表于2016-05-20 16:25 被阅读478次

    1.首先上支付宝移动支付官方文档地址

    网页如下图:


    支付宝集成图1.png

    下载SDK,并按照集成详细流程里面需要导入的依赖图导入相关依赖,别导入重复了!!

    2.然后在infoPlist里添加设置需要的URLSchemes:


    dfadfbaadbabadbd.png

    3.添加白名单和网络配置


    白名单 .png

    貌似现在不添加白名单也不打印警告信息了,去年还打印来着,不知道为什么,那位大神知道为什么请私信告诉我一下。。


    网络设置.png

    4.从公司拿到注册的企业支付宝账号,添加应用,和配置公钥,添加应用最好提前做了,因为要审核。
    上传公钥就需要生成RSA私钥及公钥,这块我也不知道为什么我用mac自带的openssl生成的秘钥给java后台他说通不过,,然后在windows系统上生成的就可以,我了个擦,也有可能是他处理得不对,那位大神知道为什么请私信告诉我一下。。
    秘钥生成流程支付宝官方文档地址

    mac生成流程:
    第一步用终端命令打开openssl 输入命令:openssl
    第二步生成私钥命令:genrsa -out rsa_private_key.pem 1024
    因为我们后台是java所以需要把私钥转成pkcs8格式 输入命令:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
    第三部生成公钥命令:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
    好了生成的文件和终端如下图:

    yaoshi.png
    终端.png
    找不到这两个文件,搜索名称可以,或者打开finder 按住 shift+command+g 然后输入~/ 再enter就找到了
    好了,然后把私钥给后台用于做签名使用。公钥我们拿来上传到公司的支付宝账号上,这两个文件在mac上是打不开的,复制一份把后缀名改成text就打开了。。。
    然后复制上传。。这里也是一个坑啊。我擦。
    支付宝上传RSA公钥文档地址

    然而这个网站目前不好使了,无论怎么复制都会提示你公钥格式错误。。去年其实我上传了一个公钥,但是现在要换了,就是换,点了修改,然后不做任何操作直接保存都是格式错误,好吧,,貌似说的都是废话,,,
    下面上有用的上传公钥地址

    或者你直接登录支付宝开放平台,点击右上角的 账户及密钥管理 进入到如下页面:


    圣诞节方法时发生的.png

    在合作伙伴秘钥这儿上传。主要上传的时候要主要格式,官方文档有所。。
    好了秘钥也上传好了,上代码了调支付了;
    在要用到支付宝支付的地方导入:#import <AlipaySDK/AlipaySDK.h>

    从后台那根据请求到调用支付需要的签名过的请求信息。调用代码就一句:
    这块当然你也可以像支付宝demo里一样在本地进行签名。。。看支付宝demo。。。
    <pre>
    NSLog(@"orderString == %@",orderString);
    // orderString 就是请求下来的签名过的请求信息
    // Scheme 就是之前添加的URL Schemes
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:@"jinyiqiaoAlipay" callback:^(NSDictionary *resultDic) {
    // 在这里处理支付的回调信息
    返回码官方文档说明地址

    }];
    </pre>

    在这里遇到过几个错误:
    1.交易订单处理失败,请稍后再试。(ALI59)
    这个错误上网查了下是请求信息的total_fee="0.01999998"参数不正确,金额参数支付宝单位是元,所以最小为两位小数total_fee=“0.01"
    2.交易订单处理失败,请稍后再试。(ALI64)
    支付官方文档解释地址
    按照说的4点一一检查发现还是参数问题。。
    官方文档的这个参数:

    sign="lBBK%2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfHXoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJIe2pbjm%2F3kb%2FuGkpG%2BwYQYI51%2BhA3YBbvZHVQBYveBqK%2Bh8mUyb7GM1HxWs9k4%3D” 进行了url编码,把特殊字符转成了%2F这种格式。。然而我们后台没给转,打印显示的是+号等。改成Url编码就好了。。

    appDelegate里的配置按照官方文档来就是了:
    官方文档配置支付宝客户端返回url处理方法。
    (外部存在支付包钱包,支付宝钱包将处理结果通过url返回。)
    如示例AliSDKDemo\APAppDelegate.m文件中,增加引用代码:
    <pre>

    import <AlipaySDK/AlipaySDK.h>

    </pre>
    在@implementation AppDelegate中增加如下代码:
    <pre>

    • (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"]){//支付宝钱包快登授权返回authCode

        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
            NSLog(@"result = %@",resultDic);
        }];
      

      }
      return YES;
      }
      </pre>

    到这里支付就成功了。。

    相关文章

      网友评论

        本文标题:ios记录一下自己集成支付宝移动支付的流程--

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