java实现小程序获取微信登录,用户信息,手机号,头像

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的Map;getUserInfo()方法需要传入用户的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和用户信息。

以上是一个简单的示例代码,具体实现方式还要根据自己的需求和实际情况进行调整。

猜你喜欢

转载自blog.csdn.net/zbh1957282580/article/details/129705186