温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

android微信授权怎么获取用户个人信息

发布时间:2021-12-30 16:44:08 来源:亿速云 阅读:199 作者:iii 栏目:开发技术

本篇内容主要讲解“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();   } }
<activity       android:configChanges="keyboardHidden|orientation|screenSize"       android:exported="true"       android:name=".wxapi.WXEntryActivity"       android:theme="@android:style/Theme.Translucent.NoTitleBar" />

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;test import 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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微信授权怎么获取用户个人信息”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI