【问题标题】:SailsJS - How can I handle WeChat requst in SailJS appSails JS - 如何在 Sails JS 应用程序中处理微信请求
【发布时间】:2019-01-10 05:43:11
【问题描述】:

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

我正在使用这个this library

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

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

【问题讨论】:

    标签: sails.js wechat


    【解决方案1】:

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

    1. 登录并配置您的服务器配置。 URL 将是您验证和处理微信消息的接口,对于令牌,您可以指定任何您喜欢的字符串,用于验证您的服务器。

      对于此 URL,您必须在后端代码中为其定义 GETPOST 接口。 GET 接口用于验证您的服务器是否验证,POST 将用于处理来自微信服务器的消息。 NodeJS中的验证sn-p代码应该是这样的:

       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);
    }
    
    1. 为配置的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来处理所有来自微信服务器的请求。关于这个库的使用,你可以在它的文档中找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-18
      • 2015-02-06
      • 2015-11-11
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      相关资源
      最近更新 更多