android微信登录,安卓 集成微信(一)实现微信登录详解

/**

* Created by dell on 2017/5/22.

* 集成微信sdk的接口

*/

public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {

public static final String APP_ID = "wx93f1eefd0bfa2c33";// 申请的appid

private IWXAPI api; // IWXAPI 是第三方app和微信通信的openapi接口

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_wxentry);

//注册api

api = WXAPIFactory.createWXAPI(this, APP_ID);

api.handleIntent(getIntent(), this);

}

@Override

public void onReq(BaseReq baseReq) {

}

/**

* 发送微信授权请求的响应结果

* @param baseResp

*/

@Override

public void onResp(BaseResp baseResp) {

switch (baseResp.errCode) {

//如果errcode为零,表示用户同意授权

case BaseResp.ErrCode.ERR_OK:

// 得到所需的code

//此处报错检查下载的sdk是否正确

String code = ((SendAuth.Resp) baseResp).code;

Log.i("wxentry","code = "+code);

// 获取code之后携带参数获取用户信息

getToken(code);

break;

default:

break;

}

}

/**

* 携带参数获取用户信息

* @param code

*/

private void getToken(String code) {

//调用官方给的接口获取openid

RequestParams params = new RequestParams(Httpurl.OAUTH);

params.addQueryStringParameter("appid", APP_ID);

//审核通过后生成appsecret码

params.addQueryStringParameter("secret", "981cdce516eda3e1d8404bb83a068a85");

params.addQueryStringParameter("code", code);

params.addQueryStringParameter("grant_type", "authorization_code");//固定写法

x.http().get(params, new Callback.CommonCallback() {

@Override

public void onSuccess(String result) {

String access_token = "";//接口调用凭证。

String expires_in = "";//接口调用凭证超时时间,单位(秒)。

String refresh_token = "";//用户刷新access_token。

String openid = "";//授权用户唯一标识。

String scope = "";//用户授权的作用域,使用逗号(,)分隔

String unionid = "";//当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。

// 解析数据,获取用户信息

try {

JSONObject job = new JSONObject(result);

access_token = job.getString("access_token");

expires_in = job.getString("expires_in");

refresh_token = job.getString("refresh_token");

openid = job.getString("openid");

scope = job.getString("scope");

unionid = job.getString("unionid");

} catch (JSONException e) {

e.printStackTrace();

}

// 判断openid是否为空

if (!openid.equals("")) {

Log.i("wxentry", access_token + "---" + openid + "---" + expires_in + "---" + refresh_token + "---" + scope + "---" + unionid);

//这个位置调用后台给的登录接口,别忘了登录成功之后finish()当前activity,不然会停留在空白页

//传参给后台,获取返回的token,UID并保存

setLogin(access_token, openid);

} else {

Log.i("wxentry","检查appsecret码是否重置");

//销毁界面

finish();

}

}

@Override

public void onError(Throwable ex, boolean isOnCallback) {

}

@Override

public void onCancelled(CancelledException cex) {

}

@Override

public void onFinished() {

}

});

}

/**

* 授权成功,获取用户信息

* @param access_token

* @param openid

*/

private void setLogin(String access_token, String openid) {

//调用官方给的接口获取用户信息

RequestParams params = new RequestParams(Httpurl.USERINFO);

params.addBodyParameter("access_token",access_token);

params.addBodyParameter("openid",openid);

x.http().get(params, new Callback.CommonCallback() {

@Override

public void onSuccess(String result) {

String openid = "";

String nickname = "";//昵称

String headimgurl = "";//头像路径

try {

JSONObject object = new JSONObject(result);

openid = object.getString("openid");

nickname = object.getString("nickname");

headimgurl = object.getString("headimgurl");

} catch (JSONException e) {

e.printStackTrace();

}

// 执行联网方法,将数据传给服务器

skip(openid,nickname,headimgurl);

}

@Override

public void onError(Throwable ex, boolean isOnCallback) {

}

@Override

public void onCancelled(CancelledException cex) {

}

@Override

public void onFinished() {

}

});

}

/**

* 联网上传用户信息

*/

private void skip(String openid, String nickname, String headimgurl) {

//调用后台给的三方登陆的接口,上传用户信息,并获取token保存,销毁界面

RequestParams params = new RequestParams(Httpurl.THIRDLOGIN);

params.addBodyParameter("openid",openid);

params.addBodyParameter("nickname",nickname);

params.addBodyParameter("head_pic",headimgurl);

params.addBodyParameter("oauth","wx");

Log.i("wxtntry","openid:"+openid+" nickname:"+nickname+" headimgurl:"+headimgurl);

x.http().post(params, new Callback.CommonCallback() {

@Override

public void onSuccess(String result) {

try {

Log.i("wxentry","result"+result);

JSONObject object = new JSONObject(result);

// 如果获取成功

if (object.getInt("status") == 1){

JSONObject data = object.getJSONObject("result");

String token = data.getString("token");

//偏好设置保存user_id

SharedPreferences.Editor editor =

getSharedPreferences("user",MODE_PRIVATE).edit();//文件名为user

editor.putString("token",token);

editor.apply();//提交

// 第一次登录需要给Application赋值

MyApplication.token = token;

Toast.makeText(WXEntryActivity.this,object.getString("msg"),Toast.LENGTH_SHORT).show();

//跳转界面

startActivity(new Intent(WXEntryActivity.this,MainActivity.class));

//销毁当前Activity

finish();

}else {

Toast.makeText(WXEntryActivity.this,"请检查您的网络",Toast.LENGTH_SHORT).show();

}

} catch (JSONException e) {

e.printStackTrace();

}

}

@Override

public void onError(Throwable ex, boolean isOnCallback) {

}

@Override

public void onCancelled(CancelledException cex) {

}

@Override

public void onFinished() {

}

});

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值