Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

69 Commits

Repository files navigation

微信后台开发nodejs模块

由于本人手闲,开发了基于nodejs express的用于开发微信的一个模块件,写的不好,见笑了. 然而并没有写完,先凑合着用吧.

git clone 地址

https://github.com/MoNorth/wechat.git

git clone https://github.com/MoNorth/wechat.git

安装

npm install wechat-node

使用

由于本项目是基于express写的,所以使用前请大家先安装express 4.X模块 npm install express

初始化

varexpress=require("express");varapp=express();varwechat_node=require("wechat-node");varwechat=newwechat_node(app,"YOU APPID","YOU SECRET","YOU TOKEN");/** * 你的代码 */app.listen(8080);//监听端口与IP随意,这块只是示例.

基本组件

微信认证

如果你的服务器并没有与微信服务器进行过交互,也就是还没有进行认证的话,这块就得加载这个模块,如果已经认证过了,就不需要了.当然,加了也没事.

wechat.use("authentication");

加载access_token

access_token在本项目中有两种存储方式,一种是存在内存中,一种是存在moudle/token.txt,为什么是txt文件呢,可能是当时手误,请忽略,我会改正的.现在的情况而言,我本没有选择去加载在内存中,因为要经常调试,服务器一直开开关关,保存在内存中的话再次开启又要重新加载,实属下下策,所以目前默认是加载在文件中,目前没有些配置的方法,以后肯定会有,当然我也在access_token.js文件中写出来了,取消注释即可.下面贴出调用方法.

wechat.use("setToken",callback);

对于第二个参数callback,请参考设置菜单的那个,一样的.对于此项的加载是针对于第一次调试的,如果你已经有过请求access_token,则不需要此项,加上只会多请求一次.

加载菜单

由于微信规定,在使用自定义菜单的时候,隔夜才能生效,如果要立即生效,请把微信号取消关注后,重新关注即可.

在文件node_moudles/wechat-node/moudle/menu.json中,可以进行自由配置菜单,下面贴出一则示例.

{"button": [{"type": "click","name": "今日歌曲","key": "V1001_TODAY_MUSIC"},{"name": "菜单","sub_button": [{"type": "view","name": "搜索","url": "http://www.soso.com/"},{"type": "view","name": "视频","url": "http://v.qq.com/"},{"type": "click","name": "赞一下我们","key": "V1001_GOOD"}]}]}

然后在你得主文件中加入下面这句话.

wechat.use("setMenu",callback);

第二个参数callback,是加载完成后微信服务器所返回的信息.有两个参数,okresult如果成功,ok则为true,resultok,如果失败,okfalse,result为错误信息.

数据处理

这块是重点,由于要进行微信端与服务器端的数据交互,所以有了此模块,这个模块将把你的交互变得十分简单.但由于时间问题(到现在开发不过几天),所以只处理了一些,我这块没有写的,还需要大家自行处理.当然,要应用此模块,需要先导入一下.

wechat.use("postData");
发送消息

先写发送吧,本来应该是先写接受的,但是由于接受后总要回复个啥,所以就把发送先写了吧.在本项目中,只有被动回复,也就是用户发了个啥,然后自动回一条东西.所以说不完善,还请大家谅解,接下来会改善的.

文本消息

由于是被动回复消息,所以回复会在你的消息处理函数中,必然会存在res对象,回复功能我也写进res对象了.

res.sendText("你好");

这样就回复了一句你好给用户.

图文消息

图文消息的回复必须是数组,这块应该有重点 必须是数组

