WeChat-Applet-Anmeldung: So lösen Sie das Problem, dass keine Benutzerinformationen abgerufen werden können

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


Im obigen Code werden zunächst die AppID und das AppSecret der Anwendung definiert. Anschließend werden die Methode getAccessToken() zum Abrufen des WeChat-Benutzers access_token und die Methode getUserInfo() zum Abrufen von WeChat-Benutzerinformationen implementiert. Unter anderem muss die Methode getAccessToken() den Code übergeben, den sie beim Anmelden im WeChat-Applet erhalten hat, und eine Karte zurückgeben, die das access_token und die openid enthält; die Methode getUserInfo() muss das access_token und die openid des Benutzers übergeben und eine Karte zurückgeben, die Benutzerinformationen enthält, einschließlich Spitzname, Avatar und Mobiltelefonnummer (um die Mobiltelefonnummer des Benutzers zu erhalten, muss sich der Benutzer im kleinen Programm autorisieren).


Nachdem Sie (Mobiltelefonnummer, Spitzname, Avatar) erhalten haben, können Sie die Benutzertabelle im Backend abfragen, um die Authentifizierung zu lösen.

Der Code verwendet die OkHttp-Bibliothek zum Senden von HTTP-Anfragen und die FastJSON-Bibliothek zum Parsen der zurückgegebenen Daten im JSON-Format. Erstellen Sie im spezifischen Implementierungsprozess zunächst die Anforderungs-URL und erstellen Sie mit OkHttpClient ein Anforderungsobjekt. Rufen Sie dann die Methodeexecute() auf, um die Anfrage zu senden und die Antwort zu erhalten. Verwenden Sie abschließend FastJSON, um die Antwortdaten zu analysieren, die erforderlichen Informationen in einer Map zu speichern und sie zurückzugeben.

Beachten Sie, dass Sie bei der tatsächlichen Verwendung YOUR_APP_ID und YOUR_APP_SECRET im Code durch die auf der öffentlichen WeChat-Plattform beantragte Anwendungs-ID und den Anwendungsschlüssel ersetzen müssen. Darüber hinaus müssen Sie die Methode wx.login () im Applet aufrufen, um den Code abzurufen, und den Code an den Java-Hintergrund übergeben, um das access_token und die Benutzerinformationen abzurufen.

Das Obige ist ein einfacher Beispielcode, und die spezifische Implementierungsmethode muss an Ihre eigenen Bedürfnisse und die tatsächliche Situation angepasst werden.
————————————————
Urheberrechtserklärung: Dieser Artikel ist ein Originalartikel des CSDN-Bloggers „Qing Shi Xiaoyuan“. Gemäß der CC 4.0 BY-SA-Urheberrechtsvereinbarung fügen Sie bitte den Originalquellenlink und diese Erklärung zum Nachdruck bei.
Ursprünglicher Link: https://blog.csdn.net/zbh1957282580/article/details/129705186

Supongo que te gusta

Origin blog.csdn.net/m0_63364103/article/details/129951597
Recomendado
Clasificación