QrCodeService.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package com.bofeng.wx;
  2. import com.bofeng.support.WeChatProperties;
  3. import com.google.common.base.Strings;
  4. import com.yvan.platform.Conv;
  5. import com.yvan.platform.YvanUtil;
  6. import me.chanjar.weixin.common.error.WxErrorException;
  7. import me.chanjar.weixin.mp.api.WxMpQrcodeService;
  8. import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.data.redis.core.StringRedisTemplate;
  11. import org.springframework.stereotype.Service;
  12. import java.util.concurrent.TimeUnit;
  13. @Service
  14. public class QrCodeService {
  15. private static final String REDIS_SCENE_PREFIX = "wechat:scene:";
  16. @Autowired
  17. private StringRedisTemplate stringRedisTemplate;
  18. @Autowired
  19. private WxMpQrcodeService wxMpQrcodeService;
  20. @Autowired
  21. private WeChatProperties weChatProperties;
  22. /**
  23. * 生成带参临时二维码
  24. */
  25. public WxMpQrCodeTicket create(Object content) throws WxErrorException {
  26. final int sceneId = Conv.NI(stringRedisTemplate.opsForValue().increment(REDIS_SCENE_PREFIX + "id", 1));
  27. WxMpQrCodeTicket ticket = wxMpQrcodeService.qrCodeCreateTmpTicket(sceneId, weChatProperties.getTmpTicketExpireSeconds());
  28. stringRedisTemplate.opsForValue().set(REDIS_SCENE_PREFIX + ticket.getTicket(),
  29. YvanUtil.toJson(content), ticket.getExpireSeconds(), TimeUnit.SECONDS);
  30. return ticket;
  31. }
  32. /**
  33. * 获取二维码内附带的数据
  34. */
  35. public <T> T getContent(String ticket, Class<T> clazz) {
  36. String c = stringRedisTemplate.opsForValue().get(REDIS_SCENE_PREFIX + ticket);
  37. if (Strings.isNullOrEmpty(c)) {
  38. return null;
  39. }
  40. return YvanUtil.jsonToObj(c, clazz);
  41. }
  42. }