微信快捷登錄功能

PC端微信快捷登錄

操作文檔

 

 

  • 開通微信登錄(需要認證  認證費300元)(點擊二步“查看”按鈕)

 

  • 生成AppSecret。
  • 控制器代碼實現。(如下移動端微信快捷登錄程序實現)

 

 

 

 

 

 

 

 

 

 

移動端微信快捷登錄

操作文檔

 

  • 必須使用微信公衆號(服務號)。
  • 對網頁進行授權。
  1. 對應開發文檔:

 

 

  1. 配置授權域名:公衆號設置-功能設置-網頁授權域名,點擊設置新增域名。

 

 

  • 注意:手機端微信快捷登錄,沒法獲取unionId,但可以獲取openId。程序要判斷是手機端就走openId獲取會員信息是否已經存在方法,否則就使用unionId。

 

 

 


程序實現如下:

/**

 * @Description: 微信快捷登錄

 * @param subsiteFlag

 * @param subsiteId

 * @param request

 * @return

 * Add by Bingyong.Wang at 20200424.

 */

@RequestMapping("/wxLogin")

public String weixinLogin(HttpServletRequest request){

try{

String code = request.getParameter("code");

// 用來判斷是否爲移動端,主要是爲了顯示不同的會員界面

String state = request.getParameter("state");

System.out.println("webUrl==============================="+request.getParameter("webUrl"));

//獲取openId並保存到會員中,openId來源於微信第三方登錄

if (GeneralUtil.isNotNull(code)) {

// 微信開放平臺對應的appId

String appid = "";

// appId對應的祕鑰

String secret = "";

 

if (HttpRequestDeviceUtils.isMobileDevice(request)){

// 微信公衆號登錄

appid = AykjConstants.APP_Id;

secret = AykjConstants.APP_SECRET;

} else {

// 微信開發平臺登錄

appid = AykjConstants.WXLOGIN_APPID;

secret = AykjConstants.WXLOGIN_APPSECRET;

}

// 獲取 token

String url = "https://api.weixin.qq.com/sns/oauth2/access_token";

Map<String, String> params = new HashMap<String, String>();

params.put("appid", appid);

params.put("secret", secret);

params.put("code", code);

params.put("grant_type", "authorization_code");

// System.out.println("=========url:"+url);

// System.out.println("=========params:"+params);

String result = HttpUtil.post(url, params, "utf-8");

//System.out.println("result"+result);

if (GeneralUtil.isNotNull(result)) {

JSONObject jsonObject = JSON.parseObject(result);

System.out.println("jsonObject"+jsonObject);

String openId = jsonObject.getString("openid");

String access_token = jsonObject.getString("access_token");

String unionid = jsonObject.getString("unionid");

 

// 獲取用戶信息

String getUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?openid=" + openId + "&access_token=" + access_token;

String getUserResult = HttpUtil.get(getUserInfoUrl, "utf-8");

 

if (GeneralUtil.isNotNull(getUserResult)) {

JSONObject json = JSON.parseObject(getUserResult);

System.out.println("getUserResult-jsonObject--------------"+jsonObject);

// 用戶暱稱

String nickName = json.getString("nickname");

// 用戶頭像(微信頭像)

String wxHeaderImg = json.getString("headimgurl");

String headerImg = System.currentTimeMillis() + ".png";

HttpUtil.downloadFile(wxHeaderImg, InitialListener.basePath + "temp/" + headerImg);

System.out.println("openId==="+openId);

System.out.println("access_token==="+access_token);

System.out.println("unionid==="+unionid);

System.out.println("用戶暱稱==="+nickName);

System.out.println("微信頭像====="+headerImg);

Member member = null;

if (state.equals("mobileState")) {

//根據openId查找會員

member = memberService.queryByOpenId(openId);

} else {

member = memberService.queryByUnionid(unionid);

}

if(member != null && GeneralUtil.isNotNull(member.getLoginId())){

//增加登錄日誌

//memberLogService.addLogin(member, request);

request.getSession().setAttribute(AykjConstants.FONT_MEMBER, member);

if (state.equals("mobileState")) {

return "redirect:/member/toPage?subsiteFlag=spMb&subsiteId=2&newsClassId=80&page=member";

}

return "redirect:/member/toPage?subsiteFlag=spPC&subsiteId=1&newsClassId=34&page=memberHome";

} else{

// 如果會員不存在就創建一個新會員

Member wxMember = new Member();

// 保存會員頭像

Annex annex = new Annex();

wxMember.setLoginId(GeneralUtil.isNotNull(unionid) ? unionid : openId);

wxMember.setOpenId(openId);

wxMember.setUnionid(unionid);

wxMember.setName(nickName);

 

annex.setType("image");

annex.setObj("member");

annex.setExt("png");

annex.setPath("/temp/" + headerImg);

 

memberService.saveWxMember(wxMember, annex);

request.getSession().setAttribute(AykjConstants.FONT_MEMBER, wxMember);

if (state.equals("mobileState")) {

return "redirect:/member/toPage?subsiteFlag=spMb&subsiteId=2&newsClassId=80&page=member";

}

return "redirect:/member/toPage?subsiteFlag=spPC&subsiteId=1&newsClassId=34&page=memberHome";

}

}

}

}

 

} catch (Exception e) {

LoggerUtil.error("微信登錄失敗:"+e.getMessage());

e.printStackTrace();

}

return "/error/404";

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章