1-支付宝支付
目录
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版本的错误。
收款账号不存在或姓名有误,建议核实账号和姓名是否准确
我在给指定支付宝账号转账时遇到的。
这个问题我这边的原因是这样的,支付宝沙箱老版本的一切正常,但自从沙箱环境升级到了新版之后,再使用就有问题了。
{'alipay_fund_trans_uni_transfer_response': {'msg': 'Business Failed', 'code': '40004', 'sub_msg': '收款账号不存在或姓名有误,建议核实账号和姓名是否准确', 'sub_code': 'PAYEE_NOT_EXIST'}, 'sign': 'NrbLj9xDSPROlOy1be/FtPdd88dVgrmq3fNgnjCMD9PrZokx9X8xBhCKrCh0nIaYhRhu/ZX5mtp+ddKHWowYMawonEJMFWLcgR71ZHBzgG0+M6QxPG3EIaoQlfja0iFfzSIxn2I6utEu6yVjvvDEDjXjo2OdozAsscwbRnxyedRgx9SHqm9UClXiQzKD8OnspQmORWWJ+DF+RioXp7ZTLnDoExFNiyOvsJRlVnmbfyte7ussO8J0yj73O3qS+1tT+7Lpm95452sxWrQBU7YuQ1wCELceCns1gEzTWDAo0xDyJQ3a03DfUio40FeWlA25PxxfG8chHVuwpRt3J4KyGZW9y47L98TQ=='}
其原因我通过排查发现是构造参数时的问题,老版的沙箱给我们的沙箱账号是这样的:
注意观察用户名称是固定的沙箱环境,所以,我之前构造参数时,也是写死的。
但自从沙箱升级到新版之后,沙箱账号那里的用户名称不是原来的了,而是如下图。
而我的代码中没有同步更改,所以报错了,那解决办法也就有了,就是改成跟沙箱账号中一样就行了。
然后就不报错了。