126 lines
5.1 KiB
Python
126 lines
5.1 KiB
Python
# -*- 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,
|
||
nick_name=None, min_value=None,
|
||
max_value=None, out_trade_no=None, logo_imgurl=None):
|
||
"""
|
||
发送现金红包
|
||
|
||
:param user_id: 接收红包的用户在公众号下的 openid
|
||
:param total_amount: 红包金额,单位分
|
||
:param send_name: 商户名称
|
||
:param nick_name: 可选,提供方名称,默认和商户名称相同
|
||
:param act_name: 活动名称
|
||
:param wishing: 红包祝福语
|
||
:param remark: 备注
|
||
:param client_ip: 可选,调用接口的机器 IP 地址
|
||
:param total_num: 可选,红包发放总人数,默认为 1
|
||
:param min_value: 可选,最小红包金额,单位分
|
||
:param max_value: 可选,最大红包金额,单位分
|
||
:param out_trade_no: 可选,商户订单号,默认会自动生成
|
||
:param logo_imgurl: 可选,商户 Logo 的 URL
|
||
: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,
|
||
'nick_name': nick_name or send_name,
|
||
'send_name': send_name,
|
||
'act_name': act_name,
|
||
'wishing': wishing,
|
||
'remark': remark,
|
||
'client_ip': client_ip or get_external_ip(),
|
||
'total_num': total_num,
|
||
'min_value': min_value or total_amount,
|
||
'max_value': max_value or total_amount,
|
||
'mch_billno': out_trade_no,
|
||
'logo_imgurl': logo_imgurl,
|
||
}
|
||
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",
|
||
amt_list=None, out_trade_no=None,
|
||
logo_imgurl=None, watermark_imgurl=None,
|
||
banner_imgurl=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—全部随机,商户指定总金额和红包发放总人数,由微信支付随机计算出各红包金额
|
||
ALL_SPECIFIED—全部自定义
|
||
SEED_SPECIFIED—种子红包自定义,其他随机
|
||
:param amt_list: 可选,各红包具体金额,自定义金额时必须设置,单位分
|
||
:param out_trade_no: 可选,商户订单号,默认会自动生成
|
||
:param logo_imgurl: 可选,商户 Logo 的 URL
|
||
:param watermark_imgurl: 可选,背景水印图片 URL
|
||
:param banner_imgurl: 红包详情页面的 banner 图片 URL
|
||
: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,
|
||
'amt_list': amt_list,
|
||
'mch_billno': out_trade_no,
|
||
'logo_imgurl': logo_imgurl,
|
||
'watermark_imgurl': watermark_imgurl,
|
||
'banner_imgurl': banner_imgurl,
|
||
}
|
||
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)
|