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=='}

其原因我通过排查发现是构造参数时的问题,老版的沙箱给我们的沙箱账号是这样的:

注意观察用户名称是固定的沙箱环境,所以,我之前构造参数时,也是写死的。

但自从沙箱升级到新版之后,沙箱账号那里的用户名称不是原来的了,而是如下图。

而我的代码中没有同步更改,所以报错了,那解决办法也就有了,就是改成跟沙箱账号中一样就行了。

然后就不报错了。

posted @ 2023-02-20 14:37  听雨危楼  阅读(119)  评论(0编辑  收藏  举报