SailsJS-如何在SailJS应用中处理微信要求

时间:2019-01-10 05:43:11

标签: sails.js wechat

我在Sails应用程序中处理微信请求时遇到问题。我花了很多时间才弄清楚。所以我只想在这里记录下来。

我正在使用此this library

答案中将提供流程和解决方案。

希望这会有所帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

首先,您必须在WeChat Public Platform中注册一个帐户。

  1. 登录并配置服务器配置。该URL将是您验证和处理微信消息的界面,并且对于令牌,您可以指定所需的任何字符串,这些字符串将用于验证服务器。

    对于此URL,您必须在后端代码中为其定义GETPOST接口。 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是您在微信公众平台中指定的内容,timestampnonce由微信作为查询字符串传递。

  2. 这是增加对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); }

  3. 为配置的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!"); } })

    此微信功能将处理来自微信的所有请求。在handle函数中,您可以使用the library's API来处理来自微信服务器的所有请求。有关该库的用法,您可以在其文档中找到。