# -*- coding: utf-8 -*-
import random
from datetime import datetime
from wechatpy.pay.utils import get_external_ip
from wechatpy.pay.api.base import BaseWeChatPayAPI
[文档]class WeChatRedpack(BaseWeChatPayAPI):
[文档] def send(
self,
user_id,
total_amount,
send_name,
act_name,
wishing,
remark,
total_num=1,
client_ip=None,
out_trade_no=None,
scene_id=None,
consume_mch_id=None,
):
"""
发送现金红包
:param user_id: 接收红包的用户在公众号下的 openid
:param total_amount: 红包金额,单位分
:param send_name: 商户名称
:param act_name: 活动名称
:param wishing: 红包祝福语
:param remark: 备注
:param client_ip: 可选,调用接口的机器 IP 地址
:param total_num: 可选,红包发放总人数,默认为 1
:param out_trade_no: 可选,商户订单号,默认会自动生成
:param scene_id: 可选,发放红包使用场景,红包金额大于200时必传
:param consume_mch_id: 可选,资金授权商户号。服务商替特约商户发放时使用
:return: 返回的结果数据字典
"""
if not out_trade_no:
now = datetime.now()
out_trade_no = f"{self.mch_id}{now.strftime('%Y%m%d%H%M%S')}{random.randint(1000, 10000)}"
data = {
"wxappid": self.appid,
"re_openid": user_id,
"total_amount": total_amount,
"send_name": send_name,
"act_name": act_name,
"wishing": wishing,
"remark": remark,
"client_ip": client_ip or get_external_ip(),
"total_num": total_num,
"mch_billno": out_trade_no,
"scene_id": scene_id,
"risk_info": None,
"consume_mch_id": consume_mch_id,
}
return self._post("mmpaymkttransfers/sendredpack", data=data)
[文档] def send_group(
self,
user_id,
total_amount,
send_name,
act_name,
wishing,
remark,
total_num,
client_ip=None,
amt_type="ALL_RAND",
out_trade_no=None,
scene_id=None,
consume_mch_id=None,
):
"""
发送裂变红包
:param user_id: 接收红包的用户在公众号下的 openid
:param total_amount: 红包金额,单位分
:param send_name: 商户名称
:param act_name: 活动名称
:param wishing: 红包祝福语
:param remark: 备注
:param total_num: 红包发放总人数
:param client_ip: 可选,调用接口的机器 IP 地址
:param amt_type: 可选,红包金额设置方式
ALL_RAND—全部随机,商户指定总金额和红包发放总人数,由微信支付随机计算出各红包金额
:param out_trade_no: 可选,商户订单号,默认会自动生成
:param scene_id: 可选,发放红包使用场景,红包金额大于200时必传
:param consume_mch_id: 可选,资金授权商户号。服务商替特约商户发放时使用
:return: 返回的结果数据字典
"""
if not out_trade_no:
now = datetime.now()
out_trade_no = f"{self._client.mch_id}{now.strftime('%Y%m%d%H%M%S')}{random.randint(1000, 10000)}"
data = {
"wxappid": self.appid,
"re_openid": user_id,
"total_amount": total_amount,
"send_name": send_name,
"act_name": act_name,
"wishing": wishing,
"remark": remark,
"total_num": total_num,
"client_ip": client_ip or get_external_ip(),
"amt_type": amt_type,
"mch_billno": out_trade_no,
"scene_id": scene_id,
"risk_info": None,
"consume_mch_id": consume_mch_id,
}
return self._post("mmpaymkttransfers/sendgroupredpack", data=data)
[文档] def query(self, out_trade_no, bill_type="MCHT"):
"""
查询红包发放记录
:param out_trade_no: 商户订单号
:param bill_type: 可选,订单类型,目前固定为 MCHT
:return: 返回的红包发放记录信息
"""
data = {
"mch_billno": out_trade_no,
"bill_type": bill_type,
"appid": self.appid,
}
return self._post("mmpaymkttransfers/gethbinfo", data=data)