網站應用 - 微信登錄

網站微信登錄,做起來挺簡單的,我們做這個,首頁是要去看微信文檔,文檔看懂了,然後理清楚邏輯,怎麼進行綁定貴公司的賬號,業務那塊要理清楚!

首先,微信官方告訴我們,要先去申請網站應用,好吧,去申請一下,幾小時後,審批通過,速度蠻快的!
申請成功,我們就可以拿到AppId, AppSercret,那麼就可以去開心的調接口了!

看看接口文檔,嗯,二維碼是吧,看看URL,簡單,傳參,然後發起請求,好舒服,嗯,按照參往裏面傳,然後出現了二維碼。開心!

第二步,用戶掃描成功,跳到我傳的回調地址,進行授權申請登錄,那麼就可以拿到oppid了,開心,oppid拿到手了,不是就可以進行關聯了,簡單,關聯在一起,這裏要提醒一下,公衆號與小程序的oppid是不一樣的,但是uuid是一樣的,如果要關聯小程序與公衆號,那麼就要再通過token去拿uuid哦,我是偷懶,沒有再去調接口拿uuid了!

又有同學問我了,如果沒有綁定賬號怎麼辦,這個我就不給與回答,你自己動動小腦袋去想,哈哈!還有,token不要總是去調,要緩存起來,每次用戶登錄,你要延遲這個token的時間,博主我是知道怎麼做,就是懶,到時候如果需要用到,我再花幾分鐘改改代碼。

開始寫代碼了!

首先,寫一個WxConfig類,把你的配置寫好,我公開下我的


    //微信二維碼
    public static  final String WX_OA_CODE = "https://open.weixin.qq.com/connect/qrconnect?";

    //微信二維碼回調地址
    public static  final String REDIRECT_URL = "http://127.0.0.1:8888/v1/b/user/wx_login";

    //微信網站應用
    public static final String APPID="1";
    public  static final String APPSERCRET="2";

http請求

/**
* dapeng
*/
public class Httprequests {
	public static String  sendGet (String url,String param) {
        String result ="";
        BufferedReader in  =null;
        try {
            String urlNameString = url +"?" +param;
            System.out.println("發送的鏈接請求:"+urlNameString);
            URL reaurl = new URL(urlNameString);

            URLConnection connection  = reaurl.openConnection();

            //設置通用
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

            //建立實際的連接
            connection.connect();

            Map<String, List<String>> map = connection.getHeaderFields();
            //定義 BufferedReader輸入流來讀取URL的響應
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("發送GET請求出現異常!" + e);
            e.printStackTrace();
        }
        // 使用finally塊來關閉輸入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }


    /**
     * 向指定 URL 發送POST方法的請求
     * @param url 發送請求的 URL
     * @param param 參數
     * @return String 所代表遠程資源的響應結果
     */
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打開和URL之間的連接
            URLConnection conn = realUrl.openConnection();
            // 設置通用的請求屬性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 發送POST請求必須設置如下兩行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 獲取URLConnection對象對應的輸出流
            out = new PrintWriter(conn.getOutputStream());

            // 發送請求參數
            out.print(param);
            // flush輸出流的緩衝
            out.flush();
            // 定義BufferedReader輸入流來讀取URL的響應
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("發送 POST 請求出現異常!"+e);
            e.printStackTrace();
        }
        //使用finally塊來關閉輸出流、輸入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result;
    }
}

service層

  /**
     * 微信登錄 - 二維碼
     * @param request
     */
    void getCode(HttpServletRequest request);

    /**
     * 微信登錄
     * @param request
     */
    OrgSessionEntity wxLogin(HttpServletRequest request);

impl層

/**
* dapeng
*/
@Override
    public void getCode(HttpServletRequest request) {
        String state = UUID.randomUUID().toString().replaceAll("_","");
        RedisUtil.setex("wx_open_state" + request.getSession().getId(), state,600);
        StringBuilder url = new StringBuilder();
        url.append(WxConfigVar.WX_OA_CODE);
        url.append("appid=" + WxConfigVar.APPID);
        url.append("&redirect_uri=" + URLEncoder.encode(WxConfigVar.REDIRECT_URL));
        url.append("&response_type=code");
        url.append("&scope=snsapi_login");
        url.append("&state=" + state + "#wechat_redirect");
        //打印路徑
        System.out.println(url);
        Httprequests.sendGet(url.toString(), "");
    }
	
	 @Override
    public OrgSessionEntity wxLogin(HttpServletRequest request) {
        String code = request.getParameter("code");
        String state = request.getParameter("state");
        String stateStr = RedisUtil.get("wx_open_state"+ request.getSession().getId());
        if(state.equals(stateStr) || StringUtils.isEmpty(state)){
            throw new WxUserException(ErrorCodeEnum.WX_PARAMETER_NON_HAIR.code(),ErrorCodeEnum.WX_PARAMETER_NON_HAIR.msg());
        }
        //用戶授權成功
        if(StringUtils.isNotEmpty(code)){
            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+WxConfigVar.APPID +"&secret="+WxConfigVar.APPSERCRET+"&code="+code+"&grant_type=authorization_code";
            String urln = Httprequests.sendGet(url,"");

            System.out.println(urln);

            JSONObject jsonObject = JSONObject.parseObject(urln);
            String openid = jsonObject.getString("openid");
          	//已經拿到了openid了,開心起來吧!
        }else {
            throw new WxUserException(ErrorCodeEnum.WX_PARAMETER_NULL.code(),ErrorCodeEnum.WX_PARAMETER_NULL.msg());
        }
    }

OK了,就網站微信登錄就完成了,是不是很簡單,半小時就做好了,如果你的領導給你3天時間做個微信登錄,那你就有2天半的時間去學習,去逛貼吧了,美滋滋哈!!!

發佈了70 篇原創文章 · 獲贊 16 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章