はじめに:nodejs+redis パッケージを使用して WeChat シーンの QR コード URL 構成開発を取得することについての深い理解
- 外部ネットワークからアクセスできるドメイン名が必要です。一時的にドメイン名が無い場合は、ピーナツの殻を使って内部ネットワークに侵入することができます。この点は一時的にのみ使用でき、長期間使用することはできません。この記事では、ピーナッツシェルの内部ネットワーク侵入を例として、その入手方法を説明しています WeChat が提供する QR コードの URL アドレスは、以下をお読みください
- まずローカル コールバック インターフェイスを作成します
http://127.0.0.1:8081/api/wxLogin/v1/callback
- ステップ 1: Nodejs プロジェクトのルート ディレクトリのルーター フォルダーに wxLogin.js を作成し、特に WeChat ログインに関連するインターフェイスを保存します。具体的なコードは次のとおりです。
const express = require('express') const router = express.Router() const wxLoginController = require('../controller/WxLoginController') // 微信登录回调接口 router.get('/callback',wxLoginController.wechatInsert) module.exports = router
- ステップ 2: Nodejs プロジェクトのルート ディレクトリにある app.js ファイル内のインターフェイスの権限検証を除外する コードは次のとおりです。
// 用户认证中间件 app.use(jwt({ secret: jwtSecretKey, algorithms: ['HS256'] }).unless({ path: [ /^\/api\/wxLogin\/v1/, //微信登录通知接口排除 ] })) // 用户相关的接口 const wxLoginRouter = require('./router/wxLogin') app.use('/api/wxLogin/v1',wxLoginRouter)
- ステップ 3: Nodejs プロジェクトの制御層コントローラー フォルダーに新しい WxLoginController.js ファイルを作成して、WeChat のアクセス ステータスを確認します。
/** * @param wechatInsert 验证微信接入 */ const WxLoginService = require("../service/wxLoginservice") const WxLoginController = { wechatInsert:(req,res) =>{ // 从微信服务器拿对称加密的参数 let { signature,timestamp,nonce,echostr} = req.query let handleRes = WxLoginService.wechatInsert(signature,timestamp,nonce,echostr) res.send(handleRes) // 把结果返回给微信服务器 } } module.exports = WxLoginController
- ステップ 4: データ層で、トークン、タイムスタンプ、ノンスの 3 つのパラメーターを辞書順に並べ替え、文字列に連結し、sha1 暗号化を実行します。具体的なコードは次のとおりです。
const SecretTool = require("../utils/SecretTool") const WxLoginService = { wechatInsert:(signature,timestamp,nonce,echostr) => { let token = 'expert' let str = SecretTool.sha1([token,timestamp,nonce].sort().join('')) if(str == signature) { return echostr } } // sha1加密算法,需要先使用npm或yarn安装一下,代码如下: const sha1 = require('sha1') class SecretTool { // sha1加密 static sha1(query) { return sha1(query) } } module.exports = SecretTool
- ここでは、WeChat サーバーに正常に接続されているかどうかを確認します。検証のためにこの URL を WeChat 公式アカウントの背景に追加します。検証に合格した場合は、[保存] をクリックするとプロンプトが表示されます
- 詳細については、ドキュメント アクセス ガイドを参照してください: https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
- ステップ 1: Nodejs プロジェクトのルート ディレクトリのルーター フォルダーに wxLogin.js を作成し、特に WeChat ログインに関連するインターフェイスを保存します。具体的なコードは次のとおりです。
- コールバック インターフェイスが実行されたため、ダウンしても構いません
-
次に、WeChat QRコードのURLアドレスを取得するには、まずアクセストークンを取得する必要があります
-
具体的な取得方法については公式ドキュメントを参照してください: https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
-
インターフェイスの入力パラメータには次のものが含まれます: 1. Grant_type、access_token の取得、および client_credential の入力; 2. appid、つまり開発者 ID - 公式アカウントのバックグラウンドで取得できます; 3. Secret、つまり開発者の IDパスワード - 公式アカウントのバックグラウンドで取得でき、パラメータはすべて準備ができており、インターフェースを開発できます
- 最初のステップは、WeChat ログイン インターフェイスを作成し、nodejs プロジェクトのルーター フォルダー内の wxLogin.js にログイン インターフェイスを追加することです。コードは次のとおりです。
// 获取微信二维码接口 router.get('/login',wxLoginController.login)
- 2 番目のステップは、制御層でフロントエンド呼び出しインターフェイスを受信し、その結果をフロントエンドに返すことです。具体的なコードは次のとおりです。
login:async (req,res) => { let handleRes = await WxLoginService.login() res.send(handleRes) }
- ステップ 3: データ層で QR コード URL を取得し、取得した結果を Redis キャッシュに保存します
login: async () => { // 获取二维码url let { qrcodeUrl,ticket} = await getQR() // 将ticket存入redis缓存 let key = `wechat:ticket:${ ticket}` redisConfig.set(key, JSON.stringify({ isScan:'no'}),300) return BackCode.buildSuccessAndData({ data:{ qrcodeUrl,ticket}}) }
- 4番目のステップは、構成層でWeChatのaccess_tokenを取得し、呼び出し用のチケットをデータ層に提供することであり、事前に準備したappidとappsecretを使用する必要があります。具体的なコードは次のとおりです:
- コード実装ロジックについては、公式ドキュメントを参照してください: https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.htmlおよびhttps://developers.weixin.qq.com/doc/offiaccount/Account_Management /Generating_a_Parametric_QR_Code.html
const axios = require('axios') const appId = 'XXX' const appSecret = 'XXX' const accessTokenPC = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${ appId}&secret=${ appSecret}` const qrUrl = 'https://mp.weixin.qq.com/cgi-bin/showqrcode' // 获取微信access_token const getAccessToken = () => { return axios({ method: 'get', url: accessTokenPC }) } // 获取拼接微信二维码url的ticket const getTicket = (token) => { return axios({ method: 'post', url: `https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=${ token}`, data: { expire_seconds: 60 * 2, action_name: "QR_SCENE", action_info: { "scene": { "scene_id": 123 } } } }) } // 获取微信二维码url const wechatLogin = { getOR: async () => { let token = (await getAccessToken()).data.access_token let ticket = (await getTicket(token)).data.ticket return { qrcodeUrl: `${ qrUrl}?ticket=${ ticket}`, ticket: ticket } } } module.exports = wechatLogin
-
- これで完了です。APIFOX で WeChat ログイン インターフェイスを呼び出すことができます。http://127.0.0.1:8081/api/wxLogin/v1/login はチケットと WeChat QR コードの URL を返します。
- まずローカル コールバック インターフェイスを作成します