ホームページ  >  記事  >  バックエンド開発  >  Golang を使用して Web アプリケーションに WeChat 認証ログインを実装する方法

Golang を使用して Web アプリケーションに WeChat 認証ログインを実装する方法

王林
王林オリジナル
2023-06-24 08:16:542311ブラウズ

WeChat の人気により、WeChat ログインは多くの Web アプリケーションにとって不可欠な機能になりました。 WeChat 認証でログインすると、ユーザーは WeChat アカウントを使用して Web アプリケーションに簡単にログインでき、煩雑な登録プロセスを回避できます。この記事では、Golang を使用して Web アプリケーションに WeChat 認証ログインを実装する方法を紹介します。

  1. WeChat オープン プラットフォーム アプリケーションの AppID と AppSecret を取得する

まず、WeChat オープン プラットフォームにアプリケーションを登録して作成し、AppID と AppSecret を取得する必要があります。アプリケーションの。 WeChat オープン プラットフォームのアプリケーション管理ページでは、作成したアプリケーションを確認し、アプリケーションの AppID と AppSecret を取得できます。

  1. WeChat 承認ログイン用の URL を構築する

WeChat 承認ログイン用の URL を構築するときは、WeChat オープン プラットフォームの要件に従って、次の AppID を追加する必要があります。アプリケーション、リダイレクトされた URL、およびその他のパラメーターは、特定のルールに従って結合されます。以下はサンプル URL です。「APPID」と「REDIRECT_URI」は独自のアプリケーションの AppID とリダイレクト URL に置き換える必要があります:

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

パラメータの説明は次のとおりです:

  • appid :アプリケーションのAppID。
  • redirect_uri: 承認後にリダイレクトされるコールバック リンク アドレス。リンクを処理するには、urlencode を使用してください。
  • response_type: 戻り値の型。コードに固定されています。
  • scope: アプリケーション認可スコープ。snsapi_base はユーザーの openid のみを取得することを意味し、snsapi_userinfo はユーザーの詳細を取得することを意味します。
  • state: リクエストとコールバックのステータスを維持し、リクエストを承認した後、それらをそのままの状態でサードパーティに戻すために使用されます。

Golang では、url.Values を使用して URL パラメーターを構築できます。以下はサンプル コードです。

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

この関数は、アプリケーションの AppID、承認後のコールバックの URL、およびランダムな文字列状態の 3 つのパラメーターを受け入れます。この関数は、構築された WeChat 承認ログイン URL を返します。

  1. WeChat ユーザーの access_token を取得する

ユーザーが WeChat クライアントで ID を確認した後、WeChat は認証コードを返し、事前に設定されたコールバックにリダイレクトします。 URL。コールバック URL では、URL パラメーターを解析し、認証コード code を取得し、そのコードを使用して access_token と交換する必要があります。以下はサンプル コードです。

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
}

この関数は、アプリケーションの AppID、アプリケーションの AppSecret、および認証コード code の 3 つのパラメーターを受け入れます。この関数は http.Get() メソッドを使用して GET リクエストを WeChat サーバーに送信し、access_token を取得します。この関数は、文字列型の access_token 値を返すか、エラーが発生した場合はエラーを返します。

  1. WeChat ユーザーの基本情報を取得する

access_token を取得した後、ユーザー情報を取得するリクエストを WeChat サーバーに送信し、返された JSON 形式のデータを解析できます。 WeChatユーザーの基本情報を取得するため。サンプル コードは次のとおりです。

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
}

この関数は、access_token と user openid の 2 つのパラメータを受け入れます。この関数は、http.Get() メソッドを使用して WeChat サーバーに GET リクエストを送信し、WeChat ユーザーの基本情報を取得します。この関数は userInfo 構造体を指すポインタ型変数を返します。エラーが発生した場合はエラーを返します。

  1. WeChat 承認ログイン用のハンドラーを作成する

最後に、WeChat 承認ログインを実現するために、上記の機能を統合するハンドラーを作成する必要があります。以下はサンプル コードです。

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

この関数は、WeChat 承認ログインのプロセス全体を実装します。ユーザーが「/wx_login」にアクセスすると、関数は WeChat 認証ログイン ページにリダイレクトされ、ユーザーがこのページにログインした後、関数は認証コード code パラメーターを使用してコールバック URL にリダイレクトされます。コールバック関数では、認可コードを使用してaccess_tokenと基本的なユーザー情報を取得し、ユーザー情報をサーバーに保存するなどの処理を実行できます。

概要

この記事では、Golang を使用して Web アプリケーションに WeChat 承認ログインを実装する方法を紹介します。この記事の導入により、WeChat 承認ログインの実装原理を理解し、簡単な WeChat 承認ログイン処理プログラムを作成することができます。実際のアプリケーションでは、セキュリティやパフォーマンスなどの問題も考慮し、実際のニーズに基づいて最適化や改善を行う必要があります。

以上がGolang を使用して Web アプリケーションに WeChat 認証ログインを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。