由于微信支付分开发没有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