支付宝支付

 

 

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版本的错误。

posted @ 2023-12-22 00:16  silencio。  阅读(29)  评论(0)    收藏  举报