• 接入支付宝出现交易订单处理失败,请稍后再试(ALI64)的错误【转】


    接入第三方平台的时候,有时虽然按照文档来做,但是总是还会有各种各样的问题。

    上次在接入支付宝的时候就碰到了交易订单处理失败,请稍后再试(ALI64)这样的错误,后来经过排查和总结,一般来讲这种问题都是公钥和私钥没有正确配置造成的。支付宝这边为了保证数据在传输时不被篡改,使用了rsa这种非对称的加密方式。大概的流程如下:

    支付宝交互数据流程

    支付宝交互数据流程

    理解这种流程后,我们就需要上传给支付宝我们的公钥和下载下来支付宝的公钥。下面是一些遇到的问题

    公钥不是一行

    实际中的话,我们下载支付宝的公钥,可以看到公钥是一行的。常见的格式都有带BEGIN PUBLIC KEY、END PUBLIC KEY这样的字眼:

    -----BEGIN PUBLIC KEY——
     ......
     -----END PUBLIC KEY——

    这里需要把自己的公钥调整为一行,删除换行、头尾begin、end行。

    公钥没有传到支付宝服务器

    这个有时会忘记掉,因为支付宝要用我们的公钥解开我们传递到支付宝的数据,所以需要将我们自己的公钥上传到支付宝服务器,记的搞成一行。另外还有一个要注意的是,可以传公钥的地方都可以传一下。如下图合作伙伴密钥管理、开放平台密钥管理、无线产品密钥管理都需要传一下。我估计这三个是用在不同的业务上。

    上传公钥到支付宝

    上传公钥到支付宝

    私钥格式不对

    私钥的格式有多种,如:pem、pkcs、der等格式,不同的程序语言在处理上需要的格式不一样,php处理用openssl_get_privatekey需要pem格式,java可以处理pkcs格式。这方面稍微注意下。

    上面说到公钥和和私钥的问题,支付宝有提供一个工具可以用来检测,上次我们也是通过这个工具才检测出是私钥格式不对造成的。

    这里附上生成公钥,密钥的方式(或查看此处  http://www.cnblogs.com/dhsx/p/5324880.html

    用openssl工具生成:

    生成私钥pem

    $ openssl genrsa -out rsa_private_key.pem 1024
    

    此时会在当前目录生成rsa_private_key.pem文件,php私钥就是用这个文件。

    生成公钥

    $ openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
    

    此时会在当前目录生成rsa_public_key.pem文件,这个就是公钥文件,上传到淘宝的就是这个,注意去除掉换行、头和尾的begin和end。

    如果你需要使用pkcs8格式,可以按照如下生成:

    $ openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
    

    注意把输出的文件保存下来,就是pkcs8格式,淘宝提供java工具校验密钥和公钥是否配对,就是使用这个格式来进行检测。

    转子:http://www.01happy.com/alipay_error_ali64/

  • 相关阅读:
    前端开发-学习资料库
    前端数据校验从建模开始
    让 Markdown 中的代码可以实时运行
    小而美的 React Form 组件
    React 实现一个漂亮的 Table
    RSuite 一个基于 React.js 的 Web 组件库
    管理系统的前端解决方案:Pagurian V1.3发布
    selenium java 自动化测试 基于火狐浏览器/谷歌浏览器
    java从ldap中导出数据到ldif文件中
    根据官方文档搭建springcloud之eureka
  • 原文地址:https://www.cnblogs.com/dhsx/p/5465706.html
Copyright © 2020-2023  润新知