欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

H5微信授权登入(后台Java )

程序员文章站 2022-04-03 09:13:21
...

最近做一个小工具,通过公众号菜单打开。页面使用H5来写的。需要用户通过菜单打开小工具的时候要求用户授权微信信息,进行登入。

接下来说说大致步骤吧,其实微信公众号的开发文档介绍得很详细。
微信公众号开发文档链接:
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

具体步骤:

1 第一步:用户同意授权,获取code (前端)

2 第二步:通过code换取网页授权access_token (后台)

3 第三步:刷新access_token(如果需要) (后台)

4 第四步:拉取用户信息(需scope为 snsapi_userinfo)(后台)

5 附:检验授权凭证(access_token)是否有效 (后台)

其实就是获取在前端用 window.location.href 打开微信URL页面 url中包含了回调页面的参数。 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。这样我们就得到了 code。前端的任务就完成了。我们可以利用这个code到后台换取accessToken和通过accessToken拉取用户信息。

跳转回调redirect_uri,应当使用https链接来确保授权code的安全性。(域名必须在公众号后台配置)
地址: 设置与管理->开发->接口权限->网页服务->网页授权->网页授权获取用户基本信息

部分代码:
1,获取code,并提示用户授权

window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${url}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect`

2,通过code换取网页授权access_token
这一步是在后台进行


```java
   
  //公众号appid
    public static final String APPID = "APPID ";
    //公众号appsecert
    public static final String APPSECRET = "APPSECRET ";

请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

String url = GET_ACCESS_TOKEN_URL.replace("CODE", code).replace("APPID", APPID).replace("SECRET", APPSECRET);
JSONObject jsonObject = httpRequest(url, "GET", "");

正常返回时

{
  "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE" 
}

请求有误时

{"errcode":40029,"errmsg":"invalid code"}

3,获取用户信息

请求地址
http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

String userInfoUrl = GET_USER_INFO_URL.replace("ACCESS_TOKEN", access_token).replace("OPENID", openid);
JSONObject infoResult = httpRequest(userInfoUrl, "GET", "");

正常返回

{   
  "openid": "OPENID",
  "nickname": NICKNAME,
  "sex": 1,
  "province":"PROVINCE",
  "city":"CITY",
  "country":"COUNTRY",
"headimgurl":"https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
  "privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],
  "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

错误返回

{"errcode":40003,"errmsg":" invalid openid "}

刷新和校验验证码我就不贴代码了。是同上的逻辑。
4,刷新access_token(如果需要) (后台)
获取第二步的refresh_token后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

5,检验授权凭证(access_token)是否有效 (后台)
http:GET(请使用https协议) https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID