サーバーの構築には 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クエリ最適化テクニックの詳細な説明
tomcat の containerID を見つけて、tomacat ディレクトリに入ります。 [r...
Kubernetes は、基本認証、トークン認証、CA 認証の 3 種類の認証をサポートしています。...
目次序文1. リクエストをキャンセルする方法2. 重複リクエストの判定方法3. 繰り返しリクエストを...
設計意図ページを開発する際には、ページ上のナビゲーション メニューをクリックしたときにページを対応す...
これが何を指しているのかをどのように判断するのでしょうか? ①グローバル環境で呼び出された場合はwi...
コア資産管理プロジェクトでは、el-transfer にドラッグ アンド ドロップによる並べ替えと、...
目次1. docker環境が正常かどうかを確認する2. miniIOイメージをダウンロードする3. ...
Xhtml には、あまり使用されないが非常に便利なタグが多数あります。半分の労力で 2 倍の結果を達...
この記事では、jsネイティブカルーセルプラグインの具体的なコードを参考までに共有します。具体的な内容...
ページに複数の画像を導入すると、画像のサイズがばらつくことがあります。しかし、それらを一貫したサイズ...
<br />前回の記事:Webデザイン講座(7):Webページ制作の効率化1:必要な小言...
目次1. 準備2. 説明計画の概要3. フィールドの詳細な説明4. パーティションクエリにはパーティ...
Nginx は同じドメイン名で構成されており、http と https の両方でアクセスできます。証...
FORM 要素の enctype 属性は、フォーム データがサーバーに送信されるときに使用されるエン...
目次序文1. シングルユーザーモードでの一般的なバグ修正2. シングルユーザーモードでシステムパスワ...