サーバーの構築には 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クエリ最適化テクニックの詳細な説明
序文:今日、「<!DOCTYPE> タグを注意深く理解しましたか?」と尋ねられました。私...
Dockerコンテナのマウントディレクトリ情報のみを表示する docker 検査 --format ...
1. プリコンパイルの利点私たちは皆、プリコンパイル機能を備えた JDBC の PreparedSt...
この記事では、参考までに天気予報を実装するためのVueの具体的なコードを紹介します。具体的な内容は次...
1. Dockerネットワークモードdocker run が Docker コンテナを作成するときに...
まず、docker に openssh-server をインストールします。インストールが完了したら...
Linux に nginx と複数の tomcat をインストールする方法はここでは紹介しません。不...
導入インターネット アプリケーションの普及に伴い、膨大なデータの保存とアクセスがシステム設計における...
目次1. モジュラーコンセプト2. モジュール化3. モジュール化プロセス1. 通常の記述(グローバ...
序文この記事は私自身の製作過程の簡単な記録です。練習中に質問があれば、一緒に話し合うことができます。...
データベースに関して最もよく聞かれる質問の 1 つは、現在のビジネス ニーズを満たす MySQL の...
HTML を学習したり使用したりしたことがある人なら、<a> タグについてよく知っている...
最近ブログに書いたのですが、プロジェクトリストの中に写真がたくさんあり、最初は読み込みが遅いので、ス...
環境の紹介オペレーティングシステム: Centos 7.4 Zabbix バージョン: zabbix...
目次DOMContentLoadedとロードjs ブロッキングとは何ですか? CSS ブロッキングと...