Использование Node.js в качестве сервера для backend-сервера WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для backend-сервера WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для backend-сервера WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для backend-сервера WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для backend-сервера WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.Использование Node.js в качестве сервера для backend-сервера официального аккаунта WeChat позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.Использование Node.js в качестве сервера для backend-сервера WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.Использование Node.js в качестве сервера для backend-сервера WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для backend-сервера WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для backend-сервера WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.Использование Node.js в качестве сервера для后台服务器微信官方账号 позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Исправленный текст: Использование Node.js в качестве сервера для бэкенд-сервера WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.Использование Node.js в качестве сервера для WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.Использование Node.js в качестве сервера для официального аккаунта WeChat позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.Использование Node.js в качестве сервера для WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для WeChat официального аккаунта позволяет реализовать следующие функции: проверку токена, получение и периодическое обновление токена, а также ответ на сообщения WeChat.Использование Node.js в качестве сервера для официального аккаунта WeChat позволяет реализовать следующие функции: проверку токена, получение и регулярное обновление токена, а также ответ на сообщения WeChat.Использование Node.js в качестве сервера для официального аккаунта WeChat позволяет реализовать следующие функции: проверку токена, получение и регулярное обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для официального аккаунта WeChat позволяет реализовать следующие функции: проверку токена, получение и регулярное обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для официального аккаунта WeChat позволяет реализовать следующие функции: проверку токена, получение и регулярное обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для официального аккаунта WeChat позволяет реализовать следующие функции: проверку токена, получение и регулярное обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для официального аккаунта WeChat позволяет реализовать следующие функции: проверку токена, получение и регулярное обновление токена, а также ответ на сообщения WeChat.
Использование Node.js в качестве сервера для официального аккаунта WeChat позволяет реализовать следующие функции: проверку токена, получение и регулярное обновление токена, а также ответ на сообщения WeChat.Использование Node.js в качестве сервера для официального аккаунта WeChat позволяет реализовать следующие функции: проверку токена, получение и регулярное обновление токена,## Запрос тестового аккаунта
Сначала войдите в WeChat Public Platform, выберите свой аккаунт и войдите в систему. После успешного входа нажмите на инструменты разработчика и выберите тестовый аккаунт публичной платформы.
После входа вы можете запросить тестовый аккаунт, который позволяет использовать все продвинутые интерфейсы. Здесь вам нужно настроить адрес интерфейса для онлайн использования. В процессе проверки токена и отправки/получения сообщений WeChat будет обращаться к указанному адресу. Здесь рекомендуется использовать удобный инструмент проброса внутренней сети, который позволяет отображать локальный адрес проекта на внешнем IP-адресе, что облегчает отладку.Маленький шарик внутреннего проброса
Здесь я сгенерировал онлайн-адрес http://songzx.ngrok2.xiaomiqiu.cn/, далее мы будем использовать этот адрес как адрес конфигурации интерфейса для публичного аккаунта
Сначала создаем пустой проект на Node.js
npm init -y
Затем устанавливаем некоторые часто используемые зависимости
npm install express
Затем создаем файл index.js
в корневом каталоге проекта, начальный код следующий```js
const express = require("express")
const app = express()
app.get("/", (req, res) => { res.send('Привет, мир') })
app.listen(8088, () => { console.log("Запущен на 127.0.0.1:8088"); })
Затем запускаем проект и обращаемся к нему через браузер по адресу `127.0.0.1:8088`, можно увидеть следующий результат, что указывает на успешное запуск сервиса

Теперь мы реализуем логику проверки токена
Сначала установим следующие зависимости для шифрования
```shell
npm install crypto
Затем создаем два файла util
и router
, которые будут содержать наши общие методы и методы для обычных запросов
Затем создаем файл util -> validateToken.js
, код следующий, этот метод специально предназначен для проверки токена, переданного WeChat
var crypto = require("crypto");
// Метод шифрования
function sha1(str) {
var md5sum = crypto.createHash("sha1");
md5sum.update(str);
str = md5sum.digest("hex");
return str;
}
// Проверка токена
function validateToken(req) {
return new Promise((resolve, reject) => {
let query = req.query;
let signature = query.signature;
let echostr = query["echostr"];
let timestamp = query["timestamp"];
let nonce = query["nonce"];
let oriArray = new Array();
oriArray[0] = nonce;
oriArray[1] = timestamp;
oriArray[2] = "admin123"; // Это токен, указанный в конфигурации интерфейса публичного аккаунта
oriArray.sort();
let original = oriArray.join("");
let scyptoString = sha1(original);
if (signature == scyptoString) {
// Проверка пройдена, возвращаем echostr
resolve(echostr);
} else {
reject(false);
}
});
}
// Экспортируем метод проверки токена
module.exports = validateToken;
```Затем создаем файл `router-weChat.js`, этот файл предназначен для обработки запросов, отправленных WeChat. В этом файле пишем следующий код:
```js
const express = require("express");
const router = express.Router(); // Конфигурация модуля маршрутизации
const validateToken = require("../util/validateToken");
// Проверка токена при GET-запросе
router.get("/", (req, res) => {
validateToken(req).then((t) => {
res.send(t);
});
});
// Экспорт маршрута
module.exports = router;
Последнее изменение файла index.js
заключается в том, чтобы импортировать новый файл router-weChat.js
.
const express = require("express");
const app = express();
const path = require("path");
const weChat = require(path.resolve(__dirname, "./router/weChat"));
app.use(weChat);
app.listen(8088, () => {
console.log("running 127.0.0.1:8088");
});
Теперь мы можем протестировать это на странице настройки WeChat.
Если на странице появится сообщение "Настройка успешна", это означает, что наша проверка токена завершена.
Для получения токена в WeChat необходимо отправить GET-запрос. Токен имеет срок действия, поэтому нам нужно сохранять его и периодически обновлять, чтобы обеспечить его актуальность.
Описание получения токена от WeChat
Инструкции по вызову интерфейса:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
Для выполнения запросов нам потребуется библиотека axios
. Установим её:npm install axios
Затем создадим файл public/token.json
в корневом каталоге для хранения полученного токена. Содержимое файла json
должно быть пустым.
Создадим файл util/tokenConfig.js
с кодом:
const fs = require("fs");
const path = require("path");
const axios = require("axios");
const fileUrl = path.resolve(__dirname, "../public/token.json");
const APPID = "wx2188729b190d357d"; // APPID тестового аккаунта
const APPSECRET = "d976b0e6262b829ba003e9a24032447c"; // APPSECRET тестового аккаунта
let INTERVALTIME = (7200 - 60) * 1000; // Установка интервала для периодического получения токена
// Сохранение токена
function setToken() {
return new Promise((resolve, reject) => {
axios
.get(
`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`
)
.then((res) => {
// Обновление времени истечения токена, каждый раз обновляем токен через это время
INTERVALTIME = (res.data.expires_in - 60) * 1000;
// Сохранение токена в JSON-файле
fs.writeFile(
fileUrl,
JSON.stringify({
token: res.data.access_token,
}),
() => {
// Уведомление о успешном получении токена
resolve();
}
);
});
});
}
function timingSetToken() {
// Периодическое обновление токена
setInterval(() => {
setToken();
}, INTERVALTIME);
}
// Получение токена
function getToken() {
return new Promise((resolve, reject) => {
// Чтение сохраненного токена из JSON
fs.readFile(fileUrl, (err, data) => {
// Возврат полученного токена
resolve(JSON.parse(data).token);
});
});
}
```// Экспорт упакованных методов
module.exports = {
setToken, // Обновление токена
getToken, // Возврат полученного токена
timingSetToken, // Периодическое обновление токена
};
Затем в `router -> weChat.js` импортируем `tokenConfig.js`
```js
const express = require("express");
const router = express.Router(); // Настройка маршрута
const validateToken = require("../util/validateToken");
const { setToken, timingSetToken } = require("../util/tokenConfig");
// При запуске проекта автоматически вызывается метод получения токена
setToken().then(() => {
// После успешного получения токена начинается периодическое обновление токена
timingSetToken();
});
// GET запрос для проверки валидности токена
router.get("/", (req, res) => {
validateToken(req).then((t) => {
res.send(t);
});
});
// Экспорт маршрута
module.exports = router;
Теперь при запуске проекта автоматически вызывается метод получения токена, затем из этого токена вычитается 60 секунд для плавного перехода к следующему токену, и каждые INTERTIME
секунд токен обновляется.
Токен записывается в JSON файл, и его можно получить из любого файла следующим образом:
const { getToken } = require("./util/tokenConfig");
// Вызов упакованного метода получения токена
getToken().then((token) => {
console.log(token); // 45_7k55HHRaYxM4MkD4aREraHZpgdjmT......
});
Официальное описание получения сообщенийКратко: при отправке сообщения в WeChat-аккаунт, WeChat отправляет POST-запрос на указанный адрес с параметрами в виде XML-текста. Необходимо распарсить этот XML и ответить XML-строкой в определенном формате, указанным WeChat.Примечание: ответ должен быть в формате XML-строки. Сначала установите зависимости для парсинга параметра xml
в запросе post
npm install express-xml-bodyparser
Затем в файле index.js
импортируйте и настройте middleware
const express = require("express");
const app = express();
const path = require("path");
const weChat = require(path.resolve(__dirname, "./router/weChat"));
const xmlparser = require('express-xml-bodyparser'); // парсинг xml
app.use(express.json());
app.use(express.urlencoded());
app.use(xmlparser());
app.use(weChat);
app.listen(8088, () => {
console.log("running 127.0.0.1:8088");
});
Затем в файле weChat.js
добавьте обработку запроса post
, чтобы вывести, что нам отправляет WeChat
// обработка запроса post для сообщений, отправленных WeChat
router.post("/", (req, res) => {
console.log(req.body);
res.send("");
});
Перезапустите проект и отправьте любое сообщение в ваш WeChat-канал
После парсинга параметры будут следующими
{
xml: {
tousername: [ 'gh_a0f004c20d2b' ],
fromusername: [ 'olttN6WJOYe-lTysV8_tsnZ7-HMQ' ],
createtime: [ '1621416487' ],
msgtype: [ 'text' ],
content: [ 'hello' ],
msgid: [ '23213103466653274' ]
}
}
Получив параметры, вы можете определить тип сообщения по параметру msgtype
, а также content
содержит текст сообщения. Получив параметры, следующим шагом будет ответ на сообщение
Официальная документация по ответу на сообщение```js
// Ответ текстовым сообщением
exports.textMessage = function (message) {
var createTime = new Date().getTime();
return <xml> <ToUserName><![CDATA[${message.FromUserName}]]></ToUserName> <FromUserName><![CDATA[${message.ToUserName}]]></FromUserName> <CreateTime>${createTime}</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[${message.reply}]]></Content> </xml>
;
};
// Ответ изображением
exports.imageMessage = function (message) {
var createTime = new Date().getTime();
return <xml> <ToUserName><![CDATA[${message.FromUserName}]]></ToUserName> <FromUserName><![CDATA[${message.ToUserName}]]></FromUserName> <CreateTime>${createTime}</CreateTime> <MsgType><![CDATA[image]]></MsgType> <Image> <MediaId><![CDATA[${message.mediaId}]]></MediaId> </Image> </xml>
;
};
// Ответ голосовым сообщением
exports.voiceMessage = function (message) {
var createTime = new Date().getTime();
return <xml> <ToUserName><![CDATA[${message.FromUserName}]]></ToUserName> <FromUserName><![CDATA[${message.ToUserName}]]></FromUserName> <CreateTime>${createTime}</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <Voice> <MediaId><![CDATA[${message.mediaId}]]></MediaId> </Voice> </xml>
;
};
// Ответ видео
exports.videoMessage = function (message) {
var createTime = new Date().getTime();
return <xml> <ToUserName><![CDATA[${message.FromUserName}]]></ToUserName> <FromUserName><![CDATA[${message.ToUserName}]]></FromUserName> <CreateTime>${createTime}</CreateTime> <MsgType><![CDATA[video]]></MsgType> <Video> <MediaId><![CDATA[${message.mediaId}]]></MediaId> <Title><![CDATA[${message.title}]]></Title> <Description><![CDATA[${message.description}]]></Description> </Video> </xml>
;
};
// Ответ новостным сообщением
exports.articleMessage = function (message) {
var createTime = new Date().getTime();
return <xml> <ToUserName><![CDATA[${message.FromUserName}]]></ToUserName> <FromUserName><![CDATA[${message.ToUserName}]]></FromUserName> <CreateTime>${createTime}</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>${message.articles.length}</ArticleCount> <Articles> ${message.articles.map(function (article) { return
<Title></Title>
; }).join('')} </Articles> </xml>
;
};
<CreateTime>${createTime}</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>${message.articles.length}</ArticleCount>
<Articles>
${message.articles
.map(
(article) =>
`<item>
<Title><![CDATA[${article.title}]]></Title>
<Description><![CDATA[${article.description}]]></Description>
<PicUrl><![CDATA[${article.picurl}]]></PicUrl>
<Url><![CDATA[${article.url}]]></Url>
</item>`
)
.join('')}
</Articles>
</xml>;
```
```markdown
<title}]]></Title>
<Description><![CDATA[${article.description}]]></Description>
<PicUrl><![CDATA[${article.img}]]></PicUrl>
<Url><![CDATA[${article.url}]]></Url></item>`
).join("")
</Articles>
</xml>;
```Примечание: Исходный текст был в формате JavaScript, но в соответствии с правилами перевода, код и структура остались без изменений. Текстовые описания и комментарии также были переведены на русский язык.
В `weChat.js` включите вышеуказанный шаблон, я поместил код шаблона в `util -> template.js`, а затем изменил только что созданный метод post.
```js
// Включение шаблона сообщений
const template = require("../util/template");
// Обработка POST-запроса для сообщений, отправленных WeChat
router.post("/", (req, res) => {
let xml = req.body.xml;
let msgtype = xml.msgtype[0];
switch (msgtype) {
case "text":
// Упаковка параметров ответного сообщения
let message = {
FromUserName: xml.fromusername[0],
ToUserName: xml.tousername[0],
reply: "Привет, я отвечаю на ваше сообщение через код",
};
res.send(template.textMessage(message));
break;
default:
res.send(""); // Для не текстовых сообщений отправляем пустой ответ
break;
}
});
```
Теперь попробуем отправить сообщение.

Мы видим, что публичный аккаунт уже может отвечать на наши сообщения.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )