Inicio de sesión en el applet de WeChat, cómo solucionar el problema de no poder obtener información del usuario

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;
    }
 
}


En el código anterior, AppID y AppSecret de la aplicación se definen primero. Luego, se implementan el método getAccessToken() para obtener access_token de usuario de WeChat y el método getUserInfo() para obtener información de usuario de WeChat. Entre ellos, el método getAccessToken() debe pasar el código obtenido al iniciar sesión en el applet de WeChat y devolverá un Mapa que contiene access_token y openid; el método getUserInfo() necesita pasar el access_token y openid del usuario, y devolverá un Mapa que contiene información del usuario, incluido el apodo, el avatar y el número de teléfono móvil (adquirir el número de teléfono móvil del usuario requiere que el usuario lo autorice en el programa pequeño).


Después de obtener (número de teléfono móvil, apodo, avatar), puede consultar la tabla de usuarios en el backend para resolver la autenticación.

El código usa la biblioteca OkHttp para enviar solicitudes HTTP y usa la biblioteca FastJSON para analizar los datos en formato JSON devueltos. En el proceso de implementación específico, primero construya la URL de solicitud y use OkHttpClient para crear un objeto de solicitud. Luego, llama al método execute() para enviar la solicitud y obtener la respuesta. Finalmente, use FastJSON para analizar los datos de respuesta, almacene la información requerida en un mapa y devuélvalo.

Tenga en cuenta que, en el uso real, debe reemplazar YOUR_APP_ID y YOUR_APP_SECRET en el código con el ID de la aplicación y la clave de la aplicación solicitada en la plataforma pública de WeChat. Además, debe llamar al método wx.login() en el subprograma para obtener el código y pasar el código al fondo de Java para obtener el token de acceso y la información del usuario.

Lo anterior es un código de muestra simple, y el método de implementación específico debe ajustarse de acuerdo con sus propias necesidades y situación real.
————————————————
Declaración de derechos de autor: este artículo es un artículo original del blogger de CSDN "Qing Shi Xiaoyuan", siguiendo el acuerdo de derechos de autor CC 4.0 BY-SA, adjunte el enlace de la fuente original y esta declaración para su reimpresión.
Enlace original: https://blog.csdn.net/zbh1957282580/article/details/129705186

おすすめ

転載: blog.csdn.net/m0_63364103/article/details/129951597