微信领卡,会员卡,优惠券

微信小程序领取会员卡流程整理java 端
1.创建卡券,会员卡或者优惠券

创建微信卡券
一般来说会员卡都是自定义的卡券code所以你需要确保你会员卡号不能重复
优惠券一般无需自定义卡券code,看自己需求
2.获取开卡参数给前端

//前端给用户的唯一标识,openid或者unid,卡券code。这个看自己的业务场景.
public Res getCardInfo(String openid) {
        String cardId =“”;
        String apiticket = tokenService.getLsapiTicket();
        log.info("apiticket" + apiticket);
        String nonceStr = tokenService.getNonceStr();
        String timeStamp = tokenService.getTimeStamp();
        String sign = tokenService.getSigncard(apiticket,one.getCustomerNumber(), timeStamp, cardId, nonceStr);
        Map<String, String> map = new HashMap<>();
        map.put("nonce_str", nonceStr);
        map.put("timestamp", timeStamp);
        map.put("signature", sign);
        map.put("cardId", cardId);
        map.put("api_ticket", apiticket);
        map.put("code", "自己看需要是不是自定义的code,是,就自己生成,不是不给");
        log.info("返回的领卡信息 " + map.toString());
        return new Res(map);
    }

/**
     * 获取ticket
     *
     * @return
     */
    public String getLsapiTicket() {
        String api_ticket = null;
        try {
            api_ticket = (String) redisTemplate.opsForValue().get("getapiTicket");
        } catch (Exception e) {
            log.info("redis未获取到 getapiTicket");
        }
        if (StringUtils.isEmpty(api_ticket)) {
            String requestUrl = "";
            String s = HttpUtil.get(requestUrl);
            ApiTicketVO apiTicket = JsonUtil.transferJsonToObject(s, ApiTicketVO.class);
//			ApiTicket apiTicket = JSON.parseObject(s, ApiTicket.class);
            api_ticket = apiTicket.getApiTicket();
            log.info(apiTicket.getUpdateTime()+"");
            log.info( System.currentTimeMillis()+"");
            redisTemplate.opsForValue().set("getapiTicket", api_ticket,7200-parseDate(apiTicket.getUpdateTime()), TimeUnit.SECONDS);
            log.info("--getapiTicket--"+redisTemplate.opsForValue().get("getapiTicket"));
            return api_ticket;
        }
        log.info("--getapiTicket-redisTemplate-"+api_ticket);
        return api_ticket;
    }
//这三个是固定的工具方法
 public String getNonceStr() {
        StringBuffer uuidSbBuffer = new StringBuffer();
        int quotient = 1;
        for (int i = 0; i < quotient; i++) {
            uuidSbBuffer.append(UUID.randomUUID().toString().replaceAll("-", ""));
        }
        uuidSbBuffer.append(UUID.randomUUID().toString().replaceAll("-", "").substring(0, 1));
        return uuidSbBuffer.toString();
    }

public String getTimeStamp() {
        return String.valueOf(System.currentTimeMillis() / 1000);

    }


 public String getSigncard(String api_ticket,String code, String timestamp, String card_id, String nonce_str) {
        String[] sign = {api_ticket,code, timestamp, card_id, nonce_str};
        Arrays.sort(sign);
        String signStr = "";
        for (String s : sign) {
            signStr += s;
        }
        log.info("未加密的sign   " + Arrays.toString(sign));
        return sha1Encode(signStr);
    }

3.前端在拿到开卡参数后,用户点击领取卡券。跳转到领卡页面,用户领卡会触发回调通知,
3.1.后台直接监听这个回调,判断用户领卡状态

/**
	 * 用户领卡后的微信回调
	 *
	 * @param
	 */
	@GetMapping("/getCardWechatRes")
	public String getCardWechatRes(@RequestParam("eventType") String eventType,
								   @RequestParam("openId") String openId,
								   @RequestParam("code") String code,
								   @RequestParam("cardId") String cardId) {
		log.info("微信领卡回调=======getCardWechatRes=============== start--");
		log.info("=======getCardWechatRes=============== eventType--"+eventType);
		log.info("=======getCardWechatRes=============== openId---"+openId);
		log.info("=======getCardWechatRes=============== code---"+code);
		log.info("=======getCardWechatRes=============== cardId--"+cardId);
		//处理微信回调xml包
		if ("user_get_card".equals(eventType)&&!StringObjIsNull(openId)&&!StringObjIsNull(code)&&!StringObjIsNull(cardId)){
			//自己判断cardId是不是你生成的卡券cardId,然后处理业务修改会员领卡状态
		}
		if ("user_consume_card".equals(eventType)){
			//核销卡卷
			log.info("卡卷核销成功 ------------ " + code);
		}
		return "success";
	}



//生成  会员卡code     自己加同步或者加锁保证卡号不重复
    public String getCustomerNumber(){
            String customerNumber  = redisTemplate.opsForValue().get("customerNumber")+"";
            if(StringObjIsNull(customerNumber)||"null".equals(customerNumber)){
            //去数据库取最大的卡号
                customerNumber = memberUserInfoMapper.getCustomerNumber().replace("huiyuanka","");
            }
            long aa = Long.parseLong(customerNumber)+1;
            redisTemplate.opsForValue().set("customerNumber",aa+"");
            return "huiyuanka"+aa;
    }
























结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值