/**
* 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() {
}
});
}
}