大白话解释一下,上面的代金券cardid就是通过接口返回的卡券ID,或者是通过手动创建后的卡包ID,就是乱七八糟一串英文的那一个,例如:pX2-vjpU_MT1gFDsP8lNl15PdaFS,官方的POST示例可以查看文档:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=21515658940X5pIn好消息来了,这个接口我已经封装在sdk中了,封装为方法便于大家使用,下面是调用方法和具体方法的代码。
调用方法:
/** * 创建支付后领取立减金活动接口 * * @author yclimb * @date 2018/9/18 */ private void createCardActivity() { WXUtils wxUtils = new WXUtils(); wxUtils.createCardActivity("2018-09-18 18:00:00", "2018-09-18 19:59:59", 3, 1, 1, "pX2-vjpU_MT1gFDsP8lNl15PdaZE", "100", null, false); }方法源码:
/** * 创建支付后领取立减金活动接口 * 通过此接口创建立减金活动。 * 将已创建的代金券cardid、跳转小程序appid、发起支付的商户号等信息通过此接口创建立减金活动,成功返回活动id即为创建成功。 * 接口地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=21515658940X5pIn * * @param begin_time 活动开始时间,精确到秒 * @param end_time 活动结束时间,精确到秒 * @param gift_num 单个礼包社交立减金数量(3-15个) * @param max_partic_times_act 每个用户活动期间最大领取次数,最大为50,默认为1 * @param max_partic_times_one_day 每个用户活动期间单日最大领取次数,最大为50,默认为1 * @param card_id 卡券ID * @param min_amt 最少支付金额,单位是元 * @param membership_appid 奖品指定的会员卡appid。如用户标签有选择商户会员,则需要填写会员卡appid,该appid需要跟所有发放商户号有绑定关系。 * @param new_tinyapp_user 可以指定为是否小程序新用户(membership_appid为空、new_tinyapp_user为false时,指定为所有用户) * @return json * @author yclimb * @date 2018/9/18 */ public JSONObject createCardActivity(String begin_time, String end_time, int gift_num, int max_partic_times_act, int max_partic_times_one_day, String card_id, String min_amt, String membership_appid, boolean new_tinyapp_user) { try { // 创建活动接口之前的验证 String msg = checkCardActivity(begin_time, end_time, gift_num, max_partic_times_act, max_partic_times_one_day, min_amt); if (null != msg) { JSONObject resultJson = new JSONObject(2); resultJson.put("errcode", "1"); resultJson.put("errmsg", msg); return resultJson; } // 获取[商户名称]公众号的 access_token String accessToken = this.getAccessToken(WXConstants.WX_MINI_PROGRAM_CODE); // 调用接口传入参数 JSONObject paramJson = new JSONObject(1); // info 包含 basic_info、card_info_list、custom_info JSONObject info = new JSONObject(3); // 基础信息对象 JSONObject basic_info = new JSONObject(8); // activity_bg_color 是 活动封面的背景颜色,可参考:选取卡券背景颜色 basic_info.put("activity_bg_color", CardBgColorEnum.COLOR_090.getBgName()); // activity_tinyappid 是 用户点击链接后可静默添加到列表的小程序appid; basic_info.put("activity_tinyappid", WXPayConstants.APP_ID); // mch_code 是 支付商户号 basic_info.put("mch_code", WXPayConstants.MCH_ID); // begin_time 是 活动开始时间,精确到秒(unix时间戳) basic_info.put("begin_time", DateTimeUtil.getTenTimeByDate(begin_time)); // end_time 是 活动结束时间,精确到秒(unix时间戳) basic_info.put("end_time", DateTimeUtil.getTenTimeByDate(end_time)); // gift_num 是 单个礼包社交立减金数量(3-15个) basic_info.put("gift_num", gift_num); // max_partic_times_act 否 每个用户活动期间最大领取次数,最大为50,不填默认为1 basic_info.put("max_partic_times_act", max_partic_times_act); // max_partic_times_one_day 否 每个用户活动期间单日最大领取次数,最大为50,不填默认为1 basic_info.put("max_partic_times_one_day", max_partic_times_one_day); // card_info_list 是 可以配置两种发放规则:小程序新老用户、新老会员 JSONArray card_info_list = new JSONArray(1); JSONObject card_info = new JSONObject(3); // card_id 是 卡券ID card_info.put("card_id", card_id); // min_amt 是 最少支付金额,单位是分 card_info.put("min_amt", String.valueOf(new BigDecimal(min_amt).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).intValue())); /* * membership_appid 是 奖品指定的会员卡appid。如用户标签有选择商户会员,则需要填写会员卡appid,该appid需要跟所有发放商户号有绑定关系。 * new_tinyapp_user 是 可以指定为是否小程序新用户 * total_user 是 可以指定为所有用户 * membership_appid、new_tinyapp_user、total_user以上字段3选1,未选择请勿填,不必故意填写false */ if (StringUtils.isNotBlank(membership_appid)) { card_info.put("membership_appid", membership_appid); } else { if (new_tinyapp_user) { card_info.put("new_tinyapp_user", true); } else { card_info.put("total_user", true); } } card_info_list.add(card_info); // 自定义字段,表示支付后领券 JSONObject custom_info = new JSONObject(1); custom_info.put("type", "AFTER_PAY_PACKAGE"); // 拼装json对象 info.put("basic_info", basic_info); info.put("card_info_list", card_info_list); info.put("custom_info", custom_info); paramJson.put("info", info); // 请求微信接口,得到返回结果[json] HttpEntity<JSONObject> entity = new HttpEntity<>(paramJson, this.getHttpHeadersUTF8JSON()); JSONObject resultJson = restTemplate.postForObject(WXURL.WX_CARD_ACTIVITY_CREATE_URL, entity, JSONObject.class, accessToken); // {"errcode":0,"errmsg":"ok","activity_id":"4728935"} System.out.println(resultJson.toJSONString()); return resultJson; } catch (Exception e) { WXPayUtil.getLogger().error(e.getMessage(), e); } return null; } /** * 创建活动接口之前的验证 * * @param begin_time 活动开始时间,精确到秒 * @param end_time 活动结束时间,精确到秒 * @param gift_num 单个礼包社交立减金数量(3-15个) * @param max_partic_times_act 每个用户活动期间最大领取次数,最大为50,默认为1 * @param max_partic_times_one_day 每个用户活动期间单日最大领取次数,最大为50,默认为1 * @param min_amt 最少支付金额,单位是元 * @return msg str * @author yclimb * @date 2018/9/18 */ public String checkCardActivity(String begin_time, String end_time, int gift_num, int max_partic_times_act, int max_partic_times_one_day, String min_amt) { // 开始时间不能小于结束时间 if (DateTimeUtil.latterThan(end_time, begin_time, DateTimeUtil.TIME_FORMAT_NORMAL)) { return "活动开始时间不能小于活动结束时间"; } // 单个礼包社交立减金数量(3-15个) if (gift_num < 3 || gift_num > 15) { return "单个礼包社交立减金数量(3-15个)"; } // 每个用户活动期间最大领取次数,最大为50,默认为1 if (max_partic_times_act <= 0 || max_partic_times_act > 50) { return "每个用户活动期间最大领取次数,最大为50,默认为1"; } // 每个用户活动期间单日最大领取次数,最大为50,默认为1 if (max_partic_times_one_day <= 0 || max_partic_times_one_day > 50) { return "每个用户活动期间单日最大领取次数,最大为50,默认为1"; } // 最少支付金额,单位是元 if (BigDecimal.ONE.compareTo(new BigDecimal(min_amt)) > 0) { return "最少支付金额必须大于1元"; } return null; }对应的全部代码,可以查看我的github,地址如下:
https://github.com/YClimb/wxpay-sdk/blob/master/src/main/java/com/weixin/pay/util/WXUtils.java