wechatpy.pay.api.redpack 源代码

# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import random
from datetime import datetime

from wechatpy.pay.utils import get_external_ip
from wechatpy.pay.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 = '{0}{1}{2}'.format( 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 = '{0}{1}{2}'.format( 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)