WeChat アプレット認証ログインの詳細

 


 
 

  

プロセス

WeChatアプレットのログインフローチャート
例証する

  • wx.login()を呼び出して一時的な、それを開発者サーバーに送り返します。
  • ユーザーの一意の識別子 OpenID WeChat オープン プラットフォーム アカウント(現在のミニ プログラムが WeChat オープン プラットフォーム アカウントにバインドされている場合) でのユーザーの一意の識別子 UnionID 、およびセッションキー session_key と引き換えに、 auth.code2Sessionインターフェイスを呼び出します

その後、開発者サーバーは、ユーザー ID に従ってカスタム ログイン ステータスを生成できます。このユーザー ID は、後続のビジネス ロジックでフロントエンドとバックエンドの対話中にユーザーの ID を識別するために使用されます。

予防

  1. セッション キー session_key は、ユーザー データに暗号署名するためのキーです。アプリケーション自体のデータを保護するために、開発者サーバーはセッション キーをアプレットに配信したり、このキーを外部に提供したりしないでください。
  2. 一時的なログイン資格情報コードは 1 回だけ使用できます

 
 

 
 

wx.login()

公文書

インターフェイスを呼び出して、ログイン資格情報 (コード) を取得します。資格情報を使用して、現在のミニ プログラムでのユーザーの一意の識別子 (openid)、WeChat オープン プラットフォーム アカウントの一意の識別子 (現在のミニ プログラムが WeChat オープン プラットフォームにバインドされている場合は unionid) を含む、ユーザーのログイン ステータス情報を交換します。アカウント) とこのログイン セッション キー (session_key) など。ユーザー データの暗号化と復号化の通信は、セッション キーに依存して完了する必要があります。

パラメータ

属性 タイプ デフォルト 必要 例証する
タイムアウト 番号 いいえ タイムアウト時間、単位 ms タイムアウト時間、単位 ms
成功 関数 いいえ インターフェイス呼び出しを成功させるためのコールバック関数
失敗 関数 いいえ インターフェイス呼び出し失敗のコールバック関数
完了 関数 いいえ インターフェイス呼び出しの終了のコールバック関数 (呼び出しは成功または失敗のいずれかで実行されます)

 

成功コールバック関数

属性 タイプ 例証する
コード ユーザーのログイン資格情報 ( 5 分間有効)。開発者は、開発者サーバーのバックグラウンドで auth.code2Session を呼び出し、コードを使用して openid、unionid、session_key およびその他の情報を交換する必要があります。

 

wx.login({
    
    
  success (res) {
    
    
    if (res.code) {
    
    
      //发起网络请求
      wx.request({
    
    
        url: 'https://example.com/onLogin',//开发的后台地址,传输code获取openid登录信息
        data: {
    
    
          code: res.code
        }
      })
    } else {
    
    
      console.log('登录失败!' + res.errMsg)
    }
  }
})

 
 

 
 

auth.code2Session

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

ログイン資格証明の検証。wx.loginインターフェイスを介して一時的なログイン資格情報コードを取得し、開発者サーバーに渡してこのインターフェイスを呼び出し、ログイン プロセスを完了します。

リクエストアドレス

GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

リクエストパラメータ

属性 タイプ デフォルト 必要 例証する
アピッド はい ミニプログラム appId
ひみつ はい アプレット appSecret
js_code はい ログイン時に取得したコード
grant_type はい 承認タイプ。ここに authorization_code を入力してください

アプレットの appId とアプレットの appSecret は、開発管理で見つけることができます
ここに画像の説明を挿入
ここに画像の説明を挿入

戻り値

属性 タイプ 例証する
openid 一意のユーザー ID
session_key セッションキー
組合 オープン プラットフォーム上のユーザーの一意の識別子。現在のミニ プログラムが WeChat オープン プラットフォーム アカウントにバインドされている場合は、返されます。
エラーコード 番号 エラーコード
エラーメッセージ エラーメッセージ

errcode の正当な値

価値 例証する
-1 システムがビジーです。しばらくしてからもう一度お試しください
0 成功したリクエスト
40029 コード無効
45011 頻度制限、1 ユーザーあたり 1 分あたり 100 回
40226 リスクの高いユーザーの場合、アプレットのログイン傍受。

 
 

 
 

 
 

戦闘

フロントエンドコード

WeChat アプレットのフロントエンドがコードを取得し、バックグラウンドに送信します。

wx.login({
    
    
  success (res) {
    
    
    if (res.code) {
    
    
      //发起网络请求
      wx.request({
    
    
        url: 'https://example.com/onLogin',//开发的后台地址,传输code获取openid登录信息
        data: {
    
    
          code: res.code
        }
      })
    } else {
    
    
      console.log('登录失败!' + res.errMsg)
    }
  }
})

 
 

 
 

バックエンド コード

バックグラウンドがコードを受け取り、コードを通じてユーザーの openid を取得します。

バックグラウンドがコードを受け取った後、WeChat バックグラウンド サーバーにアクセスしてユーザーの openid を取得するための http 要求を作成します. すべてが正常であれば、アプレットに対応するユーザーの openid とユーザーの個人的な Access_token を取得します.

使用される 2 つの依存関係:

<!--    json数据格式依赖    -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.79</version>
</dependency>
<!--    http请求工具包依赖    -->
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
/**
     * 获取微信的openid和session_key
     * @param code wx.login的code
     * @return 返回JSON:openid和session_key
     */
    public static JSONObject gainWxLogin(String code){
    
    
        String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + AppID + "&secret=" + AppSecret + "&js_code=" + code + "&grant_type=authorization_code";
        JSONObject jsonObject = null;
        try {
    
    
            HttpClient client = HttpClientBuilder.create().build();//构建一个Client
            HttpGet get = new HttpGet(url.toString());    //构建一个GET请求
            HttpResponse response = client.execute(get);//提交GET请求
            HttpEntity result = response.getEntity();//拿到返回的HttpResponse的"实体"
            String content = EntityUtils.toString(result);
            System.out.println(content);//打印返回的信息
            jsonObject = JSONObject.parseObject(content);//把信息封装为json
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        return jsonObject;
    }

バックエンドが取得する情報:
得られた情報
このようにして WeChat の openid が取得されます. 次のステップは、openid がデータベースに既に存在するかどうかを確認することです. 存在する場合はログインします. 存在しない場合は登録します.

おすすめ

転載: blog.csdn.net/qq_43448856/article/details/123784490