支付宝支付
目录
usage
控制台:https://open.alipay.com/develop/manage
获取APPID:
https://open.alipay.com/develop/sandbox/app
pip install pycryptodome
pip install pycryptodome==3.16.0
常见报错
alipay.exceptions.AliPayException: AliPayException: code:40002, message:{"alipay_trade_query_response":{"code":"40002","msg":"Invalid Arguments","sub_code":"isv.invalid-app-id","sub_msg":"无效的AppID参数"}}
我的报错环境是这样的:
python3.10 + 支付宝沙箱环境
哦,还有就是沙箱网管接口升级为新的之后:
# 原来的老网关地址
https://openapi.alipaydev.com/gateway.do
# 新的网关地址
https://openapi-sandbox.dl.alipaydev.com/gateway.do
asgiref==3.7.2
cffi==1.15.1
cryptography==41.0.1
Django==3.2
djangorestframework==3.14.0
pycparser==2.21
pycryptodomex==3.18.0
pyOpenSSL==23.2.0
python-alipay-sdk==3.2.0
pytz==2023.3
sqlparse==0.4.4
typing_extensions==4.6.3
在支付成功之后,验签也没问题,到了同步查询支付结果的时候,也就是下面这段代码报错了:
class MyAliPaySdk(AliPay):
def query(self, order_number):
"""
根据订单号,主动查询支付结果
"""
return self.server_api( # 这行代码引起的内部源码错误
api_name="alipay.trade.query",
biz_content={
"out_trade_no": order_number
}
)
首先排查了代码和支付宝相关的配置,都正确无误,最终发现是支付宝的sdk的版本错误。
# 原来用的3.2.0的版本,一直报错
python-alipay-sdk==3.2.0
pip uninstall python-alipay-sdk -y
# 后来卸载重装了3.3.0之后,一行代码没改,就行了.......
python-alipay-sdk==3.3.0
pip install python-alipay-sdk==3.3.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 注意,我处理在这个bug的时候,我原来安装用的是豆瓣源,单安装的sdk版本是默认是3.2.0,可见豆瓣源的sdk默认最高版本就是3.2.0,所以,这里重新安装的时候,就不要指定豆瓣源了,换个清华源
所以,最终排出来的是sdk版本的错误。