微信支付退款回调踩坑及解决方案(附解密代码)

1. 回调失败问题(沙箱环境)

问题始末: 最近再弄微信退款回调发现设置的回调的url根本就没有被调用,但是微信支付的回调是成功的.
于是开始做各种尝试 1. 代码没问题 2. 防火墙并没有限制微信IP的访问
网上有的说微信退款回调被取消了,这真的是误人子弟...
微信的官方以及公众号都写得是沙箱环境的退款是可以用的,但是都没说在沙箱环境下退款回调的url不起作用,毕竟沙箱环境下支付成功的回调是成功的
再此真的想吐槽下微信官方,希望能把这个说明加到官方文档上,省的好多童鞋做无用功

2. 解决方案

将微信支付切换到生产环境,支付成功一笔再退款就会发现退款的回调已经成功执行了

3. 退款回调的解密代码

在此放上微信回调的解密代码(python版),防止在生产环境下的key还没申请下来的童鞋的调试
微信退款回调的内容都是放在body中的, 我们假设现在已经获取到了body中的内容

def md5_trans(decode_str):
    """md5加密"""
    return hashlib.md5(decode_str.encode("utf-8")).hexdigest()


def aes_ecb_pkcs7(body, key):
    """AES-ECB模式解密PKCS7Padding"""
    unpad = lambda s: s[:-ord(s[len(s) - 1:])]
    cipher = AES.new(key, AES.MODE_ECB)
    return unpad(cipher.decrypt(body)).decode('utf8')


def base64_decode(body):
    """base64解码"""
    return base64.b64decode(body)


def decode_refund_response(body, key):
	    """微信服务器通知退款通知结果的时候使用,解密加密字符串"""
	    # 一: 进行base64解码
	    body = base64_decode(body)
	    # 二: key做md5,得到32位小写key*
	    key = md5_trans(key)
	    # 三: key*对加密串B做AES-256-ECB解密(PKCS7Padding)
	    info = aes_ecb_pkcs7(body, key)
	    return info
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值