微信卡券开发-卡券核销

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cl11992/article/details/86577665

一、介绍

最近我在做一个微信卡券的项目,在微信公众号新建了卡券,在项目中领取了卡券,需要做核销动作,记录一下开发流程,省的以后走弯路

二、注意

调取卡券使用的access_token是普通access_token

获取普通access_token方法:https://blog.csdn.net/cl11992/article/details/86304653

三、代码实例

下面代码需要的类

AccessTokenUtils:https://blog.csdn.net/cl11992/article/details/86304653

UrlConUtil:https://blog.csdn.net/cl11992/article/details/86303800

/*
 * 查询Code接口
 * 我们强烈建议开发者在调用核销code接口之前调用查询code接口,
 * 并在核销之前对非法状态的code(如转赠中、已删除、已核销等)做出处理。
 * @param code 券号:单张卡券的唯一标准。 
 */
private JSONObject check(final String code) {
	JSONObject json = new JSONObject();
	try {
		CommonVO data = new CommonVO();
		if (StringUtils.isBlank(code)) {
			json.put("state", "2");// 1--成功,2--失败
			json.put("msg", "缺少参数!");
			return json;
		}
		//获取access_token
		Map<String, String> accessTokenMap = AccessTokenUtils.getAccessToken;
		String token = accessTokenMap("access_token");
		
		String url = "https://api.weixin.qq.com/card/code/get?access_token=" + token;
		JSONObject paramjson = new JSONObject();
		paramjson.put("code", code);// 单张卡券的唯一标准。
		paramjson.put("check_consume", false);// 是否校验code核销状态,是否校验code核销状态,填入true和false时的code异常状态返回数据不同。
		JSONObject object = UrlConUtil.httpsRequest(url, "POST", paramjson.toString());
		String user_card_status = (String) object.get("user_card_status");// 当前code对应卡券的状态

		String info = null;
		boolean status = true;
		if ("NORMAL".equalsIgnoreCase(user_card_status)) {
			// NORMAL 正常
			status = true;
		} else if ("CONSUMED".equalsIgnoreCase(user_card_status)) {
			// CONSUMED 已核销
			info = "操作失败:" + "卡券已被核销过";
			status = false;
		} else if ("EXPIRE".equalsIgnoreCase(user_card_status)) {
			// EXPIRE 已过期
			info = "操作失败:" + "卡券已过期";
			status = false;
		} else if ("GIFTING".equalsIgnoreCase(user_card_status)) {
			// GIFTING 转赠中
			info = "操作失败:" + "卡券已在转赠中";
			status = false;
		} else if ("GIFT_TIMEOUT".equalsIgnoreCase(user_card_status)) {
			// GIFT_TIMEOUT 转赠超时
			info = "操作失败:" + "卡券已转赠超时";
			status = false;
		} else if ("DELETE".equalsIgnoreCase(user_card_status)) {
			// DELETE 已删除
			info = "操作失败:" + "卡券已被删除";
			status = false;
		} else if ("UNAVAILABLE".equalsIgnoreCase(user_card_status)) {
			// UNAVAILABLE 已失效
			info = "操作失败:" + "卡券已失效";
			status = false;
		} else {
			// code未被添加或被转赠领取的情况则统一报错:invalid serial code
			info = "操作失败:" + "卡券未被添加或已被转赠领取";
			status = false;
		}
		json.put("state", status == true ? "1" : "2");// 1--成功,2--失败
		json.put("msg", info);
		return json;
	} catch (Exception e) {
		logger.error("查询微信卡券报错:", e);
		return json;
	}
}
/**
 * 核销Code接口
 * 消耗code接口是核销卡券的唯一接口,开发者可以调用当前接口将用户的优惠券进行核销,该过程不可逆。
 * @param cardId 卡券ID代表一类卡券。 (非必填)
 * @param code 券号:单张卡券的唯一标准。
 * @throws Exception
 */
private JSONObject consume(final String cardId, final String code) {
	JSONObject json = new JSONObject();
	try{
		//获取access_token
		Map<String, String> accessTokenMap = AccessTokenUtils.getAccessToken;
		String token = accessTokenMap("access_token");
		String url = "https://api.weixin.qq.com/card/code/consume?access_token=" + token;
		JSONObject paramjson = new JSONObject();
		// paramjson.put("card_id", cardId);//卡券ID代表一类卡券。非必填
		paramjson.put("code", code);// 单张卡券的唯一标准。
		JSONObject object = UrlConUtil.httpsRequest(url, "POST", json.toString());
		int errcode = (int) object.get("errcode");
		String errmsg = (String) object.get("errmsg");
		if (errcode != 0) {
			json.put("state", "2");// 1--成功,2--失败
			json.put("msg", code+"调用核销Code接口异常,errcode=" + errcode + ",errmsg=" + errmsg);
			return json;
		}
		json.put("state", "1");// 1--成功,2--失败
		json.put("msg", "核销成功!");
		return json;
	}catch (Exception e) {
		json.put("state", "2");// 1--成功,2--失败
		json.put("msg", "核销失败!");
		return json;
	}
}

猜你喜欢

转载自blog.csdn.net/cl11992/article/details/86577665
今日推荐