浅析微信支付:商户平台开通现金红包、指定用户发放、红包记录查询 (2)

最需要注意的是,调用接口时,发放红包使用场景一定要慎重选择,查看一下每种场景对应的限制,比如在红包金额大于200或者小于1元时必传场景参数,这时就需要我们配置阀值。

发放方式(接口发放)

方式一:接口发放
商户根据开发文档进行开发,一次调用可以给一个指定用户发送一个指定金额的红包,满足多元化的运营需求。

方式二:通过上传openid文件发放
收集要发送红包对象的openid,将openid编辑成txt文件,登录微信支付商户平台,使用上传文件功能发放。一份文件对应一个红包模板,便于管理。

方式三:配置营销规则“满额送”发放
商户可以在商户平台配置自助规则:用户使用微信支付发生交易满足一定条件,立送现金红包

本文主要讲通过接口发放的方式。

接口链接 https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack 是否需要证书

调用接口

官方文档地址:

https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3

首先是发放规则:

发送频率限制------默认1800/min

发送个数上限------按照默认1800/min算

金额限制------默认红包金额为1-200元,如有需要,可前往商户平台进行设置和申请

其他其他限制吗?------单个用户可领取红包上线为10个/天,如有需要,可前往商户平台进行设置和申请

如果量上满足不了我们的需求,如何提高各个上限?------金额上限和用户当天领取次数上限可以在商户平台进行设置

注意1-红包金额大于200或者小于1元时,请求参数scene_id必传。
注意2-根据监管要求,新申请商户号使用现金红包需要满足两个条件:1、入驻时间超过90天 2、连续正常交易30天。
注意3-移动应用的appid无法使用红包接口。

PS:上面是官方介绍,不难理解,划重点!!!(注意3的含义,就是只能使用公众号的openid,小程序的openid不可用。)

消息触达规则参考官方文档:

消息触达规则

下面开始来干货,贴出源码吧,应用代码:

/** * 发送现金红包 * * @author yclimb * @date 2018/9/18 */ private void sendRedPack() throws Exception { WXPay wxPay = new WXPay(AsydWXPayConfigImpl.getInstance()); Map<String, String> resultMap = wxPay.sendRedPack(WXPayUtil.getPayNo(), "obX_c0YRpT47zKcvq-ZYpjU6GFuA", "1", "活动名称", "红包祝福语", "备注", "127.0.0.1"); System.out.println("wxPay.sendRedPack:" + resultMap); }

调用发送现金红包接口:

/** * 作用:企业向指定微信用户的openid发放指定金额红包<br> * 场景:商户可以通过本平台向微信支付用户发放现金红包。用户领取红包后,资金到达用户微信支付零钱账户,和零钱包的其他资金有一样的使用出口;若用户未领取,资金将会在24小时后退回商户的微信支付账户中。 * 接口文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3 * * @param mch_billno 商户订单号 * @param openid 用户openid * @param amount 企业付款金额 * @param act_name 活动名称 * @param wishing 红包祝福语 * @param remark 备注 * @param spbill_create_ip 该IP可传用户端或者服务端的IP * @return API返回数据 * @throws Exception e */ public Map<String, String> sendRedPack(String mch_billno, String openid, String amount, String act_name, String wishing, String remark, String spbill_create_ip) throws Exception { /** 构造请求参数数据 **/ Map<String, String> data = new HashMap<>(); // 商户订单号 mch_billno 是 10000098201411111234567890 String(28) 商户订单号(每个订单号必须唯一。取值范围:0~9,a~z,A~Z)接口根据商户订单号支持重入,如出现超时可再调用。 data.put("mch_billno", mch_billno); // 商户名称 send_name 是 天虹百货 String(32) 红包发送者名称 data.put("send_name", "悦店"); // 用户openid re_openid 是 oxTWIuGaIt6gTKsQRLau2M0yL16E String(32) 接受红包的用户openid openid为用户在wxappid下的唯一标识(获取openid参见微信公众平台开发者文档:网页授权获取用户基本信息) data.put("re_openid", openid); // 付款金额 total_amount 是 1000 int 付款金额,单位分 data.put("total_amount", String.valueOf(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).intValue())); // 红包发放总人数 total_num 是 1 int 红包发放总人数 total_num=1 data.put("total_num", "1"); // 红包祝福语 wishing 是 感谢您参加猜灯谜活动,祝您元宵节快乐! String(128) 红包祝福语 data.put("wishing", wishing); // Ip地址 client_ip 是 192.168.0.1 String(15) 调用接口的机器Ip地址 data.put("client_ip", spbill_create_ip); // 活动名称 act_name 是 猜灯谜抢红包活动 String(32) 活动名称 data.put("act_name", act_name); // 备注 remark 是 猜越多得越多,快来抢! String(256) 备注信息 data.put("remark", remark); /** 以下参数为非必填参数 **/ /* * 场景id:scene_id 否 PRODUCT_8 String(32) 发放红包使用场景,红包金额大于200或者小于1元时必传 * PRODUCT_1:商品促销 * PRODUCT_2:抽奖 * PRODUCT_3:虚拟物品兑奖 * PRODUCT_4:企业内部福利 * PRODUCT_5:渠道分润 * PRODUCT_6:保险回馈 * PRODUCT_7:彩票派奖 * PRODUCT_8:税务刮奖 */ //data.put("scene_id", "PRODUCT_1"); /* * 活动信息 risk_info 否 posttime%3d123123412%26clientversion%3d234134%26mobile%3d122344545%26deviceid%3dIOS String(128) * posttime:用户操作的时间戳 * mobile:业务系统账号的手机号,国家代码-手机号。不需要+号 * deviceid :mac 地址或者设备唯一标识 * clientversion :用户操作的客户端版本 把值为非空的信息用key=value进行拼接,再进行urlencode urlencode(posttime=xx& mobile =xx&deviceid=xx) */ // 资金授权商户号 consume_mch_id 否 1222000096 String(32) 资金授权商户号 服务商替特约商户发放时使用 /** 以下四个参数,在 this.redPackRequestData 方法中会自动赋值 **/ // 商户号 mch_id 是 10000098 String(32) 微信支付分配的商户号 // 随机字符串 nonce_str 是 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位 // 签名 sign 是 C380BEC2BFD727A4B6845133519F3AD6 String(32) 详见签名生成算法 // 公众账号appid wxappid 是 wx8888888888888888 String(32) 微信分配的公众账号ID(企业号corpid即为此appId)。在微信开放平台(open.weixin.qq.com)申请的移动应用appid无法使用该接口。 // 微信调用接口 Map<String, String> resultMap = this.sendRedPack(data); WXPayUtil.getLogger().info("wxPay.sendRedPack:" + resultMap); return resultMap; }

以上为接口调用代码,对于接口调用的入参和出参,小伙伴看看官网文档哦,接口中的注释给大家一个参考。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxwfz.html