uni-app WeChatアプレット認証ログイン実装手順

uni-app WeChatアプレット認証ログイン実装手順

ここに画像の説明を挿入

1. appIDの申請と設定

1. appidの取得方法

WeChatパブリックプラットフォームにログイン

公式サイトリンク: https://mp.weixin.qq.com/

初めてご利用の場合は、登録ボタンをクリックして登録する必要があります。アカウントをお持ちの場合は、スキャンしてログインするだけです。

ここに画像の説明を挿入

公式サイトミニプログラムリンク:

ここに画像の説明を挿入

2. AppIDの設定

manifest.jsonに申請したWeChatアプレットIDを入力してください

ここに画像の説明を挿入

2. 基本的なユーザーデータの取得

ここで 2 つの API を紹介します。

2.1. ユーザー情報の取得

uni.getUserProfileを使用してユーザー認証を要求し、ユーザー情報を取得することができます。また、uni.getUserInfoを使用して、

ここに画像の説明を挿入

認証が成功すると、取得されたユーザー情報は userInfo に保存されます。

ここに画像の説明を挿入

ページセクション:

 <button class="login-btn" type="primary" @click="getUserInfo">
        WeChatユーザーはワンクリックでログインできます</button>

js部分:

 メソッド: {
    ユーザー情報を取得する() {
      uni.getUserInfo({
        プロバイダー: 'weixin'、
        成功: (res) => {
          console.log('getUserInfo', res);
        },
      });
    },
   }

取得したユーザー基本データ(openid=》WeChatユーザー固有識別子なし)

ここに画像の説明を挿入

2.2. ユーザー情報の取得 2

uni.getUserInfoを使用してユーザー認証を要求し、ユーザー情報を取得できます。

ページは同じですが、js 部分は次のとおりです。

 ユーザー情報を取得する() {
      uni.getUserProfile({
        説明: 'ログイン後にデータを同期できます',
        言語: 'zh_CN',
        成功: (res) => {
          console.log('getUserProfile', res);
        },
      });
    },

取得したユーザー基本データ(openid=》WeChatユーザー固有識別子なし)

ここに画像の説明を挿入

要約: 2 つの API uni.getUserProfile と uni.getUserInfo によって取得されるユーザー データは基本的に同じであり、どちらにも openid=》WeChat ユーザーの一意の識別子がありません。

3. ログインAPIを呼び出す

3.1. ログインAPI

uni.login メソッドを使用し、プロバイダー パラメータとして 'weixin' を入力し、成功した戻り値で errMsg = "login:ok" の場合、成功を意味します。
WeChatアプレットはコード文字列を返します

ここに画像の説明を挿入

