android之微信最新版的sdk接入微信授权登陆和数据回调

来源:互联网 发布:网络拓扑结构及配置 编辑:程序博客网 时间:2024/04/29 11:36

微信授权登陆和数据回调

本人用的是最新版的sdk,开发工具是Eclipse(因为现在很多人都是用的AndroidStudio,所以Eclipse的例子会越来越少。其实两者用法大同小异。)。

  • 首先申请appID,AppSeort等(这个很简单,开发者应该都知道)

  • 接入sdk,先去注册微信

private IWXAPI api;/** *在onCreate()方法里 */api = WXAPIFactory.createWXAPI(this, WXConstants.APP_ID,true);//注册微信api.registerApp(WXConstants.APP_ID); 
  • 发送微信授权登陆请求
    踩坑经验:
    ————-请注意你的开发者资格认证是否通过,若不通过则会出现一下情况:

    开发者资格认证没有通过

       //发起登录请求        SendAuth.Req req = new SendAuth.Req();        // 外部应用请求的权限范围        req.scope = "snsapi_userinfo";        //外部应用本身用来标识其请求的唯一性,验证完成后,将由微信终端回传,        req.state = "wechat_sdk_demo_test";        api.sendReq(req);
  • 进行回调
    在WXEntryActivity的onResp(BaseResp arg0)方法中进行回调,会得到一个code.通过这个code调用一个接口获取到access_token和OpenID的值,之后再通过access_token以及openID调用获取用户信息的接口-来获取用户的数据
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法    @Override    public void onResp(BaseResp resp) {        Log.i("TAG-02", "微信分享的第二个回调");        int result = 0;        switch (resp.errCode) {        case BaseResp.ErrCode.ERR_OK://成功            /**             *  微信登陆             */            if (resp instanceof SendAuth.Resp) {                // 获取code                 String code = ((SendAuth.Resp) resp).code;                 // 通过code获取授权口令access_token                 requestOpenId(code);            }            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;        }        finish();    }    /**     *  开辟子线程     * @param token     */    private void requestOpenId(final String code) {        // 开启线程来发起网络请求        new Thread(new Runnable() {            @Override            public void run() {                    String urlstr = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+WXConstants.APP_ID                            +"&secret="+WXConstants.App_Scere                            + "&code="+code                            +"&grant_type=authorization_code" ;                    //获取 网上 数据                    String httpUrl = WXConstants.httpUrl(urlstr);                    // Json                    JSONObject jsObj;                    try {                        jsObj = new JSONObject(httpUrl);    //获取到   openid    String opendId = jsObj.getString("openid").toString().trim();    //获取到  access_token    String access_token  =  jsObj.getString("access_token").toString().trim();                        /**                         *  用openid和access_token获取  用户信息                         */                        getUserInfo(opendId,access_token);                    } catch (JSONException e) {                        e.printStackTrace();                    }            }        }).start();        /**     *  用于  获取  用户  信息     * @param opendId     * @param access_token     */    private void getUserInfo(String opendId, String access_token) {        String path = "https://api.weixin.qq.com/sns/userinfo?access_token="                            + access_token                            + "&openid="                            + opendId;        //用户信息        String httpUrl = WXConstants.httpUrl(path);    }
  • 上边这样就可以授权登陆和获取用户信息了,快试试吧,童鞋们!!!

福利送给你们:
——————WXConstantts.httpUrl();

public class WXConstants {    // APP_ID 替换为你的应用从官方网站申请到的合法appId    public static String APP_ID = "";      // APP_ID 替换为你的应用从官方网站申请到的合法appScope    public static String App_Scere =  "";    public static String httpUrl(String path){        String jsonStr = null ;        HttpURLConnection connection = null;        try {               // 获得URL对象            URL url = new URL(path);            // 获得HttpURLConnection对象            connection = (HttpURLConnection) url.openConnection();            // 默认为GET请求            connection.setRequestMethod("GET");            // 设置 链接 超时时间            connection.setConnectTimeout(5000);            // 设置 读取 超时时间            connection.setReadTimeout(8000);            // 设置是否从HttpURLConnection读入,默认为true            connection.setDoInput(true);            connection.setDoOutput(true);            // 请求相应码是否为200(OK)            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {                // 下面对获取到的输入流进行读取                InputStream in   = connection.getInputStream();                BufferedReader reader   = new BufferedReader(new InputStreamReader(in));                StringBuilder response  = new StringBuilder();                String line;                while ((line = reader.readLine()) != null) {                    response.append(line);                }                jsonStr = response.toString();            }         } catch (Exception e) {            e.printStackTrace();        } finally {            // 关闭连接            if (connection != null) {                connection.disconnect();            }        }        return jsonStr;    }}
阅读全文
1 0
原创粉丝点击