使用python3的Django框架开发微信支付分整体流程和AEAD_AES_256_GCM回调验签、HMAC-SHA256加密以及微信文档的各种坑

本文详细记录了使用Python3的Django框架开发微信支付分的全过程,包括创建订单、接收回调、AEAD_AES_256_GCM验签和HMAC-SHA256加密。文中指出微信文档存在的问题,如租金规则参数错误、回调数据格式不明确等,并分享了解决这些问题的经验。
摘要由CSDN通过智能技术生成

由于微信支付分开发没有python3版本的示例,整个网络找AEAD_AES_256_GCM验签python版本都找不到几个案例,所以有必要根据流程记录一下本次开发遇到的一些坑

1.首先是创建免押租借订单,因为对json相对熟悉一点,将所有参数写成json格式,然后封装成方法,供视图调用

def createrentbill(out_order_no, rent_unit_fee):
    UNIFIED_ORDER_URL = 'https://api.mch.weixin.qq.com/wxv/createrentbill'
    nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 32))
    order_info = {
        'version': '1.0',   # 版本号
        'appid': WEIXIN_APP_ID,  #  公众账号ID
        'mch_id': WEIXIN_MCHID,  # 商户ID
        'nonce_str': nonce_str,  # 随机字符串
        'sign_type': 'HMAC-SHA256',  
        'out_order_no': out_order_no,  # 传入的商户平台订单号,也就是自己系统生成的订单号
        'service_id': WEIXIN_SERVICE_ID,  # 在接入支付分的时候,微信方会提供这个service_id,
        'goods_name': '雨伞一个',  # 商品名称
        'deposit_amount': 5000,  # 押金总额,单位/分
        'rent_unit': 'FEN_1_HOUR',  # 计费方式: 小时/分
        'rent_unit_fee': rent_unit_fee  #传入的单价  
    }
    order_info['sign'] = hmac_sha256(order_info)
    data = xmltodict.unparse({'xml': order_info}, pretty=True, full_document=False).encode('utf-8')
    headers = {'Content-Type': 'application/xml'}
    weixinapiclient_cert = WX_CERT_PATH  # 需要传入证书和密钥
    weixinapiclient_key = WX_KEY_PATH  # 需要传入证书和密钥
    response = requests.post(UNIFIED_ORDER_URL, data=data, headers=headers,
                             cert=(weixinapiclient_cert, weixinapiclient_key), verify=True)
    msg = response.text
    xmlmsg = xmltodict.parse(msg)  # 将xml转成字典
    if xmlmsg['xml']['return_code'] == 'SUCCESS':
        if xmlmsg['xml']['result_code'] == 'SUCCESS':
            order_id = xmlmsg['xml']['order_id']  # 微信支付服务订单号
            package = xmlmsg['xml']['package']  # 跳转微信侧小程序订单数据
            info = {
                'mch_id': WEIXIN_MCHID,
                'package': package,
                'timestamp': str(int(time.time())),  # 时间戳为string类型
                'nonce_str': nonce_str,
                'sign_type': 'HMAC-SHA256',
            }
            info['sign'] = hmac_sha256(info)
            return info,order_id   # 返回给微信小程序端的数据,根据自己的业务需要返回
        ret
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值