本文是【浅析微信支付】系列文章的第十三篇,主要讲解在如何开通商户平台的红包功能和为用户发放红包,以及查询发送红包记录。
浅析微信支付系列已经更新十三篇了哟~,没有看过的朋友们可以看一下哦。
下面开始来干货,贴出源码吧,应用代码:
/** * 发送现金红包 * * @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; }