3.2. サンプルコード

 uni.ログイン({
            プロバイダー: 'weixin'、
            成功: (res) => {
              console.log('res-login', res);
              コード:
              console.log('コード', res.コード);
              res.errMsg == 'ログイン:ok'の場合{
              //TODO コードを取得し、コード パラメータを使用してバックエンド インターフェイスを呼び出します}

4. 固有の識別情報の取得

4.1. 公式ウェブサイトのドキュメント

公式ウェブサイトのドキュメントでは、取得したコードを使用してWeChatログインインターフェースにopenidとsession_keyの取得を要求しています。

ここに画像の説明を挿入

4.2. インターフェースの説明

ここに画像の説明を挿入

リクエストメソッド: GET
APPID: ミニプログラムの一意の識別子。取得方法は上記をご覧ください。
SECRET: ミニプログラムを一意に識別する秘密鍵です。上記のAPPID取得方法を参照してください。そのすぐ下にあります。
JSCODE: このフロントエンドはuni.loginを呼び出して取得します

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code を取得します。

ここに画像の説明を挿入

5. ユーザーをログインにバインドする

WeChat ユーザーの一意の ID を取得したら、それを独自のシステム内のユーザーにバインドできます。私が行うことは、weixinId フィールドをユーザー テーブルに追加し、独自のユーザー バインディング インターフェイスにジャンプすることです。ユーザーが WeChat をバインドすることを選択した場合、その行のユーザー データの weixinId が更新されます。次回ユーザーがWeChatを使用してログインするときに、ユーザーデータがopenIdを介して照会できる場合、それはバインドされており、ユーザーがログインしていることを意味します。

5.1. コード例(パッケージ化されていないもの)

フロントエンド部分:

 /**
     *
     * ユーザー情報を取得する */
    ユーザー情報を取得する() {
      // ローディングボックスを表示する uni.showLoading({
        タイトル: 「読み込み中」
      });
      uni.getUserProfile({
        説明: 'ログイン後にデータを同期できます',
        成功: async (obj) => {
          コンソールにログ出力します。
          //アクションを呼び出してログイン インターフェイスを要求します // await this.login(obj);
          uni.ログイン({
            プロバイダー: 'weixin'、
            成功: (res) => {
              console.log('res-login', res);
              コード:
              console.log('コード', res.コード);
              res.errMsg == 'ログイン:ok'の場合{
                ユニ
                  。リクエスト({
                    URL:
                      'http://127.0.0.1:8080/wxh5/wx/user/' +
                      'wx55822xxxx75e422' +
                      '/ログイン/'、
                    データ: {
                      コード: this.code,
                    },
                  })
                  .then((res) => {
                  //openidとsession_kを取得した後、独自のロジックconsole.log('Authorized login', res[1].data);
                    コンソールにログ出力します。
                    コンソールにログ出力します。
                    // 何かを行う................
                  });
                コンソールにログ出力します。
              }
            },
          });
        },
        失敗: () => {
          uni.showToast({
            タイトル: 「認証がキャンセルされました」
            アイコン: 'エラー'、
            マスク: true、
          });
        },
        完了: () => {
          //読み込みを非表示
          uni.hideLoading();
        },
      });
    },

バックエンド

 @GetMapping("/ログイン")
    パブリック文字列ログイン(@PathVariable 文字列 appid, 文字列コード) {
        if (StringUtils.isBlank(コード)) {
            「空の jscode」を返します。
        }

        最終的な WxMaService wxService = WxMaConfiguration.getMaService(appid);

        試す {
            WxMaJscode2SessionResult セッション = wxService.getUserService().getSessionInfo(コード);
            セッションキーを取得します。
            セッションIDを取得する
            //TODO は独自のロジックを追加し、ビジネス関連のデータを関連付けることができます。 return JsonUtils.toJson(session);
        } キャッチ (WxErrorException e) {
            this.logger.error(e.getMessage(), e);
            e.toString() を返します。
        }
    }

5.2. コード例(パッケージング)

 /**
     *
     * ユーザー情報を取得する */
    ユーザー情報を取得する() {
      // ローディングボックスを表示する uni.showLoading({
        タイトル: 「読み込み中」
      });
      uni.getUserProfile({
        説明: 'ログイン後にデータを同期できます',
        成功: async (obj) => {
          // this.userInfo = obj.userInfo;
          // ログインを要求するアクションを呼び出すインターフェース uni.login({
            プロバイダー: 'weixin'、
            成功: async (res) => {
              コード:
              // console.log('コードを取得するにはログインしてください', res.code);
              res.errMsg == 'ログイン:ok'の場合{
                this.loginAuth({を待つ
                  ユーザープロファイル: obj,
                  アプリID: 'wx558xxxxxxxxxxxxxxx2',
                  コード: this.code,
                });
              }
            },
          });
        },
        失敗: () => {
          uni.showToast({
            タイトル: 「認証がキャンセルされました」
            アイコン: 'エラー'、
            マスク: true、
          });
        },
        完了: () => {
          //読み込みを非表示
          uni.hideLoading();
        },
      });
    },
  },

ユーザー.js

 /**
 * WeChatユーザー認証ログイン、appidとコードパラメータの伝達、バックエンドインターフェースの呼び出しによるOpenidの取得
 */
エクスポート関数 loginAuth(data) {
  リクエストを返す({
    url: '/wx/user/' + data.appid + '/login/',
    データ: {
      コード: data.code、
    },
  });
}

