[サードパーティの相互接続]16。Wechatはサードパーティのログインを承認します

サードパーティプラットフォームシリーズの記事は、今日ようやく再び更新され始めました。今日は、Wechat(wechat)認定のサードパーティログインについて学習を続けています。

1.準備

1.WeChatパブリックテストアカウントに申し込む

私たちは個人の開発者であるため、WeChatパブリックプラットフォームのテストアカウントを登録して申請する必要があります

https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

マイクロチャネルパブリックプラットフォーム
WeChatスキャンコードでログインすると、appIDとappsecretを取得できます

テスト番号管理

2.公開テスト番号に従ってください

テスト番号QRコード

3.コールバックドメイン名を構成します

「Webサービス」で「Webアカウント」を検索し、「ユーザー基本情報を取得するためのWeb認証」インターフェースのコールバックドメイン名を変更します。

インターフェイス情報を変更する
承認コールバックページのドメイン名
注:ここで言うと、構成Webページのコールバック許可ドメイン名は、通常、サードパーティのインターフェイスとドッキングされており、同じではありません。コールバックの完全なアドレスは入力しませんが、コールバックドメイン名、ドメイン名の下のコールバックコールバックアドレスを入力します。


  • コールバックアドレス:http
    ://www.baidu.com/wechat/back then here:baidu.com

初心者は一般的にここで混乱しやすいです。設定が完了したら、[確認]をクリックします。

2.開発を開始します

1.アプリケーション情報を取得します

取得したappIDとappsecretを構成ファイル(ここではSpringBootプロジェクト)に書き込み、application.ymlファイルに入れます。

構成情報

2.mavenの依存関係を導入します

<!-- 网络请求 -->
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.5.6</version>
</dependency>
<!-- alibaba的fastjson -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.51</version>
</dependency>

ここでは、ネットワークリクエストとJSONオブジェクトの変換を使用する必要があるため、httpclientとfastjson、およびその他の依存関係を紹介しました。自己紹介してください。

3.構成ファイルから「wechat」構成情報を取得します

/**
 * 公众平台提供的 appid 和 appsecret
 */
@Value("${wechat.oauth.appid}")
public String APPID;
@Value("${wechat.oauth.appsecret}")
public String APPKEY;
@Value("${wechat.oauth.callback}")
public String URL;

4.認証ページにリダイレクトします

/**
 * 请求授权页面
 */
@RequestMapping("/auth")
public String token(HttpSession session) throws Exception {
    
    
    // 用于第三方应用防止CSRF攻击
    String uuid = UUID.randomUUID().toString().replaceAll("-", "");
    session.setAttribute("state", uuid);
	// Step1:获取Authorization Code
    String url = "https://open.weixin.qq.com/connect/oauth2/authorize?" +
            "appid=" + APPID +
            "&redirect_uri=" + URLEncoder.encode(URL) +
            "&response_type=code" +
            "&scope=snsapi_userinfo" +
            "&state=" + uuid +
            "#wechat_redirect";
    return PasswordUtils.redirectTo(url);
}
  • Step1のパラメータは次のように説明されています。
パラメータ あなたはする必要がありますか 説明
appid はい 公式アカウントの一意の識別子
redirect_uri はい 承認後にリダイレクトされたコールバックリンクアドレス。urlEncodeを使用してリンクを処理してください
response_type はい 返品タイプ、コードを入力してください
範囲 はい アプリケーション認証スコープ、snsapi_base(認証ページをポップアップせず、直接ジャンプし、ユーザーopenidのみを取得します)、snsapi_userinfo(認証ページをポップアップし、openidを介してニックネーム、性別、場所を取得できます。また、心配していなくても、ユーザーが許可されている限り、情報を取得できます)
状態 番号 リダイレクト後、状態パラメーターが取得され、開発者はa-zA-Z0-9のパラメーター値を最大128バイトまで入力できます。
#wechat_redirect はい 直接開くか、302ページのリダイレクトを行うかにかかわらず、このパラメーターを持参する必要があります

承認ページ
このとき、アクセスすると認証ページが表示されます

5.認証コールバック

/**
 * 授权回调
 */
@GetMapping(value = "/callback")
public void callback(HttpServletRequest request) throws Exception {
    
    
    HttpSession session = request.getSession();
    // 得到Authorization Code
    String code = request.getParameter("code");
    // 我们放在地址中的状态码
    String state = request.getParameter("state");
    String uuid = (String) session.getAttribute("state");

    // 验证信息我们发送的状态码
    if (null != uuid) {
    
    
        // 状态码不正确,直接返回登录页面
        if (!uuid.equals(state)) {
    
    
            return PasswordUtils.redirectTo("/login");
        }
    }

    // Step2:通过Authorization Code获取Access Token
    String url = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
            "appid=" + APPID +
            "&secret=" + APPKEY +
            "&code=" + code +
            "&grant_type=authorization_code";
    JSONObject resJson = HttpRequestUtils.httpRequestGet(url);
    if (null == resJson) {
    
    
        return PasswordUtils.redirectTo("/login");
    }
    String accessToken = resJson.getString("access_token");
    String openId = resJson.getString("openid");
    if (StringUtils.isBlank(accessToken) || StringUtils.isBlank(openId)) {
    
    
        return PasswordUtils.redirectTo("/login");
    }

    url = "https://api.weixin.qq.com/sns/userinfo?" +
            "access_token=" + accessToken +
            "&openid=" + openId +
            "&lang=zh_CN";
    // Step3: 获取微信用户信息
    resJson = HttpRequestUtils.httpRequestGet(url);
    /**
     * TODO 这时就该写自己的业务逻辑了
     */
}
  • ステップ2のパラメーターは次のように説明されます。
パラメータ あなたはする必要がありますか 説明
appid はい 公式アカウントの一意の識別子
秘密 はい 公式アカウントの秘密
コード はい 最初のステップで取得したコードパラメータを入力します
grant_type はい authentication_codeとして入力します
  • ステップ3のパラメーターは次のように説明されます。
パラメータ あなたはする必要がありますか 説明
アクセストークン はい Webページ認証インターフェイスの呼び出し資格情報、注:このaccess_tokenは、サポートされている基本的なaccess_tokenとは異なります。
openid はい ユーザーの一意のID
lang はい 国と地域の言語バージョンに戻る、zh_CN簡略化、zh_TWトラディショナル、英語

6.ネットワークリクエスト方法

ステップ2とステップ3はどちらもGETリクエストメソッドです

/**
 * GET 请求
 */
public static JSONObject httpRequestGet(String url) throws IOException {
    
    
    CloseableHttpClient client = HttpClients.createDefault();
    HttpGet httpGet = new HttpGet(url);
    HttpResponse response = client.execute(httpGet);
    HttpEntity entity = response.getEntity();
    if (entity != null) {
    
    
        String result = EntityUtils.toString(entity, "UTF-8");
        return JSONObject.parseObject(result);
    }
    httpGet.releaseConnection();
    return null;
}

3.ドキュメント

WeChat許可ログインのドキュメントアドレスは次のとおりです。

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

4、まとめ

承認認証プロセスは、基本的なOAuth2認証プロセスに準拠しています。アプリケーションの場合、プロセスは、図に示すように、承認コードの取得と承認コードを介したアクセストークンの取得の2つのステップで構成されます。

OAuth認証認証

読み不足を見つけたら、メッセージを残してください!

おすすめ

転載: blog.csdn.net/qq_40065776/article/details/109369262
おすすめ