学习笔记-微信授权登录
2017-08-08 16:09
351 查看
现在几乎所有的APP 都会在登录页面设置QQ 或者 微信快捷登录方式,本篇文章主要分享一点博主做微信登录的过程,作为经验积累.做微信登录和微信支付都需要引入 微信的SDK ,本文在此不作多的 描述,直入 主题了,至于怎么去微信开放平台申请 开发者号和 APPID , SCREAT_KEY 大家可以去看官方文档;
1. 接入 微信 sdk ,博主用的 是
然后判断手机上是否安装了 微信客户端
接下来是关键的一步,在应用登录界面
在自己包名下面创建 wxapi 文件夹,里面创建一个 WXEntryActivity.java 文件,作为处理接受微信返回数据类,这个activity 也必须在 应用manifest 里面配置
将接收到的code ,获取微信access_token 和openid
参考资料:
http://www.jianshu.com/p/09a58fe0faef
1. 接入 微信 sdk ,博主用的 是
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
然后判断手机上是否安装了 微信客户端
private boolean isWeixinAvilible(LoginActivity loginActivity) { final PackageManager packageManager = loginActivity.getPackageManager(); // 获取packagemanager List<PackageInfo> pinfo = packageManager.getInstalledPackages(0); // 获取所有已安装程序的包信息 if (pinfo != null) { for (int i = 0; i < pinfo.size(); i++) { String pn = pinfo.get(i).packageName; if (pn.equals("com.tencent.mm")) { return true; } } } return false; }
接下来是关键的一步,在应用登录界面
IWXAPI api = WXAPIFactory.createWXAPI(this, Constant.APP_ID, false); private static final String WEIXIN_SCOPE = "snsapi_userinfo";// 用于请求用户信息的作用域 private static final String WEIXIN_STATE = "login_state"; // 自定义 SendAuth.Req req = new SendAuth.Req(); req.scope = WEIXIN_SCOPE;//授权阈 req.state = WEIXIN_STATE; api.registerApp(Constant.APP_ID); api.sendReq(req);
在自己包名下面创建 wxapi 文件夹,里面创建一个 WXEntryActivity.java 文件,作为处理接受微信返回数据类,这个activity 也必须在 应用manifest 里面配置
android:exported="true"WXEntryActivity.java
import android.app.Activity; import android.os.Bundle; import android.util.Log; 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.openapi.IWXAPI; import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler; import com.tencent.mm.opensdk.openapi.WXAPIFactory; //微信界面 public class WXEntryActivity extends Activity implements IWXAPIEventHandler { public static final String WX_APPID = "-------------"; private IWXAPI api; private boolean isFrist = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wxentry); //注意:*/ //第三方开发者如果使用透明界面来实现WXEntryActivity,需要判断handleIntent的返回值,如果返回值为false,则说明入参不合法未被SDK处理,应finish当前透明界面,避免外部通过传递非法参数的Intent导致停留在透明界面,引起用户的疑惑 try { api = WXAPIFactory.createWXAPI(this, WX_APPID, false); api.handleIntent(getIntent(), this);//这一句必须加,不加收不到返回的数据 } catch (Exception e) { e.printStackTrace(); } } private static final String WEIXIN_SCOPE = "snsapi_userinfo";// 用于请求用户信息的作用域 private static final String WEIXIN_STATE = "login_state"; // 自定义 private SendAuth.Req req; // 微信发送请求到第三方应用时,会回调到该方法 @Override public void onReq(BaseReq req) { switch (req.getType()) { case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX: break; case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX: break; default: break; } } // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法 @Override public void onResp(BaseResp resp) { if (ConstantsAPI.COMMAND_SENDAUTH == resp.getType()) { //授权回调 switch (resp.errCode) { case BaseResp.ErrCode.ERR_OK: //获取请求码 SendAuth.Resp sendAuthResp = (SendAuth.Resp) resp; String code = sendAuthResp.code; Log.d("tian", "请求码--------" + code); WXEntryActivity.this.finish(); finish(); break; case BaseResp.ErrCode.ERR_USER_CANCEL: /*Intent intent1 = new Intent(); Log.e("tiantian","微信登陆取消设置result"); intent1.putExtra("code", "cancel"); setResult(2, intent1);*/ finish(); break; case BaseResp.ErrCode.ERR_AUTH_DENIED: finish(); break; case BaseResp.ErrCode.ERR_UNSUPPORT: finish(); break; default: break; } } } @Override public void onBackPressed() { finish(); } @Override protected void onResume() { super.onResume(); } }
将接收到的code ,获取微信access_token 和openid
private void getResult(final String code) { HttpService httpService = CommonUtils.doNet(); Call<WxTokenBean> call = httpService.getWxToken("https://api.weixin.qq.com/sns/oauth2/access_token", Constant.APP_ID, Constant.APP_SECRET, code, "authorization_code"); call.enqueue(new retrofit2.Callback<WxTokenBean>() { @Override public void onResponse(Call<WxTokenBean> call, retrofit2.Response<WxTokenBean> response) { if (!response.isSuccessful()) { ToastUtils.showToast(response.message()); return; } WxTokenBean wxTokenBean = response.body(); String access_token = wxTokenBean.getAccess_token(); String openid = wxTokenBean.getOpenid(); getUserinfo(access_token, openid); } @Override public void onFailure(Call<WxTokenBean> call, Throwable t) { dismissLoadingDialog(); ToastUtils.showToast("微信登陆失败,请重试"); } }); }拿到 access_token 和 openid 就可以请求微信用户信息了
Call<WxUserInfoBean> call = httpService.getWxUserInfo("https://api.weixin.qq.com/sns/userinfo?access_token", access_token, openid);通过返回的bean 就可以获取你需要的用户信息了;
参考资料:
http://www.jianshu.com/p/09a58fe0faef
相关文章推荐
- springboot学习笔记2(拦截器,redis,授权登录,读取yml配置文件)
- 微信小程序学习笔记--20170425--登录验证实现
- 微信开发笔记——微信网页登录授权,获取用户信息
- 微信开发笔记——微信网页登录授权,获取用户信息
- 微信小程序学习笔记--20170425--登录验证实现
- 微信开发笔记——微信网页登录授权,获取用户信息
- 微信开发笔记——微信网页登录授权,获取用户信息
- 微信开发笔记——微信网页登录授权,获取用户信息
- [学习笔记]微信非80端口网页授权
- 微信登录 学习笔记 php
- 微信 静默 授权登录 获取openid 实现方法
- MySQL学习笔记1:安装和登录(多种方法)
- Java学习笔记------自己书写的登录界面实例
- PHP验证用户登录例子-学习笔记
- Android微信第三方登录(个人笔记
- 微信授权登录session问题
- 【Qt学习笔记】001 基础篇——多窗口&登录界面
- 微信小程序学习笔记(五)
- cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建
- 微信授权登录接口调试