123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- # -*- coding: utf-8 -*-
- from __future__ import absolute_import, unicode_literals
- import random
- import datetime
- from library.wechatpy.pay.utils import get_external_ip
- from library.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.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.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)
|