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'
インターネットは人々の生活にますます欠かせないものになってきていると思います。 Ajax や fle...
今日は、企業の実際の本番環境でよく遭遇する、Nginx を新しいバージョンにアップグレードし、古いバ...
目次長すぎて読めないコンポーネントスタイルの分離デモテスト優先度ページの分離構成参考文献ネイティブ ...
知らせ! ! ! uid が (a,b,c,null) に含まれないユーザーから * を選択します。...
なぜ Nexus プライベート サーバーを構築する必要があるのでしょうか。その理由は非常に簡単です。...
ウェブページでEnterキーを押すと、フォームは自動的に送信され、他のページに移動します。クエリフォ...
主に使用される知識ポイント: •css3 3D変換 •ネイティブjsマウスドラッグイベント•表示:グ...
目次推測する事例:理解を深める参照する後で忘れないように、キーワード infer をメモしておきます...
目次uni-app のスタイル要約するuni-app のスタイルsassプラグインは公式ウェブサイト...
序文場合によっては、次の図のような浮動効果の要件が必要になります。 成し遂げる標準的な通常の状況では...
開発環境ウィンドウ開発ツール Visual Studio Codeノードのインストールとnpm Wi...
このタグはHTML3.2の一部ではなく、MSIE3以降のカーネルでのみサポートされているため、IEカ...
公式チュートリアルに従って、インストール パッケージをダウンロードし、[インストール] をクリックし...
目次シナリオタスクアイデア分析するコンセプトと選択ちょっとしたテスト環境説明予防実践テスト引用シナリ...
まずサンプルコードを見てみましょう: 1. 共通パラメータ tcpdump -i eth0 -nn ...