1. まずは効果を見てみましょう インターフェース要求によって返されるデータ: 2. 公式ログインフローチャート 3. ミニプログラムのログインプロセス: 1. アプレットはwx.loginを呼び出す 2. ユーザーが承認されているかどうかを判断する 3. アプレットからwx.getUserInfoにアクセスする 4. ミニプログラムのjsコード: wx.ログイン({ 成功: 応答 => { // openId、sessionKey、unionIdと引き換えにres.codeをバックエンドに送信します コンソールログ(応答); var that = this; // ユーザー情報を取得する wx.getSetting({ 成功: res => { res.authSetting['scope.userInfo']の場合{ // すでに承認されているので、ポップアップウィンドウなしで直接 getUserInfo を呼び出してアバターのニックネームを取得できます wx.getUserInfo({ 成功: userResult => { var プラットフォームユーザー情報マップ = {} platUserInfoMap["encryptedData"] = userResult.encryptedData; platUserInfoMap["iv"] = userResult.iv; wx.リクエスト({ URL: 'http://127.0.0.1:5000/user/wxlogin', データ: { プラットフォームコード: 対応コード、 platUserInfoMap: platUserInfoMap、 }, ヘッダー: { 「コンテンツタイプ」: 「application/json」 }, メソッド: 'POST'、 データ型: 'json', 成功: 関数 (res) { コンソール.log(res) wx.setStorageSync("userinfo", res.userinfo) //ローカルキャッシュを設定する }, fail: function (err) { }, // リクエストが失敗しました complete: function () { } // リクエストが完了した後に実行される関数 }) } }) } } }) } }) 5. バックエンド サーバーは code2session にアクセスし、code2Session API インターフェイスを通じて実際に必要な WeChat ユーザーのログイン 6. バックエンド サーバーはユーザー情報を検証し、 { "オープンID": "オープンID", "ニックネーム": "ニックネーム", 「性別」: 性別、 "都市": "都市", "州": "州", "国": "国", "アバターURL": "AVATARURL", "unionId": "UNIONID", "透かし": { "appid":"アプリID", "タイムスタンプ":タイムスタンプ } } 7. 新しい復号化ファイルを作成する - WXBizDataCrypt.py
base64をインポート jsonをインポート Crypto.CipherからAESをインポート クラス WXBizDataCrypt: def __init__(自分、アプリID、セッションキー): 自己.appId = アプリID self.sessionKey = セッションキー def decrypt(self, 暗号化されたデータ, iv): # base64 デコード セッションキー = base64.b64decode(self.sessionKey) 暗号化されたデータ = base64.b64decode(暗号化されたデータ) iv = base64.b64デコード(iv) 暗号 = AES.new(セッションキー、AES.MODE_CBC、iv) 復号化 = json.loads(self._unpad(cipher.decrypt(encryptedData))) 復号化された['watermark']['appid'] != self.appIdの場合: 例外を発生させる('無効なバッファ') 復号化されたものを返す _unpad を定義します。 s[:-ord(s[len(s)-1:])] を返す 8. Flask の json、リクエストをインポート WXBizDataCrypt から WXBizDataCrypt をインポート FlaskからFlaskをインポート @app.route('/user/wxlogin', メソッド=['GET','POST']) user_wxlogin() を定義します: data = json.loads(request.get_data().decode('utf-8')) # フロントエンドのJsonデータを辞書に変換します appID = 'appID' # WeChatアプレットの開発者のappID appSecret = 'appSecret' # WeChat ミニプログラム用の開発者の appSecret code = data['platCode'] # フロントエンドPOSTから送信されたWeChat一時ログイン認証コード 暗号化されたデータ = データ['platUserInfoMap']['暗号化されたデータ'] iv = データ['platUserInfoMap']['iv'] 要求パラメータ = { 'appid': アプリID、 'シークレット': アプリシークレット、 'js_code': コード、 'grant_type': 'authorization_code' } wx_login_api = 'https://api.weixin.qq.com/sns/jscode2session' response_data = requests.get(wx_login_api, params=req_params) # API への GET リクエストを開始します resData = response_data.json() openid = resData ['openid'] # 現在のアプレットのユーザーの OpenID を取得します session_key = resData ['session_key'] # 現在のアプレットのユーザーのセッションキー session_key を取得します pc = WXBizDataCrypt(appID, session_key) #ユーザー情報を復号化 userinfo = pc.decrypt(encryptedData, iv) #ユーザー情報を取得 print(userinfo) ''' 次の部分では、データベースにユーザーが存在するかどうかを判断して、カスタムログイン状態を追加するか返すかを決定します(ユーザーが存在しない場合は追加し、ユーザーが存在する場合はユーザー情報を返します) --------少し少し少し少し少し少し少し少し少し------------- この部分はスキップして、データベース内のユーザーを操作します。 json.dumpsを返す ({ "code": 200、"msg": "ログイン成功"、"userinfo": userinfo}、indent=4、sort_keys=True、default=str、ensure_ascii=False) 要約する Python Flask WeChat アプレットのログイン詳細とログイン API 実装に関するこの記事はこれで終わりです。Python Flask WeChat アプレットのログイン詳細とログイン API 実装に関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Vueは3段階のナビゲーション表示と非表示を実装します
>>: mysql: [エラー] 不明なオプション '--skip-grant-tables'
HTML で余分なテキストを省略記号として表示したい場合は、いくつかの方法があります。 1行テキスト...
src と href には違いがあり、混同される可能性があります。 src は現在の要素を置き換える...
1. openjdkを表示する rpm -qa|grep jdk 2. openjdk を削除します...
html.cssオーバーフローの包括的な理解XML/HTML コードコンテンツをクリップボードにコピ...
JDKのインストールシステムのインストールについてはあまり詳しく説明しません。インストール手順はオン...
1. nginx はなぜ gzip を使用するのですか? 1. 圧縮の役割:ページがgzipで圧縮さ...
ソース ファイルを右クリックすると、次のコードが見つかります。 1. CSSを使用してFirefox...
NetEase Blog で HTML を使用する場合、テンプレートに直接コードを追加できることは...
目次1.Linuxログインインターフェース2. コードを書く3. Makefileを書く4. コンパ...
注意: 他のマシン (IP) は、承認なしではクライアント経由で MySQL データベースに接続でき...
Vue プロジェクトで div ホイールのズームインとズームアウト、ドラッグ効果、キャンバス効果に似...
目次序文コードの実装アイデア 1アイデア2要約する参照ドキュメント序文プロジェクト内の小さな要件ポイ...
この記事には、細かい点は一切なく、カラーマッチングのテクニックをシェアするだけです。とてもシンプルで...
http1.1 プロトコルのデフォルトのリクエスト ヘッダーでは、図に示すように、デフォルトで ke...
この記事では主に Vue プロジェクトを紹介します。要素の導入を前提として、コンポーネントを 2 回...