文档章节

微信订阅后台自动回复功能的实现

龙马行空
 龙马行空
发布于 2016/11/29 23:28
字数 911
阅读 116
收藏 1

3.1. 订阅号后台自动回复功能的实现

3.1.1. 官网文档地址

3.1.2. 订阅号管理平台的配置

  • 因为微信只支持80端口,所以通过ittun.com搭建模拟80端口的服务器

    • ittun官网网址:http://www.ittun.com/
    • 下载客户端文件并解压缩

    • 修改startup.bat文件的内容如下

    • 双击启动startup.bat文件

  • 来到订阅号后台并进入开发-基本配置页面进行配置

3.1.3. node后端接入

3.1.3.1. 原生代码实现

// 使用原生模块的写法
const express = require("express");
const {parseString} = require("xml2js");
const app = express();

// 接收微信服务器发过来的消息
app.post("/wx", (req, res, next) => {
    // 微信订阅号传过来的数据都是xml格式
    req.on("data", (buffer)=> {
        let msg = buffer.toString();
        //console.log(buffer.toString());
        //<xml><ToUserName><![CDATA[gh_fdfc0bf0bb5a]]></ToUserName>
        //<FromUserName><![CDATA[oryIWwNJ0Sgn8LyyxHsD6OLGxR9g]]></FromUserName>
        //<CreateTime>1479613848</CreateTime>
        //<MsgType><![CDATA[text]]></MsgType>
        //<Content><![CDATA[大好河山]]></Content>
        //<MsgId>6354893088312947331</MsgId>
        //</xml>


        //解析xml
        parseString(msg, (err, result) => {
            //console.log(result);

            //console.log(result.xml.Content[0]);
            //{ xml:
            //{ ToUserName: [ 'gh_fdfc0bf0bb5a' ],
            //    FromUserName: [ 'oryIWwAKciQIskVv3TCcI6LsY8kY' ],
            //    CreateTime: [ '1479613991' ],
            //    MsgType: [ 'text' ],
            //    Content: [ '你那了' ],
            //    MsgId: [ '6354893702493270691' ] } }


            let touser = result.xml.FromUserName[0];
            let fromuser = result.xml.ToUserName[0];
            //如果收到的是文本消息
            if (result.xml.MsgType[0] === "text") {
                if (result.xml.Content[0] === "你好") {
                    let txt = "你也好";

                    let sendmsg = `
                                    <xml>
                                        <ToUserName><![CDATA[${touser}]]></ToUserName>
                                        <FromUserName><![CDATA[${fromuser}]]></FromUserName>
                                        <CreateTime>${Date.now()}</CreateTime>
                                        <MsgType><![CDATA[text]]></MsgType>
                                        <Content><![CDATA[${txt}]]></Content>
                                    </xml>
                                `;
                    res.send(sendmsg);
                } else if (result.xml.Content[0] === "吃了么") {
                    let txt = "没吃呢,走一起食堂";

                    let sendmsg = `
                                    <xml>
                                        <ToUserName><![CDATA[${touser}]]></ToUserName>
                                        <FromUserName><![CDATA[${fromuser}]]></FromUserName>
                                        <CreateTime>${Date.now()}</CreateTime>
                                        <MsgType><![CDATA[text]]></MsgType>
                                        <Content><![CDATA[${txt}]]></Content>
                                    </xml>
                                  `;
                    res.send(sendmsg);
                } else if (result.xml.Content[0] === "看牙") {
                    //发送图文消息

                    let sendmsg = `
                                    <xml>
                                        <ToUserName><![CDATA[${touser}]]></ToUserName>
                                        <FromUserName><![CDATA[${fromuser}]]></FromUserName>
                                        <CreateTime>${Date.now()}</CreateTime>
                                        <MsgType><![CDATA[news]]></MsgType>
                                        <ArticleCount>1</ArticleCount>
                                        <Articles>
                                        <item>
                                        <Title><![CDATA[预约看牙]]></Title>
                                        <Description><![CDATA[我们一起看牙去吧]]></Description>
                                        <PicUrl><![CDATA[http://wx001.ittun.com/img/logo.png]]></PicUrl>
                                        <Url><![CDATA[http://wx001.ittun.com/order.html]]></Url>
                                        </item>
                                        </Articles>
                                    </xml>
                                   `;

                    res.send(sendmsg);
                } else {
                    // 不符合条件的回复
                    let txt = "滚蛋";

                    let sendmsg = `
                                    <xml>
                                        <ToUserName><![CDATA[${touser}]]></ToUserName>
                                        <FromUserName><![CDATA[${fromuser}]]></FromUserName>
                                        <CreateTime>${Date.now()}</CreateTime>
                                        <MsgType><![CDATA[text]]></MsgType>
                                        <Content><![CDATA[${txt}]]></Content>
                                    </xml>
                                   `;
                    res.send(sendmsg);
                }

            }
            else if (result.xml.MsgType[0] === "event") {
                //是点击事件click
                if (result.xml.Event[0] === "CLICK") {
                    if (result.xml.EventKey[0] === "V1001_TODAY_MUSIC") {
                        let txt = "收到今日歌曲";

                        let sendmsg = `
                                        <xml>
                                            <ToUserName><![CDATA[${touser}]]></ToUserName>
                                            <FromUserName><![CDATA[${fromuser}]]></FromUserName>
                                            <CreateTime>${Date.now()}</CreateTime>
                                            <MsgType><![CDATA[text]]></MsgType>
                                            <Content><![CDATA[${txt}]]></Content>
                                        </xml>
                                       `
                        res.send(sendmsg);
                    }
                }
            }

        });
    });
})

