客户端集成微信登录
1.WXEntryActivity
public class WXEntryActivity extends WeCareActivity implements IWXAPIEventHandler {
// IWXAPI 是第三方app和微信通信的openapi接口
private static IWXAPI api;
public final static String WX_APP_ID = "wx55bdf002ebc4e7d7";
public final static String WX_APP_SECRET = "ccd9bd049967d8ff017ae751f8597fb5";
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
api = WXAPIFactory.createWXAPI(this, WX_APP_ID, false);
api.registerApp(WX_APP_ID);
api.handleIntent(getIntent(), this);
}
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Override
public void onReq(BaseReq req) {
Logger.v("WXEntryActivity onReq", "is work resp:" + new Gson().toJson(req));
switch (req.getType()) {
case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
break;
case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
break;
default:
break;
}
finish();
}
@Override
public void onResp(BaseResp resp) {
Logger.v("WXEntryActivity onResp", "is work resp:" + new Gson().toJson(resp));
int result = 0;
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK://获取成功
result = R.string.errcode_success;
SendAuth.Resp resp1 = (SendAuth.Resp) resp;//这里做一下转型就是
// getUserInfo(r.code);
EventBus.getDefault().post(resp1);
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;
case BaseResp.ErrCode.ERR_UNSUPPORT:
result = R.string.errcode_unsupported;
break;
default:
result = R.string.errcode_unknown;
break;
}
// Toast.makeText(this, result, Toast.LENGTH_LONG).show();
finish();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
api.handleIntent(data, this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
finish();
}
}
-
请求登录
IWXAPI api = WXAPIFactory.createWXAPI(this, WXEntryActivity.WX_APP_ID,false);
if (!api.isWXAppInstalled()) {
//提醒用户没有按照微信
ToastUtil.show(this,"请先安装微信客户端");
return;
}
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_login";
api.sendReq(req);
-
WXEntryActivity回调
@Override
public void onResp(BaseResp resp) {
Logger.v("WXEntryActivity onResp", "is work resp:" + new Gson().toJson(resp));
int result = 0;
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK://获取成功
result = R.string.errcode_success;
SendAuth.Resp resp1 = (SendAuth.Resp) resp;//这里做一下转型就是
// getUserInfo(r.code);
EventBus.getDefault().post(resp1);//抛出回调结果到登录界面去
break;
}
finish();
}
4.请求token并请求用户数据
public void getWXUserInfo(final Context context, String code) {
getSSHClient(context).getWXToken(WXEntryActivity.WX_APP_ID, WXEntryActivity.WX_APP_SECRET, code, "authorization_code")
.flatMap(new Func1<GetWXTokenResp, Observable<GetWxUserInfoResp>>() {
@Override
public Observable<GetWxUserInfoResp> call(GetWXTokenResp resp) {
Logger.v(TAG , "getWXUserInfo is work resp:" + new Gson().toJson(resp));
return getSSHClient(context).getWxUserInfo(resp.getAccess_token(), resp.getOpenid());
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<GetWxUserInfoResp>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Logger.v(TAG , "getWXUserInfo onError msg:" + e.getMessage());
}
@Override
public void onNext(GetWxUserInfoResp resp) {
Logger.v(TAG , "getWXUserInfo onNext msg:" + new Gson().toJson(resp));
postEvent(resp);
}
});
}
-
LoginActivity回调得到用户数据
@Override
public void onEventMainThread(Object event) {
super.onEventMainThread(event);
if(event instanceof SendAuth.Resp){
SendAuth.Resp resp = (SendAuth.Resp) event;
//根据请求WXEntryActivity回调结果请求用户数据
HttpImpl.getInstance().getWXUserInfo(this, resp.code);
}
if(event instanceof GetWxUserInfoResp){
GetWxUserInfoResp resp = (GetWxUserInfoResp) event;
if(!TextUtils.isEmpty(resp.getOpenid())){//如果openid不为空,则表示登录成功
ToastUtil.showShort(this,"微信登录成功!");
platForm = AppConstants.PLATFORM_WX;
secret_msg = resp.getUnionid();
aliasName = resp.getNickname();
isBindAccount(secret_msg,platForm);
}
}
}
1万+

被折叠的 条评论
为什么被折叠?



