美文网首页
使用微信授权登录第三方应用

使用微信授权登录第三方应用

作者: 钰兄 | 来源:发表于2019-02-13 15:34 被阅读0次

    优势:

        通过微信授权来登录APP,有以下优势:
    
        1.简化账户注册过程;
    
        2.可以获取到微信用户的好友关系,来增强APP自身的社交功能;
    

    整体流程:

      1.客户端发送登录请求至微信;
    
      2.用户在微信上选择是否同意授权登录;
    
      3.若是同意授权,客户端开始向授权服务器获取授权码;
    
      4.授权码获取成功之后,通过授权码向微信获取用户信息。
    
    image

    一、请求认证:

    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("请先安装微信");
    
    }
    

    用这段代码向微信开放平台请求授权码code,可拉起微信并打开授权登录页(前提是你安装了微信应用并已登录,未登录的会引导你先登录)

    二、用户同意,返回code:

    在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个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就是授权码
                        String access_token =               
                        jsonObject.getString("access_token").toString().trim();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
    
     }
    

    WxData.WEIXIN_APP_ID和WxData.APP_SECRET就是你在微信开放者平台创建应用时给你的。

    四、利用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);
    
                            // 这个post一般用来更新UI用,post将一个Runnable对象到 消息队列
                            handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    imageView.setImageBitmap(bitmap); // UI显示
                                }
                            });
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    
    

    相关文章

      网友评论

          本文标题:使用微信授权登录第三方应用

          本文链接:https://www.haomeiwen.com/subject/umddeqtx.html