Files
test/sg_wechat_enterprise/we_api/pay/api/redpack.py
2024-07-10 15:58:47 +08:00

126 lines
5.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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