安卓微信第三方登陆

在微信开放平台注册应用后拿到APPID与Appsecret
官方地址:https://open.weixin.qq.com

1、添加依赖

{
  api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}

2、添加权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

3、将应用程序注册到微信

public class Application extends android.app.Application {

    private IWXAPI api;

    @Override
    public void onCreate() {
        super.onCreate();
        api = WXAPIFactory.createWXAPI(this, Constant.WX_APPID, false);
        api.registerApp(Constant.WX_APPID);
    }
}

4、请求code

    private void getWeChatCode() {
        if (api == null) {
            api = WXAPIFactory.createWXAPI(this, Constant.WX_APPID, false);
        }
        if (!api.isWXAppInstalled()) {
            Toast.makeText(MainActivity.this, "请先安装微信客户端", Toast.LENGTH_SHORT).show();
        } else {
            SendAuth.Req req = new SendAuth.Req();
            req.scope = "snsapi_userinfo";
            req.state = "wechat_test_state";
            api.sendReq(req);
        }
    }

5、创建wxapi包并在包下创建WXEntryActivity类实现IWXAPIEventHandler接口


public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {

    private IWXAPI api;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        api = WXAPIFactory.createWXAPI(this, Constant.WX_APPID, false);
        api.handleIntent(getIntent(), this);
    }


    @Override
    public void onReq(BaseReq baseReq) {

    }

    @Override
    public void onResp(BaseResp baseResp) {
        switch (baseResp.errCode) {
            //成功
            case BaseResp.ErrCode.ERR_OK:
                String code = ((SendAuth.Resp) baseResp).code;
                //通过code获取access_token
                getAccessToken(code);
                finish();
                break;

            //取消
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                finish();
                break;

            //拒绝授权
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                finish();
                break;

            default:
                finish();
                break;
        }
    }


    /*
    * https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
    * */

    private void getAccessToken(String code) {
        //拼接网络Url
        StringBuffer loginUrl = new StringBuffer();
        loginUrl.append("https://api.weixin.qq.com/sns/oauth2/access_token")
                .append("?appid=")
                .append(Constant.WX_APPID)//AppId
                .append("&secret=")
                .append(Constant.WX_APPSecret)//AppSecret
                .append("&code=")
                .append(code)
                .append("&grant_type=authorization_code");


        //网络请求成功之后返回数据
        String jsonData = response.body().string();
        try {
            JSONObject jsonObject = new JSONObject(jsonData);
            String access_token = jsonObject.getString("access_token");
            String openId = jsonObject.getString("openid");

            //获取用户个人信息
            getUserInfo(access_token, openId);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    
    
    /*
    * https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
    * */
    
	//获取用户个人信息
    private void getUserInfo(String access_token, String openid) {
        String getUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access + "&openid=" + openid;
        
        //网络请求成功之后返回数据
        String userData = response.body().string();
        //将数据存储到本地
        SpUtils.putString(WXEntryActivity.this,Constant.USER_INFO,userData);
    }
}

6、AndroidManifest添加

    <activity android:name=".wxapi.WXEntryActivity"
            android:exported="true"
            />

7、从本地读取用户信息

   @Override
    protected void onResume() {
        super.onResume();
        //从本地数据获取用户信息
        String userInfo = SpUtils.getString(MainActivity.this, Constant.USER_INFO, "");
        if (!TextUtils.isEmpty(userInfo)) {
            try {
                JSONObject jsonObject = new JSONObject(userInfo);
                String nickname = jsonObject.getString("nickname");
                String sex = jsonObject.getString("sex");
                String province = jsonObject.getString("province");
                String city = jsonObject.getString("city");
                String country = jsonObject.getString("country");
                String headimgurl = jsonObject.getString("headimgurl");
                String privilege = jsonObject.getString("privilege");
                String unionid = jsonObject.getString("unionid");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值