android 微信第三方登录

来源:互联网 发布:用户画像建模算法 编辑:程序博客网 时间:2024/05/17 01:11

用微信直接登录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;}

原创粉丝点击