| | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | |
| | | @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; |
| | |
| | | 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 |
| | |
| | | |
| | | @Override |
| | | public void onFail(int errno, String s) { |
| | | loginFailed(); |
| | | } |
| | | }); |
| | | } |
| | |
| | | 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 |
| | |
| | | |
| | | @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()); |