サーバーの構築には 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クエリ最適化テクニックの詳細な説明
仮想化ソフトウェアをインストールする仮想マシンにオペレーティング システムをインストールする前に、ホ...
この記事では、参考までに、Navicatを使用してCSVファイルをMySQLにインポートするための具...
Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...
目次Linux での Hbase のインストールと設定1. Hbaseインストールパッケージをダウン...
目次1. 左端接頭辞原則2. 表に戻る3. インデックスプッシュダウン序文:インデックス プッシュダ...
この記事では、jQueryブリージングカルーセル制作原理の具体的なプロセスを参考までに紹介します。具...
ポートが占有されているかどうかは、これまで一度もわかりませんでした。多くの人に尋ねて、ようやくわかり...
1. イメージをプルするdocker pull レジストリ.cn-hangzhou.aliyuncs...
目次1. ジョブ実行のフォールトトレランス1.1 タスクフェイルオーバー戦略1.2 ジョブ再開戦略2...
目次序文事例: JD.com の虫眼鏡効果の模倣オフセットシリーズクライアントシリーズスクロールシリ...
まず、行の高さが要素の高さと等しい場合にテキストが垂直方向に中央揃えにならない理由を説明します。実際...
css-vars-ポニーフィルCSS 変数を使用して Web ページのスキニングを実現すると、互換...
ページをナビゲートする2つの方法宣言型ナビゲーション: リンクをクリックしてナビゲーションを実現する...
本から学ぶことは常に浅はかで、これがさらなるダウンタイムを引き起こすことには決して気づきません......
ハイパーフ公式サイトHyperf 公式ドキュメントのインストール1. Dockerの使用docker...