用微信直接登录APP:
首先在build.gradle中的dependencie中添加
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.0.2'
在全局的application文件中的onCreate中添加registToWX():
import com.tencent.mm.opensdk.openapi.IWXAPI; import com.tencent.mm.opensdk.openapi.WXAPIFactory;
public static IWXAPI mWxApi; private void registToWX() { //AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换。 mWxApi = WXAPIFactory.createWXAPI(this, "*********", false); // 将该app注册到微信 mWxApi.registerApp("***********"); }
在调用页面的点击事件中加入:
case R.id.iv_wxLogin: wxLogin(); break;
public void wxLogin() { if (!HaierApp.mWxApi.isWXAppInstalled()) { Toast.makeText(this,"您还未安装微信客户端",Toast.LENGTH_SHORT).show(); return; } final SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "diandi_wx_login"; HaierApp.mWxApi.sendReq(req); }
然后在包名.wxapi文件夹下增加WXEntryActivity文件:
package com.haier.uhome.appliance.wxapi; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.Toast; import com.android.volley.VolleyError; import com.google.gson.Gson; import com.haier.uhome.appliance.newVersion.contant.HttpConstant; import com.haier.uhome.appliance.newVersion.contant.ServiceAddr; import com.haier.uhome.appliance.newVersion.module.login.LoginMainActivity; import com.haier.uhome.appliance.newVersion.module.winxin.bean.WXBindBean; import com.haier.uhome.appliance.newVersion.module.winxin.bean.WXOpenId; import com.haier.uhome.appliance.newVersion.module.winxin.bean.WXUserId; import com.haier.uhome.appliance.newVersion.result.HomeResult; import com.haier.uhome.application.HaierApp; import com.haier.uhome.common.dialog.DialogHelper; import com.haier.uhome.common.util.LogUtil; import com.haier.uhome.constant.UserLoginConstant; import com.haier.uhome.db.operateDao.MessageDao; import com.haier.uhome.domain.bbs.HttpMessageUtil; import com.haier.uhome.helper.InitHeader; import com.haier.uhome.volley.IResponseListener; import com.haier.uhome.volley.VolleyIMPL; 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.openapi.IWXAPIEventHandler; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.Map; public class WXEntryActivity extends Activity implements IWXAPIEventHandler{ private static final String TAG = "WXEntryActivity"; WXInfoPresenter presenter; private String appid = "**********"; private String appSecret = "*************"; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); HaierApp.mWxApi.handleIntent(getIntent(),this); presenter = new WXInfoPresenter(); presenter.attachView(this); } // 微信发送请求到第三方应用时,会回调到该方法 @Override public void onReq(BaseReq baseReq) { } // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法 @Override public void onResp(BaseResp baseResp) { Log.e(TAG,"baseResp.errCode"); switch (baseResp.errCode){ case BaseResp.ErrCode.ERR_OK: String code = ((SendAuth.Resp) baseResp).code; Log.e(TAG,"code = "+ code); // presenter.getOpenId(HttpConstant.PERSON_BASE,code); getOpenId(code); break; case BaseResp.ErrCode.ERR_USER_CANCEL: Log.e(TAG,"code =ERR_USER_CANCEL "); break; } this.finish(); } @Override public void onFailure(Throwable e) { } //获取微信openId private void getOpenId(String code) { JSONObject jsonObject = new JSONObject(); JSONArray jsonArray = new JSONArray(); try { jsonObject.put("code", code); } catch (JSONException e1) { e1.printStackTrace(); } Map<String, String> headers = InitHeader.getHeader(false); String url = ""; url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appid +"&secret="+appSecret+"&code="+code+"&grant_type=authorization_code"; Log.e(TAG,"url="+url); // } VolleyIMPL.getNoHeaderResponse(url,headers, new IResponseListener() { @Override public void onResponse(JSONObject json) { try { Log.e(TAG,"json="+json); JSONObject object = new JSONObject(json.toString()); if(json.getString("openid") != null && !json.getString("openid").equals("")){ Gson gson = new Gson(); WXOpenId wxOpenId = gson.fromJson(json.toString(),WXOpenId.class); getWXuserByOpenId(wxOpenId.getOpenid(),wxOpenId.getAccess_token()); }else{ Toast.makeText(WXEntryActivity.this,"获取openId失败",Toast.LENGTH_SHORT).show(); } } catch (Exception e) { e.printStackTrace(); // mhandler.sendEmptyMessage(LOOK_CODE_ERROR); } } @Override public void onErrorResponse(VolleyError error) { // mhandler.sendEmptyMessage(LOOK_CODE_ERROR); } }, null); } //通过openId获取微信用户信息 private void getWXuserByOpenId(String openId,String access_token) { JSONObject jsonObject = new JSONObject(); JSONArray jsonArray = new JSONArray(); try { jsonObject.put("code", openId); } catch (JSONException e1) { e1.printStackTrace(); } Map<String, String> headers = InitHeader.getHeader(false); String url = ""; url = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+openId; Log.e(TAG,"url="+url); // } VolleyIMPL.getNoHeaderResponse(url,headers, new IResponseListener() { @Override public void onResponse(JSONObject json) { try { Log.e(TAG,"json="+json); if(json.getString("openid") != null){ Gson gson = new Gson(); WXUserId wxUserId = gson.fromJson(json.toString(),WXUserId.class); Intent intent = new Intent(WXEntryActivity.this, LoginMainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP ); intent.putExtra("wx","wx"); intent.putExtra("wxUser",wxUserId); startActivity(intent); }else{ Toast.makeText(WXEntryActivity.this,"获取微信用户信息失败",Toast.LENGTH_SHORT).show(); } } catch (Exception e) { e.printStackTrace(); // mhandler.sendEmptyMessage(LOOK_CODE_ERROR); } } @Override public void onErrorResponse(VolleyError error) { // mhandler.sendEmptyMessage(LOOK_CODE_ERROR); } }, null); } @Override public void wxBindPhoneSuccess(HomeResult<WXBindBean> result) { } // private IWXAPI api; }