vuex ユーザーモジュール (user.js)

 // WeChat ユーザーがログインを許可し、appid と code パラメータを渡し、バックエンド インターフェイスを呼び出して Openid を取得します。
    非同期ログイン認証(コンテキスト、データ) {
      console.log('データ', データ);
      ユーザープロファイルを作成します。
      const { コンテンツ: res } = loginAuthを待機します({
        アプリID: データ.アプリID、
        コード: data.code、
      });

      // バックエンドから送信された JSON オブジェクトを解析します。const userAuthInfo = JSON.parse(res);
      定数 openid = userAuthInfo.openid;
      // console.log('sessionKey', userAuthInfo.sessionKey);
      コンソールにログ出力します。

      // vuexに保存してコミットする
      this.commit('user/setOpenid', userAuthInfo.openid);
      this.commit('user/setUserInfo', JSON.parse(userInfo.rawData));
    },

ここに画像の説明を挿入

ここに画像の説明を挿入

6. プロジェクトのオープンソースアドレス

6.1. フロントエンド

アプレット チョックイン

6.2. バックエンド

weixin-java-ミニアプリ

uni-app WeChat アプレット認証ログインに関するこの記事はこれで終わりです。より関連性の高い uni-app WeChat アプレット認証ログイン コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。皆様が今後も 123WORDPRESS.COM を応援してくれることを願っています。

以下もご興味があるかもしれません:
  • uni-appを使用してWeChatアプレットの落とし穴レコードを生成する
  • WeChatミニプログラムはuni-appを通じて世界中に共有されます
  • uni-app WeChatアプレットのログイン認証の実装
  • WeChat アプレットをユニアプリ プロジェクトに変換する方法の例
  • uni-app、WeChatアプレットの位置決め機能を開発

<<:  Docker のコンテナ データ ボリュームの概要

>>:  CSS3 で半透明の背景画像と不透明なコンテンツを実現する方法の例

推薦する

コマンドを使用してMySQLデータベース(de1)を作成する方法

1. MYSQLに接続するフォーマット: mysql -h ホストアドレス -u ユーザー名 -p ...

MySQL 8.0.12 のインストールと環境変数の設定チュートリアル (Win10 の場合)

Windows 10 プラットフォームでの MySQL のインストール、構成、起動、ログイン、環境...

Docker イメージの作成、アップロード、プル、およびデプロイ操作 (Alibaba Cloud を使用)

学習プロセス中にプッシュ イメージが常にタイムアウトすることがわかったため、Alibaba Clou...

Linux 面接で最もよく聞かれる 10 の質問のまとめ

序文Linux システムの運用および保守エンジニア職の面接を受ける場合は、次の 10 個の最も一般的...

VMware Workstation 14 Pro は CentOS 7.0 をインストールします

VMware Workstation 14 ProにCentOS 7.0をインストールする具体的な方...

テーブルを作成するための MySQL SQL ステートメントの詳細な概要

mysql テーブル作成 SQL ステートメントMySQL テーブルを作成するための一般的な SQL...

MySQLのkillがスレッドをkillできない理由

目次背景問題の説明原因分析シミュレーションする総括する背景日常の使用において、MySQL で個別また...

MySQLデータベースの基礎知識

目次1. データベースを理解する1.1 データベースとデータ構造の関係1.2 なぜデータベースが必要...

MySql でデータの重複挿入を回避する 3 つの方法

序文MySql で主キーの競合または一意キーの競合が発生した場合、挿入方法に応じてエラーを回避するた...

有名なブログの再設計例 28 件

1. Webデザイナーウォール 2. Veerleのブログ 3. チュートリアル9 4. UXブース...

js における浅いコピーと深いコピーの詳細な説明

目次1. jsメモリ2. 譲渡3. 浅いコピー4. ディープコピー序文:以下の記事を読む前に、記憶に...

JavaScript で文字列内の最長の単語を見つける 3 つの方法 (推奨)

この記事は、Free Code Camp の基本アルゴリズム スクリプト「文字列内の最長の単語を見つ...

JavaScriptはフォームデータの非同期送信を実装します

この記事では、フォームデータの非同期送信を実装するためのJavaScriptの具体的なコードを参考ま...

モバイルでのHTML5経由のファイルアップロード

ほとんどの場合、PC でファイルをアップロードするにはプラグインが使用され、フラッシュが導入されても...