1. 程式人生 > >微信公眾號(服務號)接入開發(2)之微信授權登陸

微信公眾號(服務號)接入開發(2)之微信授權登陸

  如果使用者在微信客戶端中訪問第三方網頁,公眾號可以通過微信網頁授權機制,來獲取使用者基本資訊,進而實現業務邏輯。

1. 授權回撥域名的說明:
(1)、這裡填寫的是域名(是一個字串),而不是URL,因此請勿加http://等協議頭;
(2)、授權回撥域名配置規範為全域名,比如需要網頁授權的域名為:www.qq.com;
(3)、如果公眾號登入授權給了第三方開發者來進行管理,則不必做任何設定,由第三方代替公眾號實現網頁授權即可

  1. 關於網頁授權的兩種scope的區別說明:
    (1)、以snsapi_base為scope發起的網頁授權,是用來獲取進入頁面的使用者的openid的,並且是靜默授權並自動跳轉到回撥頁的。使用者感知的就是直接進入了回撥頁(往往是業務頁面);
    (2)、以snsapi_userinfo為scope發起的網頁授權,是用來獲取使用者的基本資訊的。但這種授權需要使用者手動同意,並且由於使用者同意過,所以無須關注,就可在授權後獲取該使用者的基本資訊。

  2. 網頁授權access_token和普通access_token的區別:
    (1)、微信網頁授權是通過OAuth2.0機制實現的,在使用者授權給公眾號後,公眾號可以獲取到一個網頁授權特有的介面呼叫憑證(網頁授權access_token),通過網頁授權access_token可以進行授權後接口呼叫,如獲取使用者基本資訊;
    (2)、其他微信介面,需要通過基礎支援中的“獲取access_token”介面來獲取到的普通access_token呼叫;

  3. 網頁授權流程分為三步:
    (1)、第一步:使用者同意授權,獲取code,

 String appId="微信公眾號的APPID";
 String
url="微信回撥的URL"; String redirect_uri=URLEncoder.encode(url,"utf-8"); String state="重定向後會帶上state引數,開發者可以填寫a-zA-Z0-9的引數值,最多128位元組 ";//帶這個引數的好處就是防止非法的請求。 String url = "https://open.weixin.qq.com/connect/oauth2/authorize?"; url = url + "appid=" + this.wxMpConfigStorage.getAppId(); url = url + "&redirect_uri="
+ URIUtil.encodeURIComponent(redirectURI); url = url + "&response_type=code"; url = url + "&scope=" + scope; if (state != null) { url = url + "&state=" + state; } url = url + "#wechat_redirect";//進行URL的拼接 response.sendRedirect(url);//呼叫http請求的,進行微信授權

(2)、第二步:通過code換取網頁授權access_token:

//這段程式碼在你回撥的指定的url的Servlet或者action:
String code = request.getParameter("code");
loggerWx.info("code=" + code.toString());
String url="https://api.weixin.qq.com/sns/oauth2/access_token?appid="微信公眾號的APPID"&secret="微信公眾號的secret"&code=CODE&grant_type=authorization_code";//url的拼接
String wxMpOAuth2AccessToken=httpclient.post(url);//進行網路請求

(3)、第三步:拉取使用者資訊(需scope為 snsapi_userinfo):

String url="https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";//url的拼接
String wx_User_string=httpclient.post(url);//進行網路請求