Android 微信套餐之绑定微信

本文详细解析了微信登录与微信账号绑定的过程,包括代码实现、状态值区分、回调处理及配置步骤,帮助开发者掌握微信SDK集成技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

绑定微信和微信登录其实都是一样的 

绑定微信登录后 获取的是用户的信息

没有绑定微信的情况下获取的微信的信息

看看下面微信登录和微信绑定的代码

//微信登录
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" />

 大功告成.....(不理解的请留言)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值