零、软件功用和我使用背景
线上app需要给用户发红包。日活三五百的app,考虑到日活十万已经极限了。
先前做过多种支付,都是复制代码参考修改,这个是自己从头起找各方拉资料做好的。特别记录下。
一、参考文献及我的评判
微信的接口,微信商户平台帮助文档当然是最重要的。
二、意外问题一览
一个小小的意外,业务方只给我一个普通管理员的权限,一开始不知道去哪里弄证书。想了好久用超级管理员登录进去果然有证书下载按钮。
三、基本流程命令
流程步骤如下:
a)对照文档,准备将提交的数据
b)产生签名
c)准备xml数据
d)设置https证书
e)https方式提交数据到红包地址
data = {
"mch_billno":self.mch_billno,
"mch_id":self.mch_id,
"wxappid":self.minfo.wxappid,
"send_name":self.minfo.send_name,
"re_openid":self.openid,
"total_amount":self.total_amount,
"total_num":self.total_num,
"wishing":self.wishing,
"client_ip":self.client_ip,
"act_name":self.act_name,
"remark":self.remark,
"scene_id":self.scene_id,
"nonce_str":self.nonce_str,
}
sign =self.gen_sign(data, minfo.key)
data['sign'] = sign
xml = dict_to_xml(data)
https = urllib3.PoolManager(cert_reqs='CERT_REQUIRED',
key_file=CERT_FILES[minfo.send_name]['key_file'],
cert_file=CERT_FILES[minfo.send_name]['cert_file'],
ca_cert_dir=CERT_FILES[minfo.send_name]['ca_cert_dir'],
ca_certs=certifi.where(),
scheme="https")
r = https.request('POST', URL_WX_REDPACK,body=xml.encode('utf-8'))
res = RedPackResult.create(self, r.data.decode('utf-8'))
代码放在github上