python 支付宝 flask接入中异步通知的一些坑

python 用支付宝官方的接口,异步通知由于一些文档和示例都没有,特记录如下:

首先一个大坑:

1、notify_url 必须要以'/'号结尾,

 request_order = AlipayTradePagePayRequest(biz_model=model)
 request_order.notify_url = 'https://www.5y100.com/****/******/callback/'

原来我是填了callback,结果支付宝走不了这个通知,尝试了一番,加‘/’号终于走通

 

2、异步通知中,要进行sign验签的主要函数和几个步骤

官方的异步通知的sign验签是封装到一个类里的,我找来找去就是找不到那个类,但是找到了它封装的一个

verify_with_rsa

方法,所以,自行按步骤走了前面几个,下面的这个函数体可以通用:

 @classmethod
    def notify(cls,request):
        """
        支付宝内部支付完成后,异步通知到这个接口,返回支付宝状态,同步到数据库中
        """
        """处理不同得参数,必须返回success"""

        data = request.values.to_dict()
        # sign, sign_type 都要从数据中取出,否则签名通不过
        sign, sign_type = data.pop('sign'), data.pop('sign_type')
        #排序
        params = sorted(data.items(), key=lambda e: e[0], reverse=False)
        #拼接成字符串
        message = "&".join(u"{}={}".format(k, v) for k, v in params).encode()
        alipay_public_key = cls.alipay_client_config.alipay_public_key
        try:
            if verify_with_rsa(alipay_public_key.encode('utf-8').decode('utf-8'), message, sign):
                # 一定是success这个单词,其他的alipay不认
                return 'success'
            else:
                return 'failure'

        except:
            return 'failure'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值