接口很简单,需要代金券批次ID和用户openid,代金券批次ID在哪里?每个代金券创建后就会有一个代金券批次ID,在商户平台-营销管理-代金券管理中可以看到。
下面为调用方式:
// 微信支付对象 WXPay wxPay = new WXPay(WXPayConfigImpl.getInstance()); // 调用发送代金券接口 Map<String, String> resultMap = wxPay.sendCoupon(coupon_stock_id, partner_trade_no, openid);微信接口调用:
/** * 作用:商户平台-代金券或立减优惠-发放代金券<br> * 场景:用于商户主动调用接口给用户发放代金券的场景,已做防小号处理,给小号发放代金券将返回错误码。 * 注意:通过接口发放的代金券不会进入微信卡包 * 接口文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_3&index=4 * * @param coupon_stock_id 代金券批次id * @param partner_trade_no 商户单据号 * @param openid 用户openid * @return API返回数据 * @throws Exception e * * @author yclimb * @date 2018/9/14 */ public Map<String, String> sendCoupon(String coupon_stock_id, String partner_trade_no, String openid) throws Exception { /** 构造请求参数数据 **/ Map<String, String> data = new HashMap<>(); // 代金券批次id coupon_stock_id 是 1757 String 代金券批次id data.put("coupon_stock_id", coupon_stock_id); // openid记录数 openid_count 是 1 int openid记录数(目前支持num=1) data.put("openid_count", "1"); // 商户单据号 partner_trade_no 是 1000009820141203515766 String 商户此次发放凭据号(格式:商户id+日期+流水号),商户侧需保持唯一性 data.put("partner_trade_no", partner_trade_no); // 用户openid openid 是 onqOjjrXT-776SpHnfexGm1_P7iE String Openid信息,用户在appid下的唯一标识 data.put("openid", openid); /** 以下参数为非必填参数 **/ // 操作员 op_user_id 否 10000098 String(32) 操作员帐号, 默认为商户号 可在商户平台配置操作员对应的api权限 // 设备号 device_info 否 String(32) 微信支付分配的终端设备号 // 协议版本 version 否 1.0 String(32) 默认1.0 // 协议类型 type 否 XML String(32) XML【目前仅支持默认XML】 /** 以下四个参数,在 this.fillRequestData 方法中会自动赋值 **/ // 公众账号ID appid 是 wx5edab3bdfba3dc1c String(32) 微信为发券方商户分配的公众账号ID,接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的),不能为APP的appid(在open.weixin.qq.com申请的)。 // 商户号 mch_id 是 10000098 String(32) 微信为发券方商户分配的商户号 // 随机字符串 nonce_str 是 1417574675 String(32) 随机字符串,不长于32位 // 签名 sign 是 841B3002FE2220C87A2D08ABD8A8F791 String(32) 签名参数,详见签名生成算法 // 微信调用接口 Map<String, String> resultMap = this.sendCoupon(data); WXPayUtil.getLogger().info("wxPay.sendCoupon:" + resultMap); return resultMap; }以上为发放代金券相关代码,下面是查询代金券批次和代金券领取记录接口。
解释下什么叫做代金券批次和代金券记录:
代金券批次:商户平台创建的一个批次代金券,包含x张代金券
代金券:代金券批次下的一张代金券,代金券ID在用户领取代金券后由领取接口获取
代金券记录:用户领券的代金券记录,与代金券1:1,一个批次下有多个领取记录
代金券批次查询官方文档如下:
https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_4&index=5是否需要证书:否
请求参数主要为代金券批次idcoupon_stock_id,下面是调用接口代码:
/** * 作用:商户平台-代金券或立减优惠-查询代金券批次<br> * 场景:查询代金券批次信息 * 接口文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_4&index=5 * * @param coupon_stock_id 代金券批次id * @return API返回数据 * @throws Exception e * * @author yclimb * @date 2018/9/14 */ public Map<String, String> queryCouponStock(String coupon_stock_id) throws Exception { /** 构造请求参数数据 **/ Map<String, String> data = new HashMap<>(); // 代金券批次id coupon_stock_id 是 1757 String 代金券批次id data.put("coupon_stock_id", coupon_stock_id); /** 以下参数为非必填参数 **/ // 操作员 op_user_id 否 10000098 String(32) 操作员帐号, 默认为商户号 可在商户平台配置操作员对应的api权限 // 设备号 device_info 否 String(32) 微信支付分配的终端设备号 // 协议版本 version 否 1.0 String(32) 默认1.0 // 协议类型 type 否 XML String(32) XML【目前仅支持默认XML】 /** 以下四个参数,在 this.fillRequestData 方法中会自动赋值 **/ // 公众账号ID appid 是 wx5edab3bdfba3dc1c String(32) 微信为发券方商户分配的公众账号ID,接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的),不能为APP的appid(在open.weixin.qq.com申请的)。 // 商户号 mch_id 是 10000098 String(32) 微信为发券方商户分配的商户号 // 随机字符串 nonce_str 是 1417574675 String(32) 随机字符串,不长于32位 // 签名 sign 是 841B3002FE2220C87A2D08ABD8A8F791 String(32) 签名参数,详见签名生成算法 // 微信调用接口 Map<String, String> resultMap = this.queryCouponStock(data); WXPayUtil.getLogger().info("wxPay.queryCouponStock:" + resultMap); return resultMap; }