WxPassportService.java 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package com.care.client.service;
  2. import cn.hutool.http.HttpRequest;
  3. import cn.hutool.http.HttpResponse;
  4. import cn.hutool.json.JSONObject;
  5. import cn.hutool.json.JSONUtil;
  6. import com.care.client.config.PlatformPinanbaoConfig;
  7. import com.care.client.config.WxConfig;
  8. import com.care.client.vo.MemberInitParams;
  9. import com.care.common.cache.RedisKeyConstant;
  10. import com.care.common.cache.RedisUtil;
  11. import com.care.common.util.Result;
  12. import com.google.gson.Gson;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.springframework.stereotype.Service;
  15. import javax.annotation.Resource;
  16. import java.text.MessageFormat;
  17. @Slf4j
  18. @Service
  19. public class WxPassportService extends AbstractPassportService {
  20. @Resource
  21. private RedisUtil redisUtil;
  22. @Resource
  23. private PlatformPinanbaoConfig platformPinanbaoConfig;
  24. Gson gson = new Gson();
  25. public Result<Object> login(MemberInitParams params) {
  26. WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
  27. // 解析codeUrl
  28. String codeUrl = MessageFormat.format(wxConfig.getCodeUrl(), wxConfig.getAppId(), wxConfig.getSecret(), params.getCode());
  29. // 通过codeUrl获取openid
  30. JSONObject jsonObject = this.httpGet(codeUrl);
  31. log.warn("-----jsonObject:[{}]", jsonObject);
  32. String openid = jsonObject.getStr("openid");
  33. String sessionKey = jsonObject.getStr("session_key"); // TODO 暂时用不到
  34. log.warn("-----openid:[{}], session_key:[{}]", openid, sessionKey);
  35. // TODO 测试阶段先注释掉
  36. params.setOpenid(openid);
  37. return cache(params);
  38. }
  39. private JSONObject httpGet(String url) {
  40. HttpResponse response = HttpRequest.get(url).execute();
  41. String json = response.charset("utf-8").body();
  42. JSONObject jsonObject = JSONUtil.parseObj(json);
  43. return jsonObject;
  44. }
  45. private String accessToken() {
  46. WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
  47. String access_token = (String) redisUtil.hget(RedisKeyConstant.WX_ACCESS_TOKEN, wxConfig.getAppId());
  48. if (access_token != null) {
  49. return access_token;
  50. }
  51. return this.flushWxToken();
  52. }
  53. private String flushWxToken() {
  54. WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
  55. // 解析codeUrl
  56. String tokenUrl = MessageFormat.format(wxConfig.getTokenUrl(), wxConfig.getAppId(), wxConfig.getSecret());
  57. // 通过codeUrl获取openid
  58. JSONObject jsonObject = this.httpGet(tokenUrl);
  59. String access_token = jsonObject.getStr("access_token");
  60. redisUtil.hset(RedisKeyConstant.WX_ACCESS_TOKEN, wxConfig.getAppId(), access_token, RedisKeyConstant.WX_ACCESS_TOKEN_TIME);
  61. return access_token;
  62. }
  63. }