赞
踩
- 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和用户信息。
以上是一个简单的示例代码,具体实现方式还要根据自己的需求和实际情况进行调整。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。