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'
参考までに、mysql-5.7.23-winx64 解凍版の詳細なインストールチュートリアルです。具...
HTML5 で contentEditable 属性が導入されて以来、div は textarea ...
はじめに:今日は、サーバー上のMySQLにリモート接続したいと思います。使用するソフトウェアはNav...
前回の記事では、クロステーブル更新について書きました。自分が書いた SQL を見たとき、自分がバカみ...
目次コンテナデータボリュームとはコンテナ データ ボリュームが必要なのはなぜですか?使用データボリュ...
画像タグは、Web ページに画像を表示するために使用されます。 HTML/XHTML 画像 <...
1. リンクの使用方法:コードをコピーコードは次のとおりです。 <a href="j...
問題を見つける最近、MySQL コマンドを使用して MySQL サーバーに接続したときに、以下のよう...
Docker は、安全で繰り返し可能な環境でソフトウェアを自動的にデプロイする方法を提供し、コンピュ...
ネイティブJSによって開始されたネットワークリクエストは、クエリ文字列の形でサーバーに送信されるため...
検索ページ: search.wxml ページ: <view class="form&...
目次1. プラグイン2. 幕間3. 実装4. 検証機能1. プラグインまず、私たちが選んだプラグイン...
前回の記事では、docker compose を使用して FastDfs ファイル サーバーをインス...
1. transform 属性を使用して、画像を拡大せずに表示します (パスの問題は必要に応じて修正...
MySQL で遅い SQL ステートメントを見つけるにはどうすればよいでしょうか?これは、多くの人を...