微信小程序登录,解决无法获取用户信息方法

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
import java.util.HashMap;
import java.util.Map;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
 
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
 
public class WeChatUtils {
 
    // 应用ID和应用秘钥需要在微信公众平台中申请
    private static final String APP_ID = "YOUR_APP_ID";
    private static final String APP_SECRET = "YOUR_APP_SECRET";
 
    // 获取微信用户access_token的接口地址
    private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token";
    // 获取微信用户信息的接口地址
    private static final String USER_INFO_URL = "https://api.weixin.qq.com/sns/userinfo";
 
    /**
     * 获取微信用户的access_token
     * 
     * @param code 微信小程序登录时获取的code
     * @return 包含access_token和openid的Map
     * @throws Exception
     */
    public static Map<String, String> getAccessToken(String code) throws Exception {
        OkHttpClient client = new OkHttpClient();
        String url = ACCESS_TOKEN_URL + "?appid=" + APP_ID + "&secret=" + APP_SECRET + "&code=" + code
                + "&grant_type=authorization_code";
        Request request = new Request.Builder().url(url).get().build();
        Response response = client.newCall(request).execute();
        String responseStr = response.body().string();
        JSONObject jsonObject = JSON.parseObject(responseStr);
        String accessToken = jsonObject.getString("access_token");
        String openid = jsonObject.getString("openid");
        Map<String, String> map = new HashMap<>();
        map.put("access_token", accessToken);
        map.put("openid", openid);
        return map;
    }
 
    /**
     * 获取微信用户信息
     * 
     * @param accessToken 用户的access_token
     * @param openid 用户的openid
     * @return 包含用户信息的Map
     * @throws Exception
     */
    public static Map<String, String> getUserInfo(String accessToken, String openid) throws Exception {
        OkHttpClient client = new OkHttpClient();
        String url = USER_INFO_URL + "?access_token=" + accessToken + "&openid=" + openid + "&lang=zh_CN";
        Request request = new Request.Builder().url(url).get().build();
        Response response = client.newCall(request).execute();
        String responseStr = response.body().string();
        JSONObject jsonObject = JSON.parseObject(responseStr);
        String nickname = jsonObject.getString("nickname");
        String avatar = jsonObject.getString("headimgurl");
        String phoneNumber = jsonObject.getString("phoneNumber"); // 获取用户手机号需要用户在小程序内进行授权
        Map<String, String> map = new HashMap<>();
        map.put("nickname", nickname);
        map.put("avatar", avatar);
        map.put("phoneNumber", phoneNumber);
        return map;
    }
 
}


在上面的代码中首先定义了应用的AppID和AppSecret。然后实现了获取微信用户access_token的方法getAccessToken()和获取微信用户信息的方法getUserInfo()。其中getAccessToken()方法需要传入微信小程序登录时获取的code会返回一个包含access_token和openid的MapgetUserInfo()方法需要传入用户的access_token和openid会返回一个包含用户信息的Map包括昵称、头像和手机号获取用户手机号需要用户在小程序内进行授权。


获取到手机号昵称头像可以在后端查询用户表解决用鉴权。

代码中使用了OkHttp库发送HTTP请求并使用FastJSON库解析返回的JSON格式数据。具体实现过程中首先构造了请求URL并使用OkHttpClient创建一个Request对象。然后调用execute()方法发送请求并获取响应。最后使用FastJSON解析响应数据并将需要的信息存放在一个Map中返回。

注意在实际使用中需要将代码中的YOUR_APP_ID和YOUR_APP_SECRET替换成在微信公众平台中申请的应用ID和应用秘钥。另外需要在小程序中调用wx.login()方法获取code并将code传给Java后台以便获取access_token和用户信息。

以上是一个简单的示例代码具体实现方式还要根据自己的需求和实际情况进行调整。
————————————————
版权声明本文为CSDN博主「清石小猿」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。
原文链接https://blog.csdn.net/zbh1957282580/article/details/129705186

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6