android 微信登录

来源:互联网 发布:ipad保护套 知乎 编辑:程序博客网 时间:2024/06/03 01:39



public class WXEntryActivity extends Activity implements IWXAPIEventHandler {    private static final String TAG = WXEntryActivity.class.getSimpleName();    // IWXAPI 是第三方app和微信通信的openapi接口    private IWXAPI api;//微信api对象    private String weixinCode;//token    private static String get_access_token = "";    // 获取第一步的code后,请求以下链接获取access_token    public static String GetCodeRequest = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";    //获取用户个人信息    public static String GetUserInfo="https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";    public static void startActivity(Context context, Bundle bundle) {        Intent intent = new Intent(context, WXEntryActivity.class);        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        intent.putExtras(bundle);        context.startActivity(intent);    }    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.entry);        // 通过WXAPIFactory工厂,获取IWXAPI的实例        api = WXAPIFactory.createWXAPI(this, Constants.WX_APP_ID, false);        api.registerApp(Constants.WX_APP_ID);        api.handleIntent(getIntent(), this);        WXLogin();    }    @Override    protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        setIntent(intent);        api.handleIntent(intent, this);        WXLogin();    }    // 微信发送请求到第三方应用时,会回调到该方法    @Override    public void onReq(BaseReq req) {        Log.d(TAG, "onReq ,req.getType=" + req.getType());        switch (req.getType()) {            case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:                break;            case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:                break;            default:                break;        }    }    // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法    @Override    public void onResp(BaseResp resp) {        Log.d(TAG, "onResp ,resp=" + resp);        int result = 0;        switch (resp.errCode) {            case BaseResp.ErrCode.ERR_OK:                result = R.string.errcode_success;                break;            case BaseResp.ErrCode.ERR_USER_CANCEL:                result = R.string.errcode_cancel;                break;            case BaseResp.ErrCode.ERR_AUTH_DENIED:                result = R.string.errcode_deny;                break;            default:                result = R.string.errcode_unknown;                break;        }        Toast.makeText(this, result, Toast.LENGTH_LONG).show();        requestToken(resp);    }    /**     * 登录微信     */    private void WXLogin() {        final SendAuth.Req req = new SendAuth.Req();        req.scope = "snsapi_userinfo";        req.state = "none";        api.sendReq(req);    }    private void requestToken(BaseResp resp)    {        if (resp.getType() == ConstantsAPI.COMMAND_SENDAUTH) {            // code返回            weixinCode = ((SendAuth.Resp)resp).token;            UpMiLog.d(TAG, "weixinCode or token=" + weixinCode);/* * 将你前面得到的AppID、AppSecret、code,拼接成URL */            Thread thread = null;            try            {                get_access_token = getCodeRequest(weixinCode);                thread=new Thread(downloadRun);                thread.start();            }catch (Exception e)            {                e.printStackTrace();            }            try {                thread.join();            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }    /**     * 获取access_token的URL(微信)     * @param code 授权时,微信回调给的     * @return URL     */    public static String getCodeRequest(String code) {        String result = null;        GetCodeRequest = GetCodeRequest.replace("APPID",                urlEnodeUTF8(Constants.WX_APP_ID));        GetCodeRequest = GetCodeRequest.replace("SECRET",                urlEnodeUTF8(Constants.WX_APP_SECRET));        GetCodeRequest = GetCodeRequest.replace("CODE",urlEnodeUTF8( code));        result = GetCodeRequest;        return result;    }    public static String urlEnodeUTF8(String str) {        String result = str;        try {            result = URLEncoder.encode(str, "UTF-8");        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    public  Runnable downloadRun = new Runnable() {        @Override        public void run() {            WXGetAccessToken();        }    };    /**     * 获取access_token等等的信息(微信)     */    private  void WXGetAccessToken(){        HttpClient get_access_token_httpClient = new DefaultHttpClient();        String access_token="";        String openid ="";        try {            HttpPost postMethod = new HttpPost(get_access_token);            HttpResponse response = get_access_token_httpClient.execute(postMethod); // 执行POST方法            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {                InputStream is = response.getEntity().getContent();                BufferedReader br = new BufferedReader(                        new InputStreamReader(is));                String str = "";                StringBuffer sb = new StringBuffer();                while ((str = br.readLine()) != null) {                    sb.append(str);                }                is.close();                String josn = sb.toString();                JSONObject json1 = new JSONObject(josn);                access_token = (String) json1.get("access_token");                openid = (String) json1.get("openid");                String get_user_info_url=getUserInfo(access_token,openid);                WXGetUserInfo(get_user_info_url);            } else {            }        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (ClientProtocolException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } catch (JSONException e) {            e.printStackTrace();        }    }    /**     * 获取用户个人信息的URL(微信)     * @param access_token 获取access_token时给的     * @param openid 获取access_token时给的     * @return URL     */    public static String getUserInfo(String access_token,String openid){        String result = null;        GetUserInfo = GetUserInfo.replace("ACCESS_TOKEN",                urlEnodeUTF8(access_token));        GetUserInfo = GetUserInfo.replace("OPENID",                urlEnodeUTF8(openid));        result = GetUserInfo;        return result;    }    /**     * 获取微信用户个人信息     * @param get_user_info_url 调用URL     */    private  void WXGetUserInfo(String get_user_info_url){        HttpClient get_access_token_httpClient = new DefaultHttpClient();        String openid="";        String nickname="";        String headimgurl="";        try {            HttpGet getMethod = new HttpGet(get_user_info_url);            HttpResponse response = get_access_token_httpClient.execute(getMethod); // 执行GET方法            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {                InputStream is = response.getEntity().getContent();                BufferedReader br = new BufferedReader(                        new InputStreamReader(is));                String str = "";                StringBuffer sb = new StringBuffer();                while ((str = br.readLine()) != null) {                    sb.append(str);                }                is.close();                String josn = sb.toString();                JSONObject json1 = new JSONObject(josn);                openid = (String) json1.get("openid");                nickname = (String) json1.get("nickname");                headimgurl=(String)json1.get("headimgurl");                UpMiLog.d(TAG,"openid=" + openid + " ,nickname=" + nickname + " ,headimgurl=" + headimgurl);            } else {                UpMiLog.d(TAG,"response.getStatusLine.getStatusCode not ok.");            }        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (ClientProtocolException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } catch (JSONException e) {            e.printStackTrace();        }    }}


0 0
原创粉丝点击