WxTokenServiceImpl.java 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package com.xcgl.weixin.service;
  2. import cn.com.lzt.common.util.HttpClientUtils;
  3. import com.alibaba.fastjson.JSONObject;
  4. import org.apache.log4j.Logger;
  5. import org.springframework.scheduling.annotation.EnableScheduling;
  6. import org.springframework.scheduling.annotation.Scheduled;
  7. import org.springframework.stereotype.Service;
  8. import org.springframework.util.StringUtils;
  9. import javax.annotation.PostConstruct;
  10. import java.util.*;
  11. /**
  12. * 微信全局 token 服务
  13. */
  14. @Service
  15. @EnableScheduling
  16. public class WxTokenServiceImpl implements WxTokenService {
  17. private Logger logger = Logger.getLogger(this.getClass());
  18. private final static String wxmpid = "gh_53113f0bc7d4";
  19. private String accessToken = null;
  20. private long expireTime = 0;
  21. private boolean isLocal = false; // accessToken是否来自本地生产
  22. private String wxTokenUrl = "http://www.shenqin.work/api/wx/getAccessToken";
  23. @PostConstruct
  24. private void init() {
  25. if (StringUtils.isEmpty(wxTokenUrl)) {
  26. isLocal = true;
  27. }
  28. }
  29. public String getSkey() {
  30. return this.accessToken;
  31. }
  32. private boolean isNeedRefresh() {
  33. long now = Calendar.getInstance().getTimeInMillis() / 1000;
  34. return expireTime - now <= 10;
  35. }
  36. // @Scheduled(fixedRate = 1000 * 10)
  37. private void checkRemoteAccessToken() {
  38. logger.debug("checkRemoteAccessToken");
  39. if (this.isLocal) {
  40. return;
  41. }
  42. if (!isNeedRefresh()) {
  43. return;
  44. }
  45. Map<String, String> params = new HashMap<>();
  46. params.put("wxmpid", wxmpid);
  47. try {
  48. String ret = HttpClientUtils.sendHttpPost(wxTokenUrl, params);
  49. JSONObject jsonObject = JSONObject.parseObject(ret);
  50. JSONObject data = jsonObject.getJSONObject("data");
  51. this.accessToken = data.getString("accessToken");
  52. this.expireTime = data.getLong("expireTime");
  53. logger.info("refreshed accessToken=" + this.accessToken + " expireTime=" + this.expireTime);
  54. } catch (Exception e) {
  55. e.printStackTrace();
  56. }
  57. }
  58. }