android微信授权怎么获取用户个人信息
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"android微信授权怎么获取用户个人信息",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"android微信授权怎么获取用户个人信息"吧!
千家信息网最后更新 2025年11月07日android微信授权怎么获取用户个人信息
本篇内容主要讲解"android微信授权怎么获取用户个人信息",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"android微信授权怎么获取用户个人信息"吧!
微信官方文档API:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html
1.申请你的 AppID
只有审核通过的应用才能进行开发。
2.下载 SDK 及 API 文档
Android Studio 环境下:
在 build.gradle 文件中,添加如下依赖即可:
dependencies {
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0'
}
3.将APP注册到微信
IWXAPI msgApi = WXAPIFactory.createWXAPI(LoginActivity.this, Constant.AppID, true); if (msgApi.isWXAppInstalled()) { // 将应用的appId注册到微信 msgApi.registerApp(Constant.AppID); //建议动态监听微信启动广播进行注册到微信 registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 将该app注册到微信 msgApi.registerApp(Constant.AppID); } }, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP)); final Req req = new Req(); req.scope = "snsapi_userinfo"; //获取用户个人信息则填写 snsapi_userinfo req.state = "mvwl-"; //可根据项目填写 msgApi.sendReq(req); } else { Toast.makeText(LoginActivity.this, "请安装微信客户端后进行此操作").show(); return; }4.创建WXEntryActivity,在AndroidMainifest.xml中添加WXEntryActivity
public class WXEntryActivity extends WXCallbackActivity implements IWXAPIEventHandler { public static final String WXLOGIN_ACTION = "com.mvw.test.wxlogin"; private IWXAPI iwxapi; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); iwxapi = WXAPIFactory.createWXAPI(this, "自己项目APPID", true); try { Intent intent = getIntent(); iwxapi.handleIntent(intent, this); } catch (Exception e) { e.printStackTrace(); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); iwxapi.handleIntent(intent, this); } // 微信发送请求到第三方应用时,会回调到该方法 @Override public void onReq(BaseReq baseReq) { switch (baseReq.getType()) { case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX: break; case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX: break; default: break; } } @Override public void onResp(BaseResp baseResp) { Intent intent = new Intent(WXLOGIN_ACTION); //登录回调 Log.i("微信", "onResp: "+ baseResp.errCode); switch (baseResp.errCode){ case BaseResp.ErrCode.ERR_OK: String code = ((SendAuth.Resp) baseResp).code; intent.putExtra("Wx_Login", code); intent.putExtra("error_code", 0); break; //用户拒绝授权 case BaseResp.ErrCode.ERR_AUTH_DENIED: intent.putExtra("error_code", -4); break; //用户取消授权 case BaseResp.ErrCode.ERR_USER_CANCEL: intent.putExtra("error_code", -2); break; } sendBroadcast(intent); //使用了广播 finish(); }}5.接收微信返回参数code,根据code获取access_token,获取用户个人信息
下面是完整的使用列子。
package com.mvw.test.activity;import android.annotation.SuppressLint;import android.app.Activity;import android.app.AlertDialog;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.graphics.drawable.ColorDrawable;import android.net.Uri;import android.os.Bundle;import android.support.annotation.Nullable;import android.text.Html;import android.text.TextUtils;import android.util.Log;import android.view.Gravity;import android.view.View;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.google.gson.Gson;testimport com.google.gson.GsonBuilder;import com.mvw.test.R;import com.mvw.test.wxapi.WXEntryActivity;import com.test.netlibrary.OkHttpUtils;import com.test.netlibrary.callback.StringCallback;import com.orhanobut.logger.Logger;import com.tencent.mm.opensdk.constants.ConstantsAPI;import com.tencent.mm.opensdk.modelmsg.SendAuth.Req;import com.tencent.mm.opensdk.openapi.IWXAPI;import com.tencent.mm.opensdk.openapi.WXAPIFactory;import com.umeng.socialize.PlatformConfig;import java.util.HashMap;import java.util.Map;import okhttp3.Call;import okhttp3.MediaType;import org.json.JSONException;import org.json.JSONObject;/** * 登录 */public class LoginActivity extends Activity implements View.OnClickListener {private String WEIXIN_ACCESS_TOKEN_KEY = "wx_access_token_key"; //微信access_token private String WEIXIN_OPENID_KEY = "wx_openid_key"; //微信openid private String WEIXIN_REFRESH_TOKEN_KEY = "wx_refresh_token_key";//微信refresh_token private String WEIXIN_UNIONID = "wx_unionid_key";//微信unionid private Activity activity; private IWXAPI msgApi; private WXLoginReceiver wxLoginReceiver; private boolean flag=false; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); activity = this; initView(); } private void initView() { ImageView iv_weChat = (ImageView) findViewById(R.id.iv_weChat); iv_weChat.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.iv_weChat: registerWeChat(); break; } }//注册广播 @Override protected void onResume() { super.onResume(); flag = true; if (wxLoginReceiver == null) { IntentFilter wxIntent = new IntentFilter(WXEntryActivity.WXLOGIN_ACTION); wxLoginReceiver = new WXLoginReceiver(); registerReceiver(wxLoginReceiver, wxIntent); } } /** * 微信登录成功接收广播 * ShareUtilService 封装的SharedPreferences存储方法 */ class WXLoginReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String code = intent.getStringExtra("Wx_Login"); int error_code = intent.getIntExtra("error_code", -1); if (TextUtils.equals(intent.getAction(), WXEntryActivity.WXLOGIN_ACTION)) { switch (error_code) { case 0: if (!code.isEmpty()) { String accessToken = ShareUtilService.getString(WEIXIN_ACCESS_TOKEN_KEY, ""); String openid = ShareUtilService.getString(WEIXIN_OPENID_KEY, ""); if (!"".equals(accessToken)) { // 有access_token,判断是否过期有效 isExpireAccessToken(accessToken, openid); } else { // 没有access_token getAccessToken(code); } } break; case -4: //用户拒绝授权 case -2: //用户取消授权 Log.i("微信", "onReceive: " + error_code); break; } } } } /** * 微信授权登录,请求 CODE */ private void registerWeChat() { ShareUtilService.remove(WEIXIN_REFRESH_TOKEN_KEY); ShareUtilService.remove(WEIXIN_ACCESS_TOKEN_KEY); ShareUtilService.remove(WEIXIN_OPENID_KEY); ShareUtilService.remove(WEIXIN_UNIONID); msgApi = WXAPIFactory.createWXAPI(LoginActivity.this, Constant.AppID, true); Log.i("微信", "registerWeChat: " + msgApi.isWXAppInstalled()); if (msgApi.isWXAppInstalled()) { // 将应用的appId注册到微信 msgApi.registerApp(Constant.AppID); //建议动态监听微信启动广播进行注册到微信 registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 将该app注册到微信 msgApi.registerApp("自己项目APPID"); } }, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP)); final Req req = new Req(); req.scope = "snsapi_userinfo"; req.state = "mvwl-";//根据自己项目需要定义 msgApi.sendReq(req); } else { Toast.makeText(LoginActivity.this, R.string.pay_wx_client_install, Toast.LENGTH_SHORT).show(); return; } } /** * 微信获取accessToken * @param code 微信返回的code */ private void getAccessToken(String code) { Map map = new HashMap<>(); map.put("appid", "自己项目APPID"); map.put("secret", "自己项目APPSecret"); map.put("code", code); map.put("grant_type", "authorization_code"); OkHttpUtils.get().url("https://api.weixin.qq.com/sns/oauth3/access_token?").params(map).build().execute( new StringCallback() { @Override public void onError(Call call, Exception e, int id) { Log.i("微信获取Err", e.getMessage()); } @Override public void onResponse(String response, int id) { String access = null; String openid = null; try { JSONObject jsonObject = new JSONObject(response); access = jsonObject.getString("access_token"); openid = jsonObject.getString("openid"); String refresh = jsonObject.getString("refresh_token"); ShareUtilService.setString(WEIXIN_ACCESS_TOKEN_KEY, access); ShareUtilService.setString(WEIXIN_OPENID_KEY, openid); ShareUtilService.setString(WEIXIN_REFRESH_TOKEN_KEY, refresh); getWeChatUserInfo(access, openid); } catch (JSONException e) { e.printStackTrace(); } } }); } /** * 获取用户信息 * @param accessToken 接口调用凭证 * @param openid 授权用户唯一标识 */ private void getWeChatUserInfo(String accessToken, String openid) { Map map = new HashMap<>(); map.put("access_token", accessToken); map.put("openid", openid); OkHttpUtils.get().url("https://api.weixin.qq.com/sns/userinfo?").params(map).build().execute( new StringCallback() { @Override public void onError(Call call, Exception e, int id) { Log.i("微信用户信息Err", e.getMessage()); } @Override public void onResponse(String response, int id) { try { JSONObject jsonObject = new JSONObject(response); ShareUtilService.setString("userInfo", response); String unionid = jsonObject.getString("unionid"); ShareUtilService.setString(WEIXIN_UNIONID,unionid); } catch (JSONException e) { e.printStackTrace(); } } }); } /** * 判断accesstoken是过期 * * @param accessToken token * @param openid 授权用户唯一标识 */ private void isExpireAccessToken(final String accessToken, final String openid) { Map map = new HashMap<>(); map.put("access_token", accessToken); map.put("openid", openid); OkHttpUtils.get().url("https://api.weixin.qq.com/sns/auth?").params(map).build().execute( new StringCallback() { @Override public void onError(Call call, Exception e, int id) { Log.i("微信token过期Err", e.getMessage()); } @Override public void onResponse(String response, int id) { try { JSONObject jsonObject = new JSONObject(response); int errCode = jsonObject.getInt("errcode"); if (errCode == 0) { getWeChatUserInfo(accessToken, openid); } else { // 过期了,使用refresh_token来刷新accesstoken refreshAccessToken(); } } catch (JSONException e) { e.printStackTrace(); } } }); } /** * 刷新获取新的access_token */ private void refreshAccessToken() { // 从本地获取以存储的refresh_token String refreshToken = ShareUtilService.getString(WEIXIN_REFRESH_TOKEN_KEY, ""); if (TextUtils.isEmpty(refreshToken)) { return; } Map map = new HashMap<>(); map.put("appid", "自己项目的APPID"); map.put("grant_type", "refresh_token"); map.put("refresh_token", refreshToken); OkHttpUtils.get().url("https://api.weixin.qq.com/sns/oauth3/refresh_token?").params(map).build().execute( new StringCallback() { @Override public void onError(Call call, Exception e, int id) { Log.i("微信刷新TokenError", e.getMessage()); // 重新请求授权 registerWeChat(); } @Override public void onResponse(String response, int id) { try { JSONObject jsonObject = new JSONObject(response); String access = jsonObject.getString("access_token"); String openid = jsonObject.getString("openid"); getWeChatUserInfo(access, openid); } catch (JSONException e) { e.printStackTrace(); } } }); } @Override protected void onDestroy() { super.onDestroy(); if(flag){ flag=false; if (wxLoginReceiver != null) { unregisterReceiver(wxLoginReceiver); } } }} 到此,相信大家对"android微信授权怎么获取用户个人信息"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
用户
信息
项目
个人
广播
应用
登录
方法
内容
动态
建议
文档
标识
存储
学习
监听
实用
更深
有效
成功
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
wowfan数据库
中国国家网络安全举报中心
网络安全问题整改通知书
上海app手机软件开发
晋城显示屏触摸软件开发公司
软件开发与程序设计题库
中新赛克业务软件开发部
网络安全概述ppt免费
中央网络安全治理
服务器禁用usb
计算机网络安全技术特征
数据库出错怎么打开安全
计算软件开发老了有退休金吗
服务器it外包
服务器安装虚拟机报错误代码
网络安全答题提交后页面
医邦网络技术有限公司怎么样
新疆java软件开发公司
班主任总结网络安全主题教育
卡斯柯软件开发开发
中班网络安全教育简讯
拍单软件开发
编程软件开发公司排行
网络安全人民日报
代码建数据库
学校网络安全宣传周工作小结
中行软件开发中心工资
数据库系统 关系模型
喀什服务器设备维保费用
兰州青少年网络安全知识竞赛时间