wechatpy.pay.api.redpack 源代码

# -*- 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)