サーバーの構築には node.js を選択しました。まだインストールしていない方は、私の他の node.js ブログを参照してください。 サーバーのインストールと構成プロジェクトを初期化すると、package.json 構成ファイルが自動的に作成されます。 npm 初期化 -y Express フレームワークとリクエスト モジュールをインストールします。 npm インストールエクスプレス –save npm インストールリクエスト --save ファイルの変更を監視するには、nodemon をインストールします (すでにインストールされている場合は、この手順をスキップします)。 npm インストール nodemon -g コーディング上記のコマンドを実行した後、プロジェクト ディレクトリに app.js ファイルを作成し、次のコードを記述します。 Express フレームワークとリクエスト モジュールを導入し、appid とシークレットを構成します。 定数 express = require('express') const bodyParser = require('body-parser') const リクエスト = require('リクエスト') const app = express() app.use(bodyParser.json()) 定数wx = { appid: '', // 開発者のAppIDを入力する必要があります secret: '' // 開発者のAppSecretを入力する必要があります } データベースをシミュレートします。 (この場合、配列を使用します。データベースの設定はかなり複雑なので、ここでは説明しません。私のブログで他の node.js+mysql プロジェクトを参照できます。) var db = { // シミュレートされたデータベース session: {}, // openid と session_key のセッション情報を保存 user: {} // ユーザー名、ポイントなどのユーザーレコードを保存します。} ログイン インターフェイスを要求し、ログイン資格情報の WeChat インターフェイス URL アドレスを確認します。 app.post('/login', (req, res) => { var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + wx.appid + '&secret=' + wx.secret + '&js_code=' + req.body.code + '&grant_type=認可コード' リクエスト(url, (err, レスポンス, 本文) => { if(){ // このコードは session.openid が存在するかどうかを判断します} } res.json({トークン:トークン}) }) }) セッション内の openid ステートメント コードを決定します。 セッションIDがopenidの場合 var セッション = JSON.parse(本文) // トークンを生成するために使用 var トークン = 'token_' + 新しい Date().getTime() db.session[トークン] = セッション } アクセスインターフェース3000を設定 app.listen(3000, () => { console.log('http://127.0.0.1:3000 でサーバーが稼働しています') }) 整理しておきました ここでappidとsession_keyを復号化する必要があるため、WeChatのWXBizDataCrypt関数が使用されます。 var 暗号 = require('暗号') 関数 WXBizDataCrypt(appId, sessionKey) { this.appId = アプリID this.sessionKey = セッションキー } WXBizDataCrypt.prototype.decryptData = 関数 (暗号化されたデータ、iv) { // base64 デコード var sessionKey = 新しいバッファ(this.sessionKey、'base64') 暗号化されたデータ = 新しいバッファ(暗号化されたデータ、'base64') iv = 新しいバッファ(iv, 'base64') 試す { // 復号化 var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv) // 自動パディングを true に設定し、パディングを削除します。decipher.setAutoPadding(true) var デコード = decipher.update(encryptedData, 'binary', 'utf8') デコード += decipher.final('utf8') デコード = JSON.parse(デコード) } キャッチ (エラー) { 新しいエラーをスローします('不正なバッファ') } デコードされたウォーターマークのアプリIDがthis.appIdと等しい場合{ 新しいエラーをスローします('不正なバッファ') } デコードされた戻り値 } モジュール.エクスポート = WXBizDataCrypt app.jsのコード全体は次の通りです。 // 暗号化と復号化 const crypto = require('crypto'); 定数 WXBizDataCrypt = require('./WXBizDataCrypt') 定数 express = require('express') const bodyParser = require('body-parser') const リクエスト = require('リクエスト') const app = express() app.use(bodyParser.json()) 定数wx = { アプリID: ''、 秘密: '' } var db = { セッション: {}, ユーザー: {} } app.post('/login', (req, res) => { // 注意: ミニプログラム側の appid は実際のアカウントを使用する必要があります。テストアカウントを使用すると、ログインコードエラーが発生します console.log('ログインコード: ' + req.body.code) var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + wx.appid + '&secret=' + wx.secret + '&js_code=' + req.body.code + '&grant_type=authorization_code' リクエスト(url, (err, レスポンス, 本文) => { console.log('セッション: ' + 本文) var セッション = JSON.parse(本文) セッションIDがopenidの場合 var トークン = 'token_' + 新しい Date().getTime() db.session[トークン] = セッション if(!db.user[session.openid]) { db.user[セッション.openid] = { クレジット: 100 } } } res.json({ トークン: トークン }) }) }) app.get('/checklogin', (req, res) => { var セッション = db.session[req.query.token] console.log('checklogin: ', セッション) // ユーザーがクライアントにログインしているかどうかのブール値を返します res.json({ is_login:セッション !== 未定義 }) }) app.get('/credit', (req, res) => { var セッション = db.session[req.query.token] if(セッション&& db.user[session.openid]) { res.json({ クレジット: db.user[session.openid].credit }) } それ以外 { res.json({ エラー: 'ユーザーが存在しないか、ログインされていません。 ' }) } }) app.post('/userinfo', (req, res) => { // セッション値を取得する var session = db.session[req.query.token] console.log('セッション:' + セッション) if(セッション) { // appid と session_key を使用して、encryptedData を復号化する var pc = 新しい WXBizDataCrypt(wx.appid、session.session_key) var データ = pc.decryptData(req.body.encryptedData, req.body.iv) console.log('復号後:', データ) // rawData が正しいか確認する var sha1 = crypto.createHash('sha1') sha1.update(req.body.rawData + session.session_key) var signature2 = sha1.digest('hex') コンソール.log(署名2) console.log(req.body.signature) res.json({ パス: signature2 === req.body.signature }) } それ以外 { res.json({ エラー: 'ユーザーが存在しないか、ログインされていません。 ' }) } }) app.listen(3000, () => { console.log('http://127.0.0.1:3000 でサーバーが稼働しています') }) サーバーを起動する上記のコードを保存し、コンソールまたは Powershell または Linux ターミナルを開き、次のステートメントを実行して、サーバーの 3000 をサーバー アクセス用に開きます。 ノードモンアプリ.js WeChatミニプログラムのユーザーログインモジュールのサーバー構築方法についてはこれで終わりです。WeChatミニプログラムのログインモジュールのサーバー構築の詳細については、123WORDPRESS.COMの以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も123WORDPRESS.COMを応援してください。 以下もご興味があるかもしれません:
|
<<: Docker 学習: コンテナ コンテナの具体的な使用方法
>>: MySQL数千万の大規模データに対する30のSQLクエリ最適化テクニックの詳細な説明
環境説明:実行中の MySQL 環境があります。以前の構成ファイルの設定が単純すぎたため (inno...
<frameset></frameset>は皆さんもよくご存知のものです。こ...
以前は、スクリプトは HTML 内のどこにでも配置できると思っていましたが、今日、要件に取り組んでい...
目次JavaScript オブジェクト1. 定義2. オブジェクトの分類3. オブジェクトを定義する...
序文WeChat アプレットでは、App.js の globalData を中間ブリッジとして使用し...
ssh に入り、次のコマンドを入力してパスワードをリセットします (コマンドの末尾の「testpas...
序文この記事では、MySQL 8.0 の新機能を使用して再帰クエリを実装します。詳細なサンプル コー...
Linux chmodコマンドを使用して、ターゲット ファイルにアクセス、読み取り、書き込み、または...
目次v-model 入力で双方向バインディングデータを使用するコンポーネント内の v-model他の...
質問アップロードするファイルのタイプを accept に追加することは、「表面的な」役割しか果たしま...
Docker は、安全で繰り返し可能な環境でソフトウェアを自動的にデプロイする方法を提供し、コンピュ...
コードをコピーコードは次のとおりです。 <!DOCTYPE HTML PUBLIC "...
MySQL ストアド プロシージャ1. ストアドプロシージャ構文(フォーマット)を作成する 区切り文...
目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...
ホスト名を変更する場合は、以下の手順に従ってください。ホスト名の使用hostnameコマンドを使用す...