suntianwu преди 3 години
родител
ревизия
39d41d793c

+ 1 - 0
src/main/java/com/care/client/config/WxConfig.java

@@ -7,6 +7,7 @@ public class WxConfig {
 
     private String codeUrl;
     private String tokenUrl;
+    private String infoUrl;
     private String appId;
     private String secret;
 

+ 22 - 0
src/main/java/com/care/client/service/PassportService.java

@@ -1,5 +1,8 @@
 package com.care.client.service;
 
+import cn.hutool.json.JSONObject;
+import com.care.client.config.PlatformPinanbaoConfig;
+import com.care.client.config.WxConfig;
 import com.care.client.vo.MemberInfoVO;
 import com.care.client.vo.MemberInitParams;
 import com.care.common.cache.RedisKeyConstant;
@@ -8,6 +11,7 @@ import com.care.common.entity.CareMemberInfo;
 import com.care.common.exception.BDException;
 import com.care.common.service.CareMemberInfoService;
 import com.care.common.util.CheckUtils;
+import com.care.common.util.HttpUtil;
 import com.care.common.util.Result;
 import com.care.common.util.WxUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -16,6 +20,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.text.MessageFormat;
 
 @Slf4j
 @Service
@@ -27,6 +32,8 @@ public class PassportService extends AbstractPassportService {
     private WxPassportService wxPassportService;
     @Resource
     private CareMemberInfoService careMemberInfoService;
+    @Resource
+    private PlatformPinanbaoConfig platformPinanbaoConfig;
 
 
     public Result<Object> login(MemberInitParams params) {
@@ -89,6 +96,21 @@ public class PassportService extends AbstractPassportService {
              careMemberInfo.setPhone(phone);
              careMemberInfo.setOpenId(openId);
 
+             String accessToken= wxPassportService.accessToken();
+             WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
+
+             String infoUrl = MessageFormat.format(wxConfig.getInfoUrl(),accessToken, openId);
+             JSONObject jsonObject = HttpUtil.httpGet(infoUrl);
+             log.warn("-----jsonObject:[{}]", jsonObject);
+             if(jsonObject != null){
+                 String headimgurl = jsonObject.getStr("headimgurl");
+                 careMemberInfo.setProfile(headimgurl);
+                 String nickname = jsonObject.getStr("nickname");
+                 careMemberInfo.setNickname(nickname);
+                 int sex = jsonObject.getInt("sex");
+                 careMemberInfo.setGender(sex == 1 ? "M" : (sex == 2 ? "W": null));
+             }
+
              boolean flag = careMemberInfoService.save(careMemberInfo);
              if (flag) {
                  cache(params);

+ 5 - 15
src/main/java/com/care/client/service/WxPassportService.java

@@ -1,16 +1,14 @@
 package com.care.client.service;
 
-import cn.hutool.http.HttpRequest;
-import cn.hutool.http.HttpResponse;
 import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
+
 import com.care.client.config.PlatformPinanbaoConfig;
 import com.care.client.config.WxConfig;
 import com.care.client.vo.MemberInitParams;
 import com.care.common.cache.RedisKeyConstant;
 import com.care.common.cache.RedisUtil;
+import com.care.common.util.HttpUtil;
 import com.care.common.util.Result;
-import com.google.gson.Gson;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -27,14 +25,13 @@ public class WxPassportService extends AbstractPassportService {
     @Resource
     private PlatformPinanbaoConfig platformPinanbaoConfig;
 
-    Gson gson = new Gson();
 
     public Result<Object> login(MemberInitParams params) {
         WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
         // 解析codeUrl
         String codeUrl = MessageFormat.format(wxConfig.getCodeUrl(), wxConfig.getAppId(), wxConfig.getSecret(), params.getCode());
         // 通过codeUrl获取openid
-        JSONObject jsonObject = this.httpGet(codeUrl);
+        JSONObject jsonObject = HttpUtil.httpGet(codeUrl);
         log.warn("-----jsonObject:[{}]", jsonObject);
 
         String openid = jsonObject.getStr("openid");
@@ -50,14 +47,7 @@ public class WxPassportService extends AbstractPassportService {
     }
 
 
-    private JSONObject httpGet(String url) {
-        HttpResponse response = HttpRequest.get(url).execute();
-        String json = response.charset("utf-8").body();
-        JSONObject jsonObject = JSONUtil.parseObj(json);
-        return jsonObject;
-    }
-
-    private String accessToken() {
+    public String accessToken() {
         WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
         String access_token = (String) redisUtil.hget(RedisKeyConstant.WX_ACCESS_TOKEN, wxConfig.getAppId());
         if (access_token != null) {
@@ -71,7 +61,7 @@ public class WxPassportService extends AbstractPassportService {
         // 解析codeUrl
         String tokenUrl = MessageFormat.format(wxConfig.getTokenUrl(), wxConfig.getAppId(), wxConfig.getSecret());
         // 通过codeUrl获取openid
-        JSONObject jsonObject = this.httpGet(tokenUrl);
+        JSONObject jsonObject = HttpUtil.httpGet(tokenUrl);
         String access_token = jsonObject.getStr("access_token");
         redisUtil.hset(RedisKeyConstant.WX_ACCESS_TOKEN, wxConfig.getAppId(), access_token, RedisKeyConstant.WX_ACCESS_TOKEN_TIME);
         return access_token;

+ 16 - 0
src/main/java/com/care/common/util/HttpUtil.java

@@ -0,0 +1,16 @@
+package com.care.common.util;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+
+public class HttpUtil {
+    public static JSONObject httpGet(String url) {
+        HttpResponse response = HttpRequest.get(url).execute();
+        String json = response.charset("utf-8").body();
+        JSONObject jsonObject = JSONUtil.parseObj(json);
+        return jsonObject;
+    }
+
+}

+ 1 - 0
src/main/resources/application.properties

@@ -55,6 +55,7 @@ spring.freemarker.template-loader-path=classpath:/template,classpath:/font
 #频安宝 小程序
 wx.pinanbao.codeUrl=https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code
 wx.pinanbao.tokenUrl=https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}
+wx.pinanbao.infoUrl=https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN
 wx.pinanbao.appid=wxda02870032b8f928
 wx.pinanbao.secret=5984b6cf5dad4693eb60cbc494d9f385