微信卡券开发-卡券核销

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接: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;
	}
}

 

展开阅读全文

微信卡券接口问题

07-29

string buff = "\"card\": \"card_type\": \"CASH\",\"groupon\": \"base_info\": \"logo_url \": \"https://mmbiz.qlogo.cn/mmbiz/pEjibTibnM4kjzGwdia33qWmBZKTsncHxm1kpQ1UqeXSOyIlLq8KLPDb9VB6XbHN425ibicXHAfYNDLj2lF0Z5MVia6g/0\",\"brand_name\": \"456\",\"code_type\": \"CODE_TYPE_TEXT\",\"title\": \"654\",\"sub_title\": \"周末狂欢必备\",\"color\": \"Color010\",\"notice\": \"使用时向服务员出示此券\",\"service_phone\": \"020-88888888\",\"description\": \"不可与其他优惠同享\",\"date_info\": \"type\": \"DATE_TYPE_FIX_TIME_RANGE\",\"end_timestamp\": \"1422724261\",\"sku\": \"quantity\": 0,\"get_limit\": 2,\"use_custom_code\": false,\"bind_openid\": false,\"can_share\": true,\"can_give_friend\": true,\"custom_url_name\": \"立即使用\",\"custom_url\": \"http://www.qq.com\",\"custom_url_sub_title\": \"6个汉字tips\",\"promotion_url_name\": \"更多优惠\",\"promotion_url\": \"http://www.qq.com\",\"source\": \"大众点评\",\"least_cost\": 100,\"reduce_cost\": 20000";rn一直返回47001不知道哪出问题了,解析没问题的rnrn "card": rn "card_type": "CASH", rn "groupon": rn "base_info": rn "logo_url ": "https://mmbiz.qlogo.cn/mmbiz/pEjibTibnM4kjzGwdia33qWmBZKTsncHxm1kpQ1UqeXSOyIlLq8KLPDb9VB6XbHN425ibicXHAfYNDLj2lF0Z5MVia6g/0", rn "brand_name": "456", rn "code_type": "CODE_TYPE_TEXT", rn "title": "654", rn "sub_title": "周末狂欢必备", rn "color": "Color010", rn "notice": "使用时向服务员出示此券", rn "service_phone": "020-88888888", rn "description": "不可与其他优惠同享", rn "date_info": rn "type": "DATE_TYPE_FIX_TIME_RANGE", rn "end_timestamp": "1422724261"rn , rn "sku": rn "quantity": 0rn , rn "get_limit": 2, rn "use_custom_code": false, rn "bind_openid": false, rn "can_share": true, rn "can_give_friend": true, rn "custom_url_name": "立即使用", rn "custom_url": "http://www.qq.com", rn "custom_url_sub_title": "6个汉字tips", rn "promotion_url_name": "更多优惠", rn "promotion_url": "http://www.qq.com", rn "source": "大众点评"rn , rn "least_cost": 100, rn "reduce_cost": 20000rn rn rnrn帮我看一下谢谢。刚刚接触.net 论坛

没有更多推荐了,返回首页