package com.moral.yunfushao.wxapi; import android.app.Activity; 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.common.WXConstants; import com.moral.yunfushao.httputils.HttpCallBack; import com.moral.yunfushao.httputils.WXHttpUtil; import com.moral.yunfushao.model.User; 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); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); 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: 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(); 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; } Toast.makeText(this, result, Toast.LENGTH_LONG).show(); } /** * 检查是否登陆失效 */ private void checkWXLogin() { String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid= " + WXConstants.APP_ID + "&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()); } @Override public void showLoadingDialog() { // } @Override public void onFail(int errno, String s) { } }); } /** * 获取到用户的信息 * * @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(); user.set_id(bean.getOpenid()); user.setNickname(bean.getNickname()); } @Override public void showLoadingDialog() { } @Override public void onFail(int errno, String s) { } }); } 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(); } }