微信小程序---微信退款API封装

# !/usr/bin/env python
# -*- coding:utf-8 -*-
"""
退款 
根据订单号进行退款(必须要证书才能用)
文档:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_4&index=4
"""
import uuid
import random
import hashlib
import requests
from xml.etree import ElementTree as ET


def md5(string):
    ha = hashlib.md5()
    ha.update(string.encode('utf-8'))
    return ha.hexdigest()


def refund(trade_no, out_refund_no, total_fee, refund_fee):
    """
    :param trade_no: 创建订单时,生成的订单号
    :param out_refund_no: 商户退款单号
    :param total_fee: 订单金额
    :param refund_fee: 退款金额
    :return:
    """

    info = {
        'appid': 'wx55cca0b94f723dc7',
        'mch_id': '1526049051',
        'out_trade_no': trade_no,
        'nonce_str': "".join([chr(random.randint(65, 90)) for _ in
                              range(12)]),
        'sign_type': "MD5",
        'out_refund_no': out_refund_no,
        'total_fee': total_fee,
        'refund_fee': refund_fee
    }
    key = "2SzCvaKgYExuItWBfYAqJFs72uUleD14"
    string = "&".join(["{0}={1}".format(k, info[k]) for k in sorted(info)] +
                      ["{0}={1}".format("key", key, ), ])
    info['sign'] = md5(string).upper()
    xml = "<xml>{0}</xml>".format("".join(["<{0}>{1}</{0}>".format(k, v) for
                                           k, v in info.items()]))
    # 双向证书
    key = "xx/xxx/client_key.pem"
    cert = "xxx/xxx/xx/client_cert.pem"
    
    res = requests.post(
        url='https://api.mch.weixin.qq.com/secapi/pay/refund',
        data=xml.encode('utf-8'),
        headers={
            'Accept-Language': 'zh-CN,zh;q=0.9'
        },
        cert=(cert, key),
        verify=True
    )
    root = ET.XML(res.content.decode('utf-8'))
    response = {child.tag: child.text for child in root}
    if response['return_code'] == 'SUCCESS':
        return True


if __name__ == '__main__':
    out_refund_no = md5(str(uuid.uuid4()))
    print(out_refund_no)
    refund('8ccdbbd652d9ad12b82cf2b021669cb9', out_refund_no, 0.1, 0.1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑台风走

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值