本文是【浅析微信支付】系列文章的第十四篇,主要讲解在如何开通商户平台的代金券或立减优惠功能,商家向指定用户发送代金券,查询发送记录,代金券信息等。
浅析微信支付系列已经更新十四篇了哟~,没有看过的朋友们可以看一下哦。
操作代金券开通和如何手动创建的官方文档如下:
https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_7&index=3这里说一下重点需要注意的地方,首先,代金券分为单品券和全场券,简单理解:
- 单品券:指定某几个商品ID的商品可以使用的代金券
- 全场券:所有商品都可以使用的代金券
PS:通过高级接口发放的代金券不能插入卡包,并且用户是没有感知的,这是一个缺点,大家一定要记住。
微信支付的代金券核销时都是在微信的确认支付窗口,如果有多个代金券,可以选择或者合并代金券支付,支付后在支付通知中会显示记录代金券使用的记录。
还需要注意一点,单品代金券核销时需要验证商品ID,这个商品ID在预支付单中单品优惠活动detail字段传入,json格式必填参数,字段中goods_id就是我们在商户后台创建代金券时填入的商品ID,具体的代码可以看我的统一下单接口文章和GitHub源码。
show me the code:
/**  * [单品优惠券] - 根据订单VO拼接统一下单需要的 detail 参数,此参数用于[单品优惠券]时自动抵扣 <br>  * 统一下单API(支持单品优惠参数) - 享受了单品优惠的订单不支持部分退款,对账单与普通支付保持一致 <br>  * 接口地址:https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_102&index=2  * @param orderList 订单list  * @return 微信支付统一下单 detail 参数  *  * @author yclimb  * @date 2018/9/14  */ public JSONObject setWxPayUnifiedOrderDetail(List<Order> orderList) {     if (orderList == null || orderList.isEmpty()) {         return null;     }     // 单品优惠活动detail字段列表说明:     JSONObject detail = new JSONObject();     /* 订单原价 cost_price  否   int 608800        1.商户侧一张小票订单可能被分多次支付,订单原价用于记录整张小票的交易金额。        2.当订单原价与支付金额不相等,则不享受优惠。        3.该字段主要用于防止同一张小票分多次支付,以享受多次优惠的情况,正常支付订单不必上传此参数。*/     // detail.put("cost_price", createTradeVo.getTrade().getTotalPayMoney());     // 商品小票ID   receipt_id  否   String(32)  wx123   商家小票ID     // detail.put("receipt_id", "");      // 单品优惠活动goods_detail字段说明:     JSONArray goodsDetailList = new JSONArray();      for (Order order : orderList) {         JSONObject goodsDetail = new JSONObject();         // 商品编码 goods_id    是   String(32)  商品编码    由半角的大小写字母、数字、中划线、下划线中的一种或几种组成         goodsDetail.put("goods_id", order.getProductId());         // 微信侧商品编码  wxpay_goods_id  否   String(32)  1001    微信支付定义的统一商品编号(没有可不传)         // goodsDetail.put("wxpay_goods_id", "");         // 商品名称 goods_name  否   String(256) iPhone6s 16G    商品的实际名称         goodsDetail.put("goods_name", order.getProductName());         // 商品数量 quantity    是   int 1   用户购买的数量         goodsDetail.put("quantity", order.getItemNum());         // 商品单价 price   是   int 528800  单位为:分。如果商户有优惠,需传输商户优惠后的单价(例如:用户对一笔100元的订单使用了商场发的纸质优惠券100-50,则活动商品的单价应为原单价-50)         goodsDetail.put("price", NumberUtil.mul(order.getPayMoney(), 100));          // 加入单品优惠集合         goodsDetailList.add(goodsDetail);     }      // 单品列表 goods_detail    是   String  示例见下文   单品信息,使用Json数组格式提交     detail.put("goods_detail", goodsDetailList);      return detail; }发放代金券接口链接
https://api.mch.weixin.qq.com/mmpaymkttransfers/send_coupon是否需要证书
请求需要双向证书。
调用接口
用于商户主动调用接口给用户发放代金券的场景,已做防小号处理,给小号发放代金券将返回错误码。
注意:通过接口发放的代金券不会进入微信卡包
接口很简单,需要代金券批次ID和用户openid,代金券批次ID在哪里?每个代金券创建后就会有一个代金券批次ID,在商户平台-营销管理-代金券管理中可以看到。
下面为调用方式:
                        
                        
                    