• Django支付宝支付 int() argument must be a string, a bytes-like object or a number, not 'Sequence'错误


     自写网站,第一次接触支付,准备对接最容易的支付宝。网上django使用支付宝支付的文章也很多,基本都和支付宝官方SDK中的使用示例差不多。于是按照这个套路,复制代码(执行之前,请先去支付宝开放平台申请应用、配置开发参数、提交审核),跑一下试试。

           毫无意外,错误产生了:

    alipay.aop.api.exception.Exception.RequestException: [516aa23a-cdfd-11e9-a62d-441ca8249e46]request sign failed. int() argument must be a string, a bytes-like object or a number, not 'Sequence'

          把错误信息复制,网上搜索,关于int() argument must be a string, a bytes-like object or a number, not 'Sequence'的错误不少,但就是没有和支付宝支付挂钩的。仔细看错误提示,发现错误是支付宝SDK中这行代码signature = rsa.sign(sign_content, rsa.PrivateKey.load_pkcs1(private_key, format='PEM'), 'SHA-256')抛出的,难道SDK有问题?

          不可能!很显然(实际上花了不少时间,我误以为是密钥不匹配,各种更换秘钥,错误依旧),密钥格式有问题,程序无法解析传入的私钥,认为这个参数格式不正确。我的密钥是用支付宝开放平台RSA签名验签工具生成的,官方的工具怎么会出问题呢?

          经过无尽的折磨,终于弄明白问题出在哪里了:

          也就是说,问题出在私钥的格式上,Python无法识别PKCS8格式的私钥,如果你的私钥是“点击获取(CSR)”来的,那么必须转换格式为PKCS1。

          千万不要误以为你上面勾选了“PKCS1”,再点击“点击获取(CSR)”,得到的就是PKCS1格式的密钥,因为我原本就是这么以为的,然后浪费了一天的时间。PS:公钥不需要转换格式,因为PKCS1、PKCS8的密钥是可以匹配成功的。

  • 相关阅读:
    windows运行shell脚本
    Android Webview H5资源本地化
    Vscode开发Python环境安装
    Vscode开发Java环境搭建
    为什么索引可以提高效率?
    Java内存模型
    栈和队列----向有序的环形单链表中插入新节点
    栈和队列----单链表的选择排序
    栈和队列----将搜索二叉树转换成双向链表
    栈和队列----在单链表中删除指定值的节点
  • 原文地址:https://www.cnblogs.com/liuye1990/p/13386624.html
Copyright © 2020-2023  润新知