微信快捷登录功能

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";

}

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