在Django项目中,我调用了支付宝的俩个接口
alipay.trade.page.pay # 同意收单下单并支付页面接口
alipay.trade.query # 同意收单线下交易查询接口
可我在测试的时候,alipay.trade.page.pay接口可以正常使用,可以跳转到支付页面,但alipay.trade.query页面就不行,会抛出个500,并显示这个异常:
然后我查看了抛出这个异常源代码:
这个异常是self._verify()函数返回False, 也就是签名不成功,那就是私钥跟密钥出了问题:
- 我的私钥跟密钥都是直接用linux中内嵌软件openssl直接生成的,而且我也将工钥上传到了支付宝的沙箱应用
但是我代码里用的公钥,不是复制沙箱应用里的支付宝公钥,而是还是用原来那个由opessl生成出来的公钥,问题就出现在这里
解决办法:
我们需要点击上面“查看支付宝公钥”, 复制支付宝公钥, 在用到支付功能模块下,创建一个alipay_public_key.pem文件,然后复制进入,在该公钥的首尾分别添加:
-----BEGIN PUBLIC KEY-----
# 这里放公钥
-----END PUBLIC KEY-----
另外,我尝试了一下如果公钥错误,不会跳转到支付页面,直接抛出500异常的