陈奇
2018-12-07 4203968ed148a7e56ab460c8d6edb744cb1645e4
app/src/main/java/com/moral/yunfushao/wxapi/WXEntryActivity.java
@@ -4,15 +4,16 @@
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.widget.Toast;
import com.lzy.okgo.cache.CacheMode;
import com.moral.andbrickslib.utils.GsonUtil;
import com.moral.yunfushao.MainActivity;
import com.moral.yunfushao.MainApp;
import com.moral.yunfushao.common.WXConstants;
import com.moral.yunfushao.httputils.HttpCallBack;
import com.moral.yunfushao.httputils.WXHttpUtil;
import com.moral.yunfushao.model.User;
import com.moral.yunfushao.utils.T;
import com.moral.yunfushao.wxapi.data.AccessTokenBean;
import com.moral.yunfushao.wxapi.data.WXUserBean;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
@@ -41,11 +42,13 @@
        super.onCreate(savedInstanceState);
        api = WXAPIFactory.createWXAPI(this, WXConstants.APP_ID, false);
        api.registerApp(WXConstants.APP_ID);
        onNewIntent(getIntent());
    }
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        System.out.println("chenqi onNewIntent");
        setIntent(intent);
        api.handleIntent(intent, this);
    }
@@ -57,6 +60,7 @@
                goToGetMsg();
                break;
            case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
                System.out.println("chenqi create WXEntryActivity COMMAND_SHOWMESSAGE_FROM_WX");
                goToShowMsg((ShowMessageFromWX.Req) baseReq);
                break;
            default:
@@ -67,9 +71,7 @@
    @Override
    public void onResp(BaseResp baseResp) {
        String result;
        Toast.makeText(this, "baseresp.getType = " + baseResp.getType(), Toast.LENGTH_SHORT).show();
        System.out.println("chenqi create WXEntryActivity  " + baseResp.errCode);
        switch (baseResp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
                code = ((SendAuth.Resp) baseResp).code;
@@ -87,28 +89,94 @@
                result = "不支持错误";
                break;
            default:
                result = "发送返回";
                result = "";
                break;
        }
        if (result.equals("")) {
            return;
        }
        T.show(result);
    }
        Toast.makeText(this, result, Toast.LENGTH_LONG).show();
    /**
     * 判断是否登陆有效
     */
    private void checkEffective(final String access_token, String openid) {
        String url = "https://api.weixin.qq.com/sns/auth?access_token=" + access_token + "&openid=" + openid;
        WXHttpUtil.doGet(url, CacheMode.DEFAULT, new HttpCallBack() {
            @Override
            public void onSuccess(String res, String msg) {
                AccessTokenBean accessTokenBean = GsonUtil.toObj(msg, AccessTokenBean.class);
                if (accessTokenBean.getErrcode() == 0) {
                    loginSuccess(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid());
                } else {
                    refreshToken(accessTokenBean.getRefresh_token());
                }
            }
            @Override
            public void showLoadingDialog() {
            }
            @Override
            public void onFail(int errno, String s) {
                loginFailed();
            }
        });
    }
    /**
     * 调用微信超时更新时间
     *
     * @param refresh_tocken
     */
    private void refreshToken(String refresh_tocken) {
        String url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + WXConstants.APP_ID + "&grant_type=refresh_token&refresh_token=" + refresh_tocken;
        WXHttpUtil.doGet(url, CacheMode.DEFAULT, new HttpCallBack() {
            @Override
            public void onSuccess(String res, String msg) {
                AccessTokenBean accessTokenBean = GsonUtil.toObj(msg, AccessTokenBean.class);
                if (accessTokenBean.getErrcode() == 40030) {
                    loginFailed();
                } else {
                    loginSuccess(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid());
                }
            }
            @Override
            public void showLoadingDialog() {
            }
            @Override
            public void onFail(int errno, String s) {
                loginFailed();
            }
        });
    }
    /**
     * 检查是否登陆失效
     */
    private void checkWXLogin() {
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid= " +
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +
                WXConstants.APP_ID +
                "&secret=" + "应用密钥" + "&code=" +
                "&secret=" + WXConstants.SECRET + "&code=" +
                WXEntryActivity.code +
                "&grant_type=authorization_code";
        WXHttpUtil.doGet(url, CacheMode.DEFAULT, new HttpCallBack() {
            @Override
            public void onSuccess(String res, String msg) {
                AccessTokenBean accessTokenBean = GsonUtil.toObj(msg, AccessTokenBean.class);
                if (accessTokenBean.getAccess_token() == null && accessTokenBean.getOpenid() == null)
                    getUserInfor(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid());
                if (accessTokenBean.getErrcode() == 40029) {
                    //登陆错误
                    loginFailed();
                    return;
                }
                if (accessTokenBean.getAccess_token() != null && accessTokenBean.getOpenid() != null) {
                    checkEffective(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid());
                }
            }
            @Override
@@ -118,6 +186,7 @@
            @Override
            public void onFail(int errno, String s) {
                loginFailed();
            }
        });
    }
@@ -138,8 +207,18 @@
            public void onSuccess(String res, String msg) {
                WXUserBean bean = new WXUserBean();
                User user = new User();
                user.set_id(bean.getOpenid());
                user.setNickname(bean.getNickname());
                if (bean.getErrcode() == 40003) {
                    MainApp.theApp.userId = "null";
                    user.set_id(bean.getOpenid());
                    user.setNickname(MainApp.theApp.userId);
                    user.setLogin_type(2);
                } else {
                    MainApp.theApp.userId = bean.getNickname();
                    user.set_id(bean.getOpenid());
                    user.setNickname(bean.getNickname());
                    user.setLogin_type(2);
                }
                MainApp.theApp.sharedPreferencesUtil.saveLoginInfo(user);
            }
            @Override
@@ -149,11 +228,30 @@
            @Override
            public void onFail(int errno, String s) {
                loginFailed();
            }
        });
    }
    private void loginFailed() {
        finish();
        T.show("登陆失败");
    }
    /**
     * 登陆成功
     *
     * @param strings
     */
    private void loginSuccess(String... strings) {
        //校验完毕之后跳
        Intent intent = new Intent(WXEntryActivity.this, MainActivity.class);
        WXEntryActivity.this.startActivity(intent);
        getUserInfor(strings[0], strings[1]);
        finish();
    }
    private void goToGetMsg() {
        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtras(getIntent());