// 启动server
const server = app.listen(3002, function () {
    const host = server.address().address;
    const port = server.address().port;
    console.log('Example app listening at http://%s:%s', host, port);
});

3.1.3.2. wechat模块的实现

// 使用wechat模块的写法
const wechat = require('wechat');
const express = require("express");

const app = express();
const config = {
    token: 'dingyuehaohoutai',
    appid: 'wx263a41ae72347',
    encodingAESKey: 'T5766o1ql3lXrPIN0C4Tv1Udf3CkHhzFG'
};

app.use('/wx', wechat(config, function (req, res, next) {
    // 微信输入信息都在req.weixin上
    const message = req.weixin;
    console.log(message.Content);
   // {
   //      ToUserName: 'gh_dbd933de052c',
   //      FromUserName: 'oB3MDvytZho2Xs6ed-U5-QEeDJ3o',
   //      CreateTime: '1479632080',
   //      MsgType: 'text',
   //      Content: 'hehe',
   //      MsgId: '6354971394159447836'
   //  }


    if (message.Content === 'diaosi') {
        // 回复屌丝(普通回复)
        res.reply('hehe');
    } else if (message.Content === 'text') {
        //你也可以这样回复text类型的信息
        res.reply({
            content: 'text object',
            type: 'text'
        });
    } else if (message.Content === 'hehe') {
        // 回复一段音乐
        res.reply({
            type: "music",
            content: {
                title: "来段音乐吧",
                description: "一无所有",
                musicUrl: "http://m5.file.xiami.com/884/884/1706253944/1773374767_15591128_l.mp3?auth_key=d26a837c4b087ee74ec512b8206d9dc1-1479870000-0-null",
                hqMusicUrl: "http://m5.file.xiami.com/884/884/1706253944/1773374767_15591128_l.mp3?auth_key=d26a837c4b087ee74ec512b8206d9dc1-1479870000-0-null"

            }
        });
    } else {
        // 回复高富帅(图文回复)
        res.reply([
            {
                title: '你来我家接我吧',
                description: '这是女神与高富帅之间的对话',
                picurl: 'http://nodeapi.cloudfoundry.com/qrcode.jpg',
                url: 'http://nodeapi.cloudfoundry.com/'
            }
        ]);
    }
}));

