您的位置:首页 > 移动开发 > 微信开发

android 微信第三方登录

2017-05-27 16:36 155 查看
用微信直接登录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 = "*************";@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);HaierApp.mWxApi.handleIntent(getIntent(),this);presenter = new WXInfoPresenter();presenter.attachView(this);}// 微信发送请求到第三方应用时,会回调到该方法@Overridepublic void onReq(BaseReq baseReq) {}// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法@Overridepublic 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();}@Overridepublic void onFailure(Throwable e) {}//获取微信openIdprivate 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() {@Overridepublic 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);}}@Overridepublic 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() {@Overridepublic 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);}}@Overridepublic void onErrorResponse(VolleyError error) {//                mhandler.sendEmptyMessage(LOOK_CODE_ERROR);}}, null);}@Overridepublic void wxBindPhoneSuccess(HomeResult<WXBindBean> result) {}//	 private IWXAPI api;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信 第三方登录