陈奇
2019-05-29 c5bf501d8b507d1e3e79541e7ac9b45910860b4d
app/src/main/java/com/moral/yunfushao/wxapi/WXEntryActivity.java
@@ -4,18 +4,18 @@
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;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
@@ -40,6 +40,8 @@
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        api = WXAPIFactory.createWXAPI(this, WXConstants.APP_ID, false);
        api.registerApp(WXConstants.APP_ID);
        onNewIntent(getIntent());
    }
    @Override
@@ -51,28 +53,27 @@
    @Override
    public void onReq(BaseReq baseReq) {
        switch (baseReq.getType()) {
            case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
                goToGetMsg();
                break;
            case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
                goToShowMsg((ShowMessageFromWX.Req) baseReq);
                break;
            default:
                break;
        }
//        switch (baseReq.getType()) {
//            case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
//                goToGetMsg();
//                break;
//            case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
//                System.out.println("chenqi create WXEntryActivity COMMAND_SHOWMESSAGE_FROM_WX");
//                goToShowMsg((ShowMessageFromWX.Req) baseReq);
//                break;
//            default:
//                break;
//        }
    }
    @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;
                result = "授权成功";
                result = "";
                checkWXLogin();
                //用户同意
                break;
@@ -86,28 +87,101 @@
                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;
        System.out.println("chenqi ---- checkEffective");
        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";
        System.out.println("chenqi ---- checkWXLogin");
        WXHttpUtil.doGet(url, CacheMode.DEFAULT, new HttpCallBack() {
            @Override
            public void onSuccess(String res, String msg) {
                System.out.println("chenqi ---- onSuccess");
                AccessTokenBean accessTokenBean = GsonUtil.toObj(msg, AccessTokenBean.class);
                if (accessTokenBean.getAccess_token() == null && accessTokenBean.getOpenid() == null)
                    getUserInfor(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid());
                System.out.println("chenqi ---- refreshToken" + accessTokenBean.getOpenid() + accessTokenBean.getAccess_token());
                if (accessTokenBean.getErrcode() == 40029) {
                    //登陆错误
                    loginFailed();
                    return;
                } else if (accessTokenBean.getErrcode() == 40163) {
                    //已经等过过的code 不能够重复登陆
                    loginSuccess();
                }
                if (accessTokenBean.getAccess_token() != null && accessTokenBean.getOpenid() != null) {
                    checkEffective(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid());
                }
            }
            @Override
@@ -117,6 +191,7 @@
            @Override
            public void onFail(int errno, String s) {
                loginFailed();
            }
        });
    }
@@ -137,8 +212,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
@@ -148,11 +233,31 @@
            @Override
            public void onFail(int errno, String s) {
                loginFailed();
            }
        });
    }
    private void loginFailed() {
        finish();
        T.show("登陆失败");
    }
    /**
     * 登陆成功
     *
     * @param strings
     */
    private void loginSuccess(String... strings) {
        System.out.println("chenqi ---- loginSuccess" + strings.length);
        //校验完毕之后跳
        Intent intent = new Intent(getApplication(), MainActivity.class);
        getApplication().startActivity(intent);
        getUserInfor(strings[0], strings[1]);
        finish();
    }
    private void goToGetMsg() {
        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtras(getIntent());