Sails JS - 如何在 Sails JS 应用程序中处理微信请求
SailsJS - How can I handle WeChat requst in SailJS app
我在 Sails 应用程序中处理微信请求时遇到问题。我花了很多时间才弄明白。所以我只想在这里记录一下。
我正在使用这个 this library。
答案中会给出流程和解决方案
希望对您有所帮助,谢谢。
首先,您必须在WeChat Public Platform.
注册一个账号
登录并配置您的服务器配置。 URL将是你验证和处理微信消息的接口,token,你可以指定任何你喜欢的字符串,用于验证你的服务器。
对于这个 URL,您必须在后端代码中为它定义 GET
和 POST
接口。 GET
接口用于验证你的服务器是否有效,POST
接口用于处理来自微信服务器的消息。 NodeJS
中的验证码应该是这样的:
var array = [token, timestamp, nonce];
array.sort();
var tempStr = array.join('');
const hashCode = crypto.createHash('sha1');
var resultCode = hashCode.update(tempStr, 'utf8').digest('hex');
if (resultCode === signature) {
return cb(null, echostr);
} else {
return cb('mismatch', null);
}
token
是你在微信Public平台指定的,timestamp
和nonce
是微信传过来的查询字符串。
这里是添加对 Sails xml 支持的重要部分。
在 config/http.js
中,将 bodyParse
替换为 xmlBodyParser
并添加以下代码:
xmlBodyParser: function(req, res, next) {
var xmlParser = require('express-xml-bodyparser')();
var skipper = require('skipper')();
if (req.headers && (req.headers['content-type'] == 'text/xml' || req.headers['content-type'] == 'application/xml')) {
return xmlParser(req, res, next);
}
return skipper(req, res, next);
}
- 为配置的URL添加控制器方法,因为我使用的是this library,代码应该是这样的:
onMessage: wechat(wechatConfig.oa.app, function (req, res, next) {
var signature = req.query.signature,
timestamp = req.query.timestamp,
nonce = req.query.nonce;
if (WeChatService.isFromOfficalAccount(signature, timestamp, nonce)) {
return WeChatService.handle(req, res);
} else {
return res.forbidden("Validation failed!");
}
})
所有来自微信的请求都会被这个wechat
函数处理。在 handle 函数中,可以使用 the library's API 来处理微信服务器的所有请求。关于这个库的使用,你可以在它的文档中找到。
我在 Sails 应用程序中处理微信请求时遇到问题。我花了很多时间才弄明白。所以我只想在这里记录一下。
我正在使用这个 this library。
答案中会给出流程和解决方案
希望对您有所帮助,谢谢。
首先,您必须在WeChat Public Platform.
注册一个账号登录并配置您的服务器配置。 URL将是你验证和处理微信消息的接口,token,你可以指定任何你喜欢的字符串,用于验证你的服务器。
对于这个 URL,您必须在后端代码中为它定义
GET
和POST
接口。GET
接口用于验证你的服务器是否有效,POST
接口用于处理来自微信服务器的消息。NodeJS
中的验证码应该是这样的:var array = [token, timestamp, nonce]; array.sort(); var tempStr = array.join(''); const hashCode = crypto.createHash('sha1'); var resultCode = hashCode.update(tempStr, 'utf8').digest('hex'); if (resultCode === signature) { return cb(null, echostr); } else { return cb('mismatch', null); }
token
是你在微信Public平台指定的,timestamp
和nonce
是微信传过来的查询字符串。这里是添加对 Sails xml 支持的重要部分。
在
config/http.js
中,将bodyParse
替换为xmlBodyParser
并添加以下代码:
xmlBodyParser: function(req, res, next) {
var xmlParser = require('express-xml-bodyparser')();
var skipper = require('skipper')();
if (req.headers && (req.headers['content-type'] == 'text/xml' || req.headers['content-type'] == 'application/xml')) {
return xmlParser(req, res, next);
}
return skipper(req, res, next);
}
- 为配置的URL添加控制器方法,因为我使用的是this library,代码应该是这样的:
onMessage: wechat(wechatConfig.oa.app, function (req, res, next) {
var signature = req.query.signature,
timestamp = req.query.timestamp,
nonce = req.query.nonce;
if (WeChatService.isFromOfficalAccount(signature, timestamp, nonce)) {
return WeChatService.handle(req, res);
} else {
return res.forbidden("Validation failed!");
}
})
所有来自微信的请求都会被这个wechat
函数处理。在 handle 函数中,可以使用 the library's API 来处理微信服务器的所有请求。关于这个库的使用,你可以在它的文档中找到。