Maison  >  Article  >  développement back-end  >  Comment utiliser Golang pour implémenter la connexion autorisée WeChat pour les applications Web

Comment utiliser Golang pour implémenter la connexion autorisée WeChat pour les applications Web

王林
王林original
2023-06-24 08:16:542311parcourir

Avec la popularité de WeChat, la connexion WeChat est devenue une fonctionnalité incontournable pour de nombreuses applications Web. En se connectant avec l'autorisation WeChat, les utilisateurs peuvent facilement se connecter aux applications Web à l'aide de leur compte WeChat et éviter les processus d'enregistrement fastidieux. Cet article explique comment utiliser Golang pour implémenter la connexion autorisée WeChat pour les applications Web.

  1. Obtenez l'AppID et l'AppSecret de l'application WeChat Open Platform

Tout d'abord, nous devons nous inscrire et créer une application sur la WeChat Open Platform , récupérez l'application AppID et AppSecret. Sur la page de gestion des applications de la plateforme ouverte WeChat, vous pouvez voir les applications que vous avez créées et obtenir l'AppID et l'AppSecret de l'application.

  1. Construisez l'URL pour la connexion autorisée à WeChat

Lors de la construction de l'URL pour la connexion autorisée à WeChat, vous devez suivre les exigences de l'ouverture de WeChat plate-forme et ajoutez l'AppID, l'URL redirigée et certains autres paramètres sont assemblés selon certaines règles. Voici un exemple d'URL dans lequel "APPID" et "REDIRECT_URI" doivent être remplacés par l'AppID et l'URL de redirection de votre propre application :

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID
&redirect_uri=REDIRECT_URI
&response_type=code
&scope=snsapi_userinfo
&state=STATE#wechat_redirect

La description du paramètre est la suivante : #🎜🎜 #

    appid : AppID de l'application.
  • redirect_uri : L'adresse du lien de rappel redirigée après autorisation. Veuillez utiliser le code urlen pour traiter le lien.
  • response_type : type de retour, fixé au code.
  • scope : portée de l'autorisation de l'application, snsapi_base signifie obtenir uniquement l'openid de l'utilisateur, snsapi_userinfo signifie obtenir les détails de l'utilisateur.
  • state : Utilisé pour maintenir le statut des demandes et des rappels, et les ramener au tiers tels quels après avoir autorisé la demande.
Dans Golang, vous pouvez utiliser url.Values ​​​​pour créer des paramètres d'URL. Voici un exemple de code :

func buildAuthURL(appID, redirectURI, state string) string {
    values := make(url.Values)
    values.Set("appid", appID)
    values.Set("redirect_uri", redirectURI)
    values.Set("response_type", "code")
    values.Set("scope", "snsapi_userinfo")
    values.Set("state", state)
    return "https://open.weixin.qq.com/connect/oauth2/authorize?" + values.Encode() + "#wechat_redirect"
}

Cette fonction accepte trois paramètres : l'AppID de l'application, l'URL du rappel après autorisation et un état de chaîne aléatoire. La fonction renvoie une URL de connexion autorisée WeChat construite.

    Obtenir le jeton d'accès de l'utilisateur WeChat
Une fois que l'utilisateur a vérifié son identité dans le client WeChat, WeChat renvoie le code d'autorisation et redirige Go à l’URL de rappel prédéfinie. Dans l'URL de rappel, nous devons analyser les paramètres de l'URL, obtenir le code d'autorisation et utiliser le code pour échanger contre access_token. Voici un exemple de code :

func getAccessToken(appID, appSecret, code string) (string, error) {
    url := "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appID +
        "&secret=" + appSecret + "&code=" + code + "&grant_type=authorization_code"

    resp, err := http.Get(url)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return "", err
    }

    var data struct {
        AccessToken string `json:"access_token"`
        ExpiresIn   int    `json:"expires_in"`
        OpenID      string `json:"openid"`
        Scope       string `json:"scope"`
    }

    if err := json.Unmarshal(body, &data); err != nil {
        return "", err
    }

    return data.AccessToken, nil
}

Cette fonction accepte trois paramètres : l'AppID de l'application, l'AppSecret de l'application et le code d'autorisation. La fonction utilise la méthode http.Get() pour envoyer une requête GET au serveur WeChat afin d'obtenir le access_token. Cette fonction renvoie une valeur access_token de type chaîne, ou une erreur si une erreur se produit.

    Obtenir des informations de base sur les utilisateurs de WeChat
Après avoir obtenu access_token, nous pouvons envoyer une demande pour obtenir des informations utilisateur au serveur WeChat et analyser et renvoie les données au format JSON pour obtenir des informations de base sur les utilisateurs de WeChat. Voici un exemple de code :

func getUserInfo(accessToken, openID string) (*userInfo, error) {
    url := "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openID

    resp, err := http.Get(url)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return nil, err
    }

    var user userInfo

    if err := json.Unmarshal(body, &user); err != nil {
        return nil, err
    }

    return &user, nil
}

Cette fonction accepte deux paramètres : access_token et user openid. La fonction utilise la méthode http.Get() pour envoyer une requête GET au serveur WeChat afin d'obtenir les informations de base de l'utilisateur WeChat. Cette fonction renvoie une variable de type pointeur pointant vers la structure userInfo, ou une erreur si une erreur survient.

    Écrire un gestionnaire pour la connexion autorisée à WeChat
Enfin, nous devons écrire un gestionnaire pour intégrer les fonctions ci-dessus pour obtenir une connexion autorisée à WeChat . Voici un exemple de code :

func wxLoginHandler(w http.ResponseWriter, r *http.Request) {
    appID := "your app id"
    appSecret := "your app secret"
    state := "random string"
    redirectURI := url.QueryEscape("http://your_server_url/callback")

    if r.Method == "GET" {
        // Redirect to Wechat login page
        http.Redirect(w, r, buildAuthURL(appID, redirectURI, state), 302)
    } else if r.Method == "POST" {
        // Get user info after login succeeds
        code := r.FormValue("code")
        if code == "" {
            http.Error(w, "Missing code parameter", http.StatusBadRequest)
            return
        }

        accessToken, err := getAccessToken(appID, appSecret, code)
        if err != nil {
            http.Error(w, "Failed to get access token", http.StatusInternalServerError)
            return
        }

        user, err := getUserInfo(accessToken, openID)
        if err != nil {
            http.Error(w, "Failed to get user info", http.StatusInternalServerError)
            return
        }

        // Do something with user info
        fmt.Fprintf(w, "Hello, %s!", user.Nickname)
    } else {
        http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
        return
    }
}

Cette fonction implémente l'ensemble du processus de connexion autorisée à WeChat. Lorsque l'utilisateur accède à "/wx_login", la fonction sera redirigée vers la page de connexion d'autorisation WeChat. Une fois que l'utilisateur s'est connecté sur cette page, la fonction sera redirigée vers l'URL de rappel avec le paramètre de code d'autorisation. Dans la fonction de rappel, nous utiliserons le code d'autorisation pour obtenir le access_token et les informations utilisateur de base, et pourrons enregistrer les informations utilisateur sur le serveur ou effectuer un autre traitement.

Résumé

Cet article explique comment utiliser Golang pour implémenter la connexion autorisée WeChat pour les applications Web. Grâce à l'introduction de cet article, nous pouvons comprendre le principe de mise en œuvre de la connexion autorisée WeChat et écrire un simple programme de traitement des connexions autorisées WeChat. Dans les applications pratiques, nous devons également prendre en compte des problèmes tels que la sécurité et les performances, et procéder aux optimisations et améliorations correspondantes en fonction des besoins réels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn