使用微信授權(quán)登錄第三方應(yīng)用

優(yōu)勢(shì):

    通過(guò)微信授權(quán)來(lái)登錄APP眠屎,有以下優(yōu)勢(shì):

    1.簡(jiǎn)化賬戶注冊(cè)過(guò)程剔交;

    2.可以獲取到微信用戶的好友關(guān)系,來(lái)增強(qiáng)APP自身的社交功能改衩;

整體流程:

  1.客戶端發(fā)送登錄請(qǐng)求至微信岖常;

  2.用戶在微信上選擇是否同意授權(quán)登錄;

  3.若是同意授權(quán)葫督,客戶端開(kāi)始向授權(quán)服務(wù)器獲取授權(quán)碼竭鞍;

  4.授權(quán)碼獲取成功之后,通過(guò)授權(quán)碼向微信獲取用戶信息橄镜。
image

一偎快、請(qǐng)求認(rèn)證:

if (api.isWXAppInstalled()) 
{

      final SendAuth.Req req =new SendAuth.Req();

      req.scope ="snsapi_userinfo";

      req.state ="wechat_sdk_demo_test";

      api.sendReq(req);

}  else {

      showToast("請(qǐng)先安裝微信");

}

用這段代碼向微信開(kāi)放平臺(tái)請(qǐng)求授權(quán)碼code,可拉起微信并打開(kāi)授權(quán)登錄頁(yè)(前提是你安裝了微信應(yīng)用并已登錄,未登錄的會(huì)引導(dǎo)你先登錄)

二、用戶同意,返回code:

在你的包名相應(yīng)目錄下新建一個(gè)wxapi目錄紧唱,并在該wxapi目錄下新增一個(gè)WXEntryActivity類哥牍,該類繼承自Activity,

@Override
public void onResp(BaseResp resp) 
{
            int errorCode = resp.errCode;
            switch (errorCode) 
            {
            case BaseResp.ErrCode.ERR_OK:
                //用戶同意煞抬,拿到code
                    String code = ((SendAuth.Resp) resp).code;
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                    //用戶拒絕
                 break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                    //用戶取消
                    break;
            default:
                    break;
            }
}

三泌类、利用code獲取access token:

  private void getAccess_token(final String code)
  {
        String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
                + WxData.WEIXIN_APP_ID
                + "&secret="
                + WxData.APP_SECRET
                + "&code="
                + code
                + "&grant_type=authorization_code";

        OkHttpUtils.get().url(path).build().execute(new StringCallback() 
        {

            @Override
            public void onError(okhttp3.Call call, Exception e) {

            }

            @Override
            public void onResponse(String response) 
            {
                JSONObject jsonObject = null;
                try {
                    jsonObject = new JSONObject(response);
                    String openid = jsonObject.getString("openid").toString().trim();
                    // access_token就是授權(quán)碼
                    String access_token =               
                    jsonObject.getString("access_token").toString().trim();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

 }

WxData.WEIXIN_APP_ID和WxData.APP_SECRET就是你在微信開(kāi)放者平臺(tái)創(chuàng)建應(yīng)用時(shí)給你的缅刽。

四读跷、利用access token獲取用戶信息:

   private void getUserInfo(final String access_token, final String openid) 
   {
        String path = "https://api.weixin.qq.com/sns/userinfo?access_token="
                + access_token
                + "&openid="
                + openid;


        OkHttpUtils.get().url(path).build().execute(new StringCallback() 
        {


            @Override
            public void onError(okhttp3.Call call, Exception e) {

            }

            @Override
            public void onResponse(String response) 
            {
                JSONObject jsonObject = null;
                try {
                    jsonObject = new JSONObject(response);
                    String nickname = jsonObject.getString("nickname");
                    int sex = Integer.parseInt(jsonObject.get("sex").toString());
                    String headimgurl = jsonObject.getString("headimgurl");
                    String openid1 = jsonObject.getString("openid")梗搅;
                    imageUrl(headimgurl); // 顯示圖片
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

    }

  private void imageUrl(final String url) 
  {
        new Thread(new Runnable() 
        {
            @Override
            public void run() 
            {
                try {
                    URL url1 = new URL(url);
                    HttpURLConnection urlConnection = (HttpURLConnection)       
                    url1.openConnection();
                    urlConnection.setRequestMethod("GET");
                    urlConnection.setReadTimeout(2000);
                    int responseCode = urlConnection.getResponseCode();

                    if (responseCode == 200) {
                        InputStream inputStream = urlConnection.getInputStream();

                        final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

                        // 這個(gè)post一般用來(lái)更新UI用,post將一個(gè)Runnable對(duì)象到 消息隊(duì)列
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                imageView.setImageBitmap(bitmap); // UI顯示
                            }
                        });
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末效览,一起剝皮案震驚了整個(gè)濱河市无切,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钦铺,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肢预,死亡現(xiàn)場(chǎng)離奇詭異矛洞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)烫映,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)沼本,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人锭沟,你說(shuō)我怎么就攤上這事抽兆。” “怎么了族淮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵辫红,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我祝辣,道長(zhǎng)贴妻,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任蝙斜,我火速辦了婚禮名惩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘孕荠。我一直安慰自己娩鹉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布稚伍。 她就那樣靜靜地躺著弯予,像睡著了一般。 火紅的嫁衣襯著肌膚如雪个曙。 梳的紋絲不亂的頭發(fā)上熙涤,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼祠挫。 笑死那槽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的等舔。 我是一名探鬼主播骚灸,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼慌植!你這毒婦竟也來(lái)了甚牲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蝶柿,失蹤者是張志新(化名)和其女友劉穎丈钙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體交汤,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雏赦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芙扎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片星岗。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖戒洼,靈堂內(nèi)的尸體忽然破棺而出俏橘,到底是詐尸還是另有隱情,我是刑警寧澤圈浇,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布寥掐,位于F島的核電站,受9級(jí)特大地震影響磷蜀,放射性物質(zhì)發(fā)生泄漏曹仗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一蠕搜、第九天 我趴在偏房一處隱蔽的房頂上張望怎茫。 院中可真熱鬧,春花似錦妓灌、人聲如沸轨蛤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)祥山。三九已至,卻和暖如春掉伏,著一層夾襖步出監(jiān)牢的瞬間缝呕,已是汗流浹背澳窑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留供常,地道東北人摊聋。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像栈暇,于是被迫代替她去往敵國(guó)和親麻裁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容