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和用户信息。文章来源:https://www.toymoban.com/news/detail-520500.html
以上是一个简单的示例代码,具体实现方式还要根据自己的需求和实际情况进行调整。文章来源地址https://www.toymoban.com/news/detail-520500.html
到了这里,关于java实现小程序获取微信登录,用户信息,手机号,头像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!