admin管理员组

文章数量:1614997

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

接下来说说大致步骤吧,其实微信公众号的开发文档介绍得很详细。
微信公众号开发文档链接:
https://developers.weixin.qq/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/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/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/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/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/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

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

本文标签: 登入后台Java