微信登錄授權

在開發微信網頁登陸授權時(如下圖),由於對微信平臺不熟悉,以爲需要在微信開放平臺新建一個網站應用以便獲取Appid以及AppSecret,等提交材料審批通過後,拿Appid通過微信網頁登錄授權說明點擊打開鏈接嘗試操作後,發現總是提示scope錯誤或者無權限:



經網上查詢,發現原來網頁授權登錄不是在微信開放平臺新建應用,而是通過微信服務號進行操作,取得Appid也是微信服務號的Appid,回調地址也是在服務號中設置,這需要確保服務號有網頁授權獲取用戶基本信息的接口權限,並填寫回調地址:







相關服務開通之後,根據微信網頁授權接口開發說明,一步步操作,就可以獲取需要的用戶信息進行相關操作,其中除了第一步是可以由用戶點擊操作外,其他三部都需要網站頁面模擬get請求相應鏈接進行相關數據的獲取,借網上搜尋的代碼展示如下:

package com.javen.course.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import com.javen.course.entity.UserInfo_weixin;
import com.javen.course.util.HttpUtil;
/**
 * 
 * @author 簡愛微萌
 * @Email [email protected]
 * 接口權限中設置OAuth2.0網頁授權 域名 如:www.wechat68.com
 * 授權訪問的URL:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx614c453e0d1dcd12&redirect_uri=http://www.wechat68.com/Javen/OauthTest&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect
 */
public class Oauth2Servlet extends HttpServlet {
private String get_access_token_url="https://api.weixin.qq.com/sns/oauth2/access_token?" +
        "appid=APPID" +
        "&secret=SECRET&" +
        "code=CODE&grant_type=authorization_code";
private String get_userinfo="https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";

    private static final long serialVersionUID = -644518508267758016L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        // 將請求、響應的編碼均設置爲UTF-8(防止中文亂碼)  
        request.setCharacterEncoding("UTF-8");  
        response.setCharacterEncoding("UTF-8"); 
        String code=request.getParameter("code");
        
        get_access_token_url=get_access_token_url.replace("APPID", "wx614c453e0d1dcd12");
        get_access_token_url=get_access_token_url.replace("SECRET", "fd00642f7a2fea32c5a7b060d9c37db1");
        get_access_token_url=get_access_token_url.replace("CODE", code);
        
        String json=HttpUtil.getUrl(get_access_token_url);
        
        
        JSONObject jsonObject=JSONObject.fromObject(json);
        String access_token=jsonObject.getString("access_token");
        String openid=jsonObject.getString("openid");
        
        get_userinfo=get_userinfo.replace("ACCESS_TOKEN", access_token);
        get_userinfo=get_userinfo.replace("OPENID", openid);
        
        String userInfoJson=HttpUtil.getUrl(get_userinfo);
        
        JSONObject userInfoJO=JSONObject.fromObject(userInfoJson);
        
        String user_openid=userInfoJO.getString("openid");
        String user_nickname=userInfoJO.getString("nickname");
        String user_sex=userInfoJO.getString("sex");
        String user_province=userInfoJO.getString("province");
        String user_city=userInfoJO.getString("city");
        String user_country=userInfoJO.getString("country");
        String user_headimgurl=userInfoJO.getString("headimgurl");
        
    //    UserInfo_weixin userInfo=new UserInfo_weixin(user_openid, user_nickname, user_sex, user_province, user_city, user_country, user_headimgurl);
        response.setContentType("text/html; charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("");
        out.println("");
        out.println("  ");
        out.println("  ");
        out.print("    This is ");
        out.print(this.getClass());
        out.println(", using the POST method \n");
        out.println("openid:"+user_openid+"\n\n");        
        out.println("nickname:"+user_nickname+"\n\n");        
        out.println("sex:"+user_sex+"\n\n");        
        out.println("province:"+user_province+"\n\n");        
        out.println("city:"+user_city+"\n\n");        
        out.println("country:"+user_country+"\n\n");
        out.println(");
        out.println(">");
        out.println("  ");
        out.println("");
        out.flush();
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("");
        out.println("");
        out.println("  ");
        out.println("  ");
        out.print("    This is ");
        out.print(this.getClass());
        out.println(", using the POST method");
        out.println("  ");
        out.println("");
        out.flush();
        out.close();
    }


}




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