// 启动server
const server = app.listen(3002, function () {
    const host = server.address().address;
    const port = server.address().port;
    console.log('Example app listening at http://%s:%s', host, port);
});

3.1.3.3. 其他第三方模块的实现

免责说明

  1. 本博客中的文章摘自网上的众多博客,仅作为自己知识的补充和整理,并分享给其他需要的coder,不会用于商用。
  2. 因为很多博客的地址看完没有及时做保存,所以很多不会在这里标明出处,非常感谢各位大牛的分享,也希望大家理解。

 

 

 

© 著作权归作者所有

共有 人打赏支持
龙马行空
粉丝 388
博文 127
码字总数 119251
作品 0
房山
前端工程师
蝉知企业门户系统 2.2 版本发布,全面集成微信

大家好,蝉知企业门户系统2.2正式版正式发布了!这次升级集成了微信公众号的应用,主要功能有:公众号接入、公众号菜单定义、关键字自动回复设置、二维码显示、粉丝消息获取和回复、粉丝管理...

炒蚕豆吃蹦豆
2014/03/27
4.5K
45
蝉知 6.1 发布,新增订单退款 图片水印功能

大家好,蝉知企业门户系统开源版6.1正式发布了。 本次升级新增了订单退款,facebook、github 登录,图片水印等功能,同时修复了之前版本的一些bug,欢迎大家下载使用。 关于蝉知 蝉知企业门户...

炒蚕豆吃蹦豆
2017/04/12
2.9K
6
微信接口及权限

不同的公众号类型具备不同的接口权限,具体如下表: 请注意: 1、微博认证视作未认证,因此微博认证的公众号不会拥有微信认证公众号特有的接口。 2、微信认证分为资质认证和名称认证两部分,只...

meibug
2016/10/25
170
0
Node.js 微信后台搭建系列 - 微信集成

Contents 1. 接入验证 2. 接收消息 3. 发送消息 终于基本到了最后的一步了。微信集成主要包含三个部分: 接入验证,让微信确认你的服务器,就是你公众号的拥有人。 接收微信给你服务器的消息...

鹄思乱想
2017/07/30
0
0
微信接入流程

注册企业服务号并认证,注意:订阅号不支持第三方开发。 登录微信管理后台,在设置》基本配置中绑定开发的网站信息。(注意:接入微信只支持80和443端口,带有端口号的外网地址是不可以接入的...

bluecoffee
2016/04/25
242
0

没有更多内容

加载失败,请刷新页面

加载更多

js 操作cookie

var cookie = {// 设置cookie方法set:function(key, val, time){// 获取当前时间var date = new Date();// 将date设置为n天以后的时间var expiresDays = time;//...

小丶二
36分钟前
1
0
限制root远程登录 su和sudo命令

9月21日任务 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录 对于Linux而言,权限的重要性毋庸置疑!对于普通用户而言无法执行那些只有root用户才能有效的命令,导致工作无法有效进行; 系统...

robertt15
38分钟前
2
0
MQTT协议的初浅认识之通讯级别和持久会话

背景 这是我最近了解MQTT协议的最后一部分内容了,MQTT协议里面的QOS和Keep Alive是两个比较重要的内容。QOS的设置,直接影响了订阅客户端与中间件之间的消息交互行为。而Keep Alive直接影响...

亚林瓜子
40分钟前
2
0
calc

width: calc(100% - 30px); 特别注意:减号左右空格,均不能去掉。 width: calc(100% - 30px);

柴高八斗之父
48分钟前
1
0
Spring Cloud Gateway全局过滤器GlobalFilter:返回消息和重定向

Spring Cloud Gateway的全局过滤器GlobalFilter,顾名思义,声明后会对所有的请求生效,可以用来做权限控制,这里简单记录一下拦截到非法请求后如何返回自定义信息和将请求重定向到指定URL。...

夜雨寄北09
50分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部