WeChat の人気により、WeChat ログインは多くの Web アプリケーションにとって不可欠な機能になりました。 WeChat 認証でログインすると、ユーザーは WeChat アカウントを使用して Web アプリケーションに簡単にログインでき、煩雑な登録プロセスを回避できます。この記事では、Golang を使用して Web アプリケーションに WeChat 認証ログインを実装する方法を紹介します。
まず、WeChat オープン プラットフォームにアプリケーションを登録して作成し、AppID と AppSecret を取得する必要があります。アプリケーションの。 WeChat オープン プラットフォームのアプリケーション管理ページでは、作成したアプリケーションを確認し、アプリケーションの AppID と AppSecret を取得できます。
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
パラメータの説明は次のとおりです:
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 を返します。
ユーザーが 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 値を返すか、エラーが発生した場合はエラーを返します。
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 構造体を指すポインタ型変数を返します。エラーが発生した場合はエラーを返します。
最後に、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 サイトの他の関連記事を参照してください。