资讯动态

武汉微信开发之使用nodejs开发Q&A服务

标签:   | 作者:admin | VISITORS: | 来源:未知
16
Jan
2018
上一节我们学习了如何设置开发环境,这一节武汉微信开发者将带您学习使用nodejs开发Q&A服务。武汉微信开发行业竞争非常的激烈,只有学好这些知识,我们才能够更好的去工作,去发展。

问答服务通常具有以下活动流程:
1.您的微信订阅账户的用户将一些文本发送到您的订阅账户,
2.微信平台将用户发送的消息委托给订阅账户中维护的给定网址。看下面的例子:
3.现在轮到你了:解析从微信平台发送的委托文本,并将答案发送回请求的HTTP响应。一旦完成,您的最终用户将在微信平台的帮助下得到答案。
在这个博客中,我将介绍两种实施的问答服务。
1.回声服务:您的订阅帐户用户将收到与发送的文本完全相同的文本。为了证明文本已经真正到达了nodejs服务器,我在echo字符串的前面添加了一个前缀“Add by Jerry:”。
看下面的例子:
2.调整服务:这个服务比echo服务更聪明:它会调用调整API来尝试与你的订阅账户用户聊天:
 
以下是实施这两种问答服务的具体步骤。
回声服务
1.实现server.js,这是您的nodejs服务器逻辑的入口点:
var express = require('express');
var routesEngine = require('./jerryapp/routes/index.js'); 
var app = express();
routesEngine(app);
 
app.listen(process.env.PORT || 3000, function () {
  console.log('Listening on port, process.cwd(): ' + process.cwd() );
});
2.实现server.js中使用的index.js:
var request = require('request');
var echoService = require("../service/echo.js");
module.exports = function (app) {
  app.route('/').post(function(req,res){
    echoService(req, res);
  });
};
上面的代码显示,当你的用户发送一个文本到你的订阅账户时,一个包含这个文本的HTTP post请求将被微信平台委托给你的nodejs服务器,因此你有责任从HTTP post解析文本,你自己的逻辑(简单的回声或调整处理),并发回响应。这个博客中的echo服务在模块echo.js中实现。
3.实现echo.js:
var getXMLNodeValue = require("../tool/xmlparse.js");
var replyMessage = require("../tool/replyMessage.js");
const content_pattern = /<!\[CDATA\[(.*)\]\]>/;
module.exports = function(req, res){
  var _da;
   req.on("data",function(data){
        _da = data.toString("utf-8");
    });
    req.on("end",function(){
        var Content = getXMLNodeValue('Content',_da);
        var body = content_pattern.exec(Content);
        if( body.length === 2) {
            Content = "Add by Jerry: " + body[1];
        } 
        var xml = replyMessage(_da, Content);
        res.send(xml);
    });
};
在这里,我只是简单地将硬编码的前缀“Jerry添加:”添加到原始文本并发回。
公用程序模块xmlparse.js的源代码:
module.exports = function(node_name, xml){
    var tmp = xml.split("<"+node_name+">");
    var _tmp = tmp[1].split("</"+node_name+">");
    return _tmp[0];
};
replyMessage.js:
var getXMLNodeValue = require("./xmlparse.js");
module.exports = function(originalBody, contentToReply){
  var ToUserName = getXMLNodeValue('ToUserName', originalBody);
  var FromUserName = getXMLNodeValue('FromUserName',originalBody);
  var CreateTime = getXMLNodeValue('CreateTime',originalBody);
  var MsgType = getXMLNodeValue('MsgType',originalBody);
  var Content = contentToReply;
  var MsgId = getXMLNodeValue('MsgId', originalBody);
  var xml = '<xml><ToUserName>'+FromUserName+'</ToUserName><FromUserName>'+ToUserName+'</FromUserName><CreateTime>'+CreateTime+'</CreateTime><MsgType>'+MsgType+'</MsgType><Content>'+Content+'</Content></xml>';
  console.log("xml to be sent: " + xml);
  return xml;
};
调谐服务
除了一些小的改进之外,它几乎和Echo服务一样。
在index.js中,只需使用tuningService替换echoService调用即可。
调谐服务模块的实施:
var request = require('request');
var getXMLNodeValue = require("../tool/xmlparse.js");
var replyMessage = require("../tool/replyMessage.js");
const content_pattern = /<!\[CDATA\[(.*)\]\]>/;
 
const url = "http://www.tuling123.com/openapi/api?key=de4ae9269c7438c33de5806562a35cac&info=";
 
module.exports = function(req, res){
  var _da;
    req.on("data",function(data){
        _da = data.toString("utf-8");
    });
    req.on("end",function(){
        console.log("original text: " + _da);
        var Content = getXMLNodeValue('Content',_da);
        console.log("content: " + Content);
        var body = content_pattern.exec(Content);
        console.log("result size: " + body.length);
        var requesturl = "";
        if( body.length === 2){
            requesturl = url + encodeURI(body[1]);
        } 
        var options = {
            url: requesturl,
            method: "GET"
        };
        request(options,function(error,response,data){
           if(data){
              var text = JSON.parse(data).text;
              var xml = replyMessage(_da, text);
              res.send(xml);
           }else {
              res.send("Error when calling Tuning API: " + error);
              console.log(error);
           }
        });
    });
};
在这个模块中,我只使用http://www.tulin123.com提供的免费调优服务,通过Restful API调用非常方便。
 
资讯动态
首页 | 解决案例 | 资讯动态 | 客户服务 | 关于我们
分享按钮