package com.moral.yunfushao.wxapi; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; 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; import com.tencent.mm.opensdk.modelmsg.ShowMessageFromWX; import com.tencent.mm.opensdk.modelmsg.WXAppExtendObject; import com.tencent.mm.opensdk.modelmsg.WXMediaMessage; import com.tencent.mm.opensdk.openapi.IWXAPI; import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler; import com.tencent.mm.opensdk.openapi.WXAPIFactory; /** * @author : chenqi. * @e_mail : 1650699704@163.com. * @create_time : 2018/11/26. * @Package_name: pregnancy_guard_android */ public class WXEntryActivity extends Activity implements IWXAPIEventHandler { private IWXAPI api; public static String code = ""; @Override 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 protected void onNewIntent(Intent intent) { super.onNewIntent(intent); System.out.println("chenqi onNewIntent"); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq baseReq) { 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; System.out.println("chenqi create WXEntryActivity " + baseResp.errCode); switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: code = ((SendAuth.Resp) baseResp).code; result = "授权成功"; checkWXLogin(); //用户同意 break; case BaseResp.ErrCode.ERR_USER_CANCEL: result = "发送取消"; break; case BaseResp.ErrCode.ERR_AUTH_DENIED: result = "发送被拒绝"; break; case BaseResp.ErrCode.ERR_UNSUPPORT: result = "不支持错误"; break; default: result = ""; break; } if (result.equals("")) { return; } T.show(result); } /** * 判断是否登陆有效 */ 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=" + WXConstants.APP_ID + "&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.getErrcode() == 40029) { //登陆错误 loginFailed(); return; } if (accessTokenBean.getAccess_token() != null && accessTokenBean.getOpenid() != null) { checkEffective(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid()); } } @Override public void showLoadingDialog() { // } @Override public void onFail(int errno, String s) { loginFailed(); } }); } /** * 获取到用户的信息 * * @param access_token * @param openid */ private void getUserInfor(String access_token, String openid) { String path = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid; WXHttpUtil.doGet(path, CacheMode.DEFAULT, new HttpCallBack() { @Override public void onSuccess(String res, String msg) { WXUserBean bean = new WXUserBean(); User user = new User(); 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 public void showLoadingDialog() { } @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()); startActivity(intent); finish(); } private void goToShowMsg(ShowMessageFromWX.Req showReq) { WXMediaMessage wxMsg = showReq.message; WXAppExtendObject obj = (WXAppExtendObject) wxMsg.mediaObject; StringBuffer msg = new StringBuffer(); // 组织一个待显示的消息内容 msg.append("description: "); msg.append(wxMsg.description); msg.append("\n"); msg.append("extInfo: "); msg.append(obj.extInfo); msg.append("\n"); msg.append("filePath: "); msg.append(obj.filePath); Intent intent = new Intent(this, MainActivity.class); intent.putExtra(WXConstants.ShowMsgActivity.STitle, wxMsg.title); intent.putExtra(WXConstants.ShowMsgActivity.SMessage, msg.toString()); intent.putExtra(WXConstants.ShowMsgActivity.BAThumbData, wxMsg.thumbData); startActivity(intent); finish(); } }