直接上代码,参考自:
https://blog.csdn.net/qq_36014509/article/details/88996562 部分不通用,请自行结合项目修改

1 import com.tryee.common.utils.StringUtils; 2 import com.tryee.front.common.ResponseData; 3 import org.springframework.beans.factory.annotation.Value; 4 import org.springframework.http.HttpStatus; 5 import org.springframework.web.bind.annotation.*; 6 import com.alibaba.fastjson.JSONObject; 7 import com.jfinal.kit.HttpKit; 8 import java.util.HashMap; 9 import java.util.Map; 10 11 @RestController 12 @RequestMapping("/front/login/pc/") 13 public class WxCb { 14 15 @Value("${wx.pc.fw.accessTokenUrl}") 16 private String pcAccessTokenUrl; 17 18 @Value("${wx.pc.fw.userInfoUrl}") 19 private String pcUserInfoUrl; 20 21 @Value("${wx.appid}") 22 private String pcAppID; 23 24 @Value("${wx.appsecret}") 25 private String pcAppsecret; 26 27 28 @RequestMapping(value = "pcLoginByWeiXin", method = RequestMethod.GET) 29 @ResponseStatus(HttpStatus.OK) 30 public ResponseData pcLoginByWeiXin(@RequestParam String state, @RequestParam String code) { 31 /** 错误信息 **/ 32 Map<String, String> resMap = new HashMap<>(); 33 Map<String, String> res = new HashMap<>(); 34 if ( StringUtils.isBlank(code)) { 35 resMap.put("501", "微信code为空"); 36 return ResponseData.fail(resMap); 37 } 38 if (code != null) { 39 // 第一次进入界面,code不空,openid为空,根据code获取openid,然后查询是否存在用户信息。 40 Map<String, String> accessTokenMap = getPcWXAccessToken(code); // 获取getWXAccessToken(微信网站PC扫码登录) 41 /** 请求微信服务器错误 **/ 42 if (accessTokenMap.get("errcode") != null) { 43 resMap.put(accessTokenMap.get("errcode"), accessTokenMap.get("errmsg")); 44 return ResponseData.fail(resMap); 45 } 46 String accessToken = accessTokenMap.get("access_token"); 47 String openid = accessTokenMap.get("openid"); 48 System.out.println("accessToken:"+accessToken); 49 System.out.println("openid:"+openid); 50 // 查询出微信信息 51 Map<String, String> wxUserMap = this.getPcWeiXinUserInfo(openid, accessToken); // 获得微信用户信息 52 res = wxUserMap; 53 /** 获取微信信息异常 **/ 54 if (wxUserMap.get("errcode") != null) { 55 resMap.put(wxUserMap.get("errcode"), wxUserMap.get("errmsg")); 56 return ResponseData.fail(resMap); 57 } 58 59 60 } 61 return ResponseData.success(res); 62 } 63 64 /** 65 * 获取getPcWXAccessToken(微信网站PC扫码) 66 * 67 */ 68 private Map<String, String> getPcWXAccessToken(String code) { 69 Map<String, String> resMap = new HashMap<String, String>(); 70 StringBuffer target = new StringBuffer(); 71 target.append(pcAccessTokenUrl).append("appid=").append(pcAppID).append("&secret=").append(pcAppsecret) 72 .append("&code=").append(code).append("&grant_type=authorization_code"); 73 String jsonStr = HttpKit.get(target.toString()); 74 JSONObject jSONObject = JSONObject.parseObject(jsonStr); 75 if (jSONObject != null && jSONObject.get("errcode") != null) { // 有错误码 76 String errcode = String.valueOf(jSONObject.get("errcode")); 77 String errmsg = String.valueOf(jSONObject.get("errmsg")); 78 resMap.put("errmsg", errmsg); 79 resMap.put("errcode", errcode); 80 } else { 81 String accessToken = String.valueOf(jSONObject.get("access_token")); 82 String refreshToken = String.valueOf(jSONObject.get("refresh_token")); 83 String openid = String.valueOf(jSONObject.get("openid")); 84 String expiresIn = String.valueOf(jSONObject.get("expires_in")); 85 String unionid = String.valueOf(jSONObject.get("unionid")); 86 87 resMap.put("access_token", accessToken); 88 resMap.put("refresh_token", refreshToken); 89 resMap.put("openid", openid); 90 resMap.put("expires_in", expiresIn); 91 resMap.put("unionid", unionid); 92 } 93 return resMap; 94 } 95 96 /** 97 * 获得微信用户信息(微信网站PC扫码) 98 * 99 * @param openId 100 * @param accessToken 101 * @return 102 */ 103 private Map<String, String> getPcWeiXinUserInfo(String openId, String accessToken) { 104 Map<String, String> resMap = new HashMap<String, String>(); 105 StringBuffer url = new StringBuffer(pcUserInfoUrl); 106 url.append("access_token=").append(accessToken).append("&").append("openid=").append(openId).append("&") 107 .append("lang=zh_CN"); 108 String jsonStr = HttpKit.get(url.toString()); 109 JSONObject jSONObject = JSONObject.parseObject(jsonStr); 110 if (jSONObject != null && jSONObject.get("errcode") != null) { 111 String errcode = String.valueOf(jSONObject.get("errcode")); 112 String errmsg = String.valueOf(jSONObject.get("errmsg")); 113 resMap.put("errmsg", errmsg); 114 resMap.put("errcode", errcode); 115 } else { 116 String nickname = String.valueOf(jSONObject.get("nickname")); 117 String openid = String.valueOf(jSONObject.get("openid")); 118 String sex = String.valueOf(jSONObject.get("sex")); 119 String province = String.valueOf(jSONObject.get("province")); 120 String city = String.valueOf(jSONObject.get("city")); 121 String country = String.valueOf(jSONObject.get("country")); 122 String headimgurl = String.valueOf(jSONObject.get("headimgurl")); 123 String unionid = String.valueOf(jSONObject.get("unionid")); 124 125 resMap.put("nickname", nickname); 126 resMap.put("openid", openid); 127 resMap.put("sex", sex); 128 resMap.put("province", province); 129 resMap.put("city", city); 130 resMap.put("country", country); 131 resMap.put("headimgurl", headimgurl); 132 resMap.put("unionid", unionid); 133 } 134 return resMap; 135 } 136 137 138 }