android 微信第三方登录

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


	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值