绑定微信和微信登录其实都是一样的
绑定微信登录后 获取的是用户的信息
没有绑定微信的情况下获取的微信的信息
看看下面微信登录和微信绑定的代码
//微信登录 if (!mWxApi.isWXAppInstalled()) { Toast.makeText(context, "您还没有安装微信哦~", Toast.LENGTH_SHORT).show(); } else { final SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "wechat_sdk_login"; mWxApi.sendReq(req); }
//绑定微信 @Override public void onClick(View view) { SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "wechat_sdk_bind"; App.mWxApi.sendReq(req); }
聪明的你一定发现的不一样的地方
对,没错,(req.state =)就是这个地方 这个是一状态值 用来区分是微信登录还是微信绑定
接下来就是这个微信的回调类里面的处理
public class WXEntryActivity extends Activity implements IWXAPIEventHandler { private static final int RETURN_MSG_TYPE_LOGIN = 1; private static final int RETURN_MSG_TYPE_SHARE = 2; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //如果没回调onResp,八成是这句没有写 App.mWxApi.handleIntent(getIntent(), this); } // 微信发送请求到第三方应用时,会回调到该方法 @Override public void onReq(BaseReq req) { } // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法 //app发送消息给微信,处理返回消息的回调 @Override public void onResp(BaseResp resp) { Log.d("WXEntryActivity", "错误码 : " + resp.errCode + ""); switch (resp.errCode) { case BaseResp.ErrCode.ERR_AUTH_DENIED: case BaseResp.ErrCode.ERR_USER_CANCEL: if (RETURN_MSG_TYPE_LOGIN == resp.getType()) { Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show(); } if (RETURN_MSG_TYPE_SHARE == resp.getType()) { Toast.makeText(this, "分享失败", Toast.LENGTH_SHORT).show(); } break; case BaseResp.ErrCode.ERR_OK: switch (resp.getType()) { case RETURN_MSG_TYPE_LOGIN: //拿到了微信返回的code,立马再去请求access_token String code = ((SendAuth.Resp) resp).code; Toast.makeText(this, ""+code, Toast.LENGTH_SHORT).show(); //这里判断类型是微信登录还是绑定微信账号 String state = ((SendAuth.Resp) resp).state; //判断是绑定微信账号 if (state.equals("wechat_sdk_bind")) { /* * 绑定微信 * */ doBindWxHttp(code); } else { /* * 微信登录 获取用户信息 **/ getAccessToken(code); } break; case RETURN_MSG_TYPE_SHARE: Toast.makeText(this, "微信分享成功", Toast.LENGTH_SHORT).show(); finish(); break; } break; } //支付成功 if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("支付结果"); builder.setMessage(resp.errCode + ""); builder.show(); // Log.d("info", "onPayFinish,errCode=" + resp.errCode); // if (resp.errCode == 0) { // SharedPreUtils.put(this,"success",0); // Toast.makeText(this, "支付成功", Toast.LENGTH_SHORT).show(); // Intent intent = new Intent("ACTION_PAY"); // sendBroadcast(intent); // this.finish(); // } else if (resp.errCode == -1) { // Toast.makeText(this, "配置错误", Toast.LENGTH_SHORT).show(); // this.finish(); // } else if (resp.errCode == -2) { // Toast.makeText(this, "用户取消", Toast.LENGTH_SHORT).show(); // this.finish(); // } // }else { // Toast.makeText(this, resp.errStr, Toast.LENGTH_SHORT).show(); // } } } private void getAccessToken(String code) { Map<String, String> map = new HashMap<>(); map.put("code", code); new HttpHelper(this).post("/techApi/user/v1/weChatLogin",map,null,false,false).result(new HttpListener() { @Override public void success(String data) { if (data != null){ Toast.makeText(WXEntryActivity.this, ""+data, Toast.LENGTH_SHORT).show(); Log.i("TAG","WxBind"+data); LoginEntity loginEntity = new Gson().fromJson(data, LoginEntity.class); LoginEntity.ResultBean result = loginEntity.getResult(); String nickName = result.getNickName(); String headPic = result.getHeadPic(); int userId = result.getUserId(); String sessionId = result.getSessionId(); SharedPreUtils.put(WXEntryActivity.this, "nickName", nickName); SharedPreUtils.put(WXEntryActivity.this, "headPic", headPic); SharedPreUtils.put(WXEntryActivity.this, "userId", userId); SharedPreUtils.put(WXEntryActivity.this, "sessionId", sessionId); SharedPreUtils.put(WXEntryActivity.this,"SUCCESSUP",true); SharedPreUtils.put(WXEntryActivity.this, "isLogin", true); Toast.makeText(WXEntryActivity.this, ""+nickName, Toast.LENGTH_SHORT).show(); Toast.makeText(WXEntryActivity.this, ""+headPic, Toast.LENGTH_SHORT).show(); Toast.makeText(WXEntryActivity.this, ""+userId, Toast.LENGTH_SHORT).show(); Toast.makeText(WXEntryActivity.this, ""+sessionId, Toast.LENGTH_SHORT).show(); startActivity(new Intent(WXEntryActivity.this, MainActivity.class)); finish(); } } @Override public void fail(String error) { } }); } //绑定微信账号 private void doBindWxHttp(String code) { Map<String, String> map = new HashMap<>(); map.put("code", code); new HttpHelper(this).post("/techApi/user/verify/v1/bindWeChat", map, null, false, false).result(new HttpListener() { @Override public void success(String data) { SignEntity signEntity = new Gson().fromJson(data, SignEntity.class); if (signEntity.getStatus().equals("0000")) { Toast.makeText(WXEntryActivity.this, "" + data, Toast.LENGTH_SHORT).show(); //绑定完微信进行做任务 doTaskHttp(); finish(); } else { Toast.makeText(WXEntryActivity.this, "绑定失败", Toast.LENGTH_SHORT).show(); finish(); } } @Override public void fail(String error) { } }); } //绑定完微信进行做任务 private void doTaskHttp() { Map<String, String> map = new HashMap<>(); map.put("taskId", 1007+"" ); new HttpHelper(this).post("techApi/user/verify/v1/doTheTask", map, null, false, false).result(new HttpListener() { @Override public void success(String data) { SignEntity signEntity = new Gson().fromJson(data, SignEntity.class); String status = signEntity.getStatus(); if (status.equals("0000")) { Toast.makeText(WXEntryActivity.this, "做任务成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(WXEntryActivity.this, "做任务失败", Toast.LENGTH_SHORT).show(); } } @Override public void fail(String error) { } }); } }
我们在微信拉起成功之后返回到了(case BaseResp.ErrCode.ERR_OK:) 这里
在这里我们获取code值 然后获取状态值也就是上面所说的看看究竟是微信登录和绑定微信
String state = ((SendAuth.Resp) resp).state;
获取state值之后判断是登录还是绑定
if (state.equals("wechat_sdk_bind")) {
/* * 绑定微信 * */
doBindWxHttp(code);
} else {
/* * 微信登录 获取用户信息 **/
getAccessToken(code);
}
判断完去执行该执行的方法就可以了
具体的话就说一下配置吧
第一步:导入微信的依赖
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
第二步:App下进行初始化和注册(APPID的话自己申请)
mWxApi = WXAPIFactory.createWXAPI(this, "wx4c96b6b8da494224", false); // 将该app注册到微信 mWxApi.registerApp("wx4c96b6b8da494224");
第三步:创建微信回调的包(一定要在app下创建包名)(包名一定要一致)
wxapi
第四步:创建微信的回调类(在wxapi包下创建)(类名一定要一致)
WXEntryActivity
第五步:清单文件进行注册
<activity android:name=".wxapi.WXEntryActivity" //这一行一定要加 android:exported="true" />
大功告成.....(不理解的请留言)