微信扫码登陆-Java后台

时间:2019-12-19
本文章向大家介绍微信扫码登陆-Java后台,主要包括微信扫码登陆-Java后台使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
直接上代码,参考自: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 }
View Code

原文地址:https://www.cnblogs.com/skytoangel/p/12066725.html