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

微信授权登陆和数据回调

本人用的是最新版的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;

    }
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页