res.sendNews([{Title : "demo",//图文消息标题Description : "demo",//图文消息描述PicUrl : "demo",//图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200Url : "demo"//点击图文消息跳转链接},{Title : "demo",//图文消息标题Description : "demo",//图文消息描述PicUrl : "demo",//图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200Url : "demo"//点击图文消息跳转链接},{//...}])

多条图文消息信息,默认第一个对象的图片为大图,注意,如果图文数超过10,则将会无响应

空回复

空回复就是什么都不会,就是不响应,但也不能报错.

res.send();
接受消息

在这里我只做了常用的两种数据的接受,文本消息和按钮点击消息

文本消息

本项目中对于文本消息的处理有两种方式,第一种是重写处理方法.

wechat.retext(function(ok,req,res,result){/** * 你的代码 */});

微信发送的数据已经全部封装进了result对象,下面贴出一个示例

{tousername : "demo",//开发者微信号 fromusername : "demo",//发送方帐号(一个OpenID) createtime : "demo",//消息创建时间 (整型msgtype : "demo",//text content : "demo",//文本消息内容 msgid : "demo"//消息id,64位整型 }

其实你只需要对其中的content进行处理就好了.里面就是用户发送来的字符串.

当然还有第二种处理方式,这就简单粗暴到爆了.第二种只需要两个参数,一个对象,一个默认就可以了,具体看代码.

wechat.retext({"你好" : "你也好",//这种前者是用户发送的数据,后面是你的服务器自动回复的数据."早上好" : [{Title : "demo",Description : "demo",PicUrl : "demo",Url : "demo"}],//这是图文消息,格式遵从发送图文的格式."下午好" : function(req,res,result){/** * 你的代码 */}//这是方法处理,对于要加session呀之类都可以这样处理.},"默认回复"//这是第二个参数,是默认的,就是不在用户发的消息上述范围内既是默认,也可以加载机器人.当然,在这里字符串,数组(图文),函数都是可以的,同上.);
点击事件消息

点击事件消息在做起来其实也和文本消息没什么区别,第一种是重写

wechat.reclick(functin(ok,req,res,result){/** - 你的代码 */});

第二种类似于文本消息,只不过要处理的数据,不是用户发的数据,而是点击了的按钮的键

wechat.reclick({"V1001_TODAY_MUSIC" : "你也好",//这里的键就是在你设置菜单时的键,忘了可以翻上去看看"V1001_GOOD" : [{Title : "demo",Description : "demo",PicUrl : "demo",Url : "demo"}],"V1001_TODAY_MUSIC" : function(req,res,result){/** * 你的代码 */}},"默认回复");
默认回复

默认恢复就是除了文本和点击事件消息的处理,这个处理只能重写,不写的话就是默认不处理

wechat.redefaultMsg(function(ok,req,res,result){/** * 你的代码 */});

session处理

对于session相信开发者们都很熟悉,这里就不多做介绍了.这本项目中的应用就是记录用户上一次操作,从而相对应的事件.

通常session写在消息处理函数中,举例说明

wechat.retext({"下午好" : function(req,res,result){wechat_node.createSession(result,function(req,res,result){/** * 这个函数是用来进行用户携session访问下会触发的函数.就是用户二次访问时的处理,可以进行二次session叠加. */});}},"默认回复");

当然这个在点击事件消息以及重写了消息处理函数中同样适用.session默认保存时间是60秒,你也可以改.

wechat.setTime(5000);//参数为秒数.

客服消息(主动推送文本消息)

首先引入active模块

wechat.use("active");

然后有两种发送模式,一种是给一个用户发送消息

wechat_node.avtive("openID","YOUR MESSAGE",function(ok,result){/** * 参数 openID 为所要发送的用户的openID * 你的代码 * ok 为是否成功 * result 为错误信息 */})

第二种是给多人发送消息

wechat_node.avtive([openID1,openID2,openID3,...],"YOUR MESSAGE",function(ok,result){/** * 参数 openID 为所要发送的用户的openID的数组 */})

其他函数

这里还有别的函数方便大家的使用,我简单介绍一下

获取access_token

wechat.getToken(function(ok,result){/** * 你的代码,result为获取到的access_token */})

刷新access_token

wechat.reflushToken(function(ok,result){/** * 你的代码,其中result为新的access_token,同事也会刷新本地保存的access_token. */});

当然,access_token是到时间自动获取刷新的,这块只是说特殊情况下这样.

设置菜单

wechat.setMenu(function(ok,result){/** * 你的代码,;这里result为错误信息,成功返回ok. */});

获取菜单

wechat.getMenu(function(ok,result){/** * 你的代码,这里result为你获取的菜单对象,格式为之前设置的格式. */});

将json对象转换为微信可识别的xml对象

vartool=require("node_modules/wechat-node/module/tool.js");tool.jsonToXml({});//参数为你要转换的json,返回值为转换好的xml

使用示例

如果有兴趣的朋友,请大家关注我的博客,我接下来会在博客上发布一个小案列,通过案例让大家更加清楚地了解本项目.谢谢浏览. 博客地址 http://north.gitcafe.io

About

微信测试

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages