サーバーの構築には 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クエリ最適化テクニックの詳細な説明
目次1. Vueにおけるwatchの役割はその名の通り、監視の役割です。 2. このオブジェクトのプ...
ブロックレベル要素の機能: • 常に新しい行から始まり、それ自体で 1 行を占め、後続の要素も新しい...
目次01 sql_slave_skip_counter パラメータ02 スレーブスキップエラーパラメ...
目次フレーム最高レベルのエラー報告活発なコミュニティとチーム冗談モカ推奨プラグインVue テストライ...
多くの場合、ローカル データベースのデータをエクスポートしたり、他のデータベースからデータをインポー...
目次序文パブリッシュ・サブスクライバ・パターン結果電話要約する序文双方向データ バインディングとは、...
HTML フォーム タグのチュートリアル。このセクションでは、主に Web ページで INPUT タ...
目次効果のデモンストレーション:メインJSコード実装 <div class="box...
<br />Web2.0とは何ですか? Web2.0にはソーシャルネットワーク製品とその...
SQLのlike文では、例えば SELECT * FROM user WHERE username...
この記事では、Web ページ制作を学ぶ過程で習得すべきテクニックの一部を詳しく紹介します。これらの内...
bitronix を使用して MySQL に接続するときの MySQLSyntaxErrorExce...
この記事では、vueの大画面表示適応の具体的なコードを参考までに紹介します。具体的な内容は以下のとお...
1. Animate.css の紹介Animate.css は、Web プロジェクトですぐに使用で...
すべてには基礎が必要です。家を建てるには基礎が必要です。方程式を解くには、まず九九を覚える必要があり...