微信公共平臺消息接口服務中間件:wechat
微信公共平臺消息接口服務中間件與API SDK
功能列表
- 自動回復(文本、圖片、語音、視頻、音樂、圖文)
- 發送客服消息(文本、圖片、語音、視頻、音樂、圖文)
- 菜單操作(查詢、創建、刪除)
- 二維碼(創建臨時、永久二維碼,查看二維碼URL)
- 分組操作(查詢、創建、修改、移動用戶到分組)
- 用戶信息(查詢用戶基本信息、獲取關注者列表)
- 媒體文件(上傳、獲取)
- 等待回復(用于調查問卷、問答等場景)
- 會話支持(創新功能)
- OAuth API(授權、獲取基本信息)
- 群發消息(文本、圖片、語音、視頻、圖文)
- 客服記錄
- 群發消息
- 公眾號支付(發貨通知、訂單查詢)
- 微信小店(商品管理、庫存管理、郵費模板管理、分組管理、貨架管理、訂單管理、功能接口)
詳細參見API文檔
Installation
npm install wechat
Use with Connect/Express
var wechat = require('wechat');
app.use(connect.query()); // Or app.use(express.query());
app.use('/wechat', wechat('some token', function (req, res, next) {
// 微信輸入信息都在req.weixin上
var message = req.weixin;
if (message.FromUserName === 'diaosi') {
// 回復屌絲(普通回復)
res.reply('hehe');
} else if (message.FromUserName === 'text') {
//你也可以這樣回復text類型的信息
res.reply({
content: 'text object',
type: 'text'
});
} else if (message.FromUserName === 'hehe') {
// 回復一段音樂
res.reply({
type: "music",
content: {
title: "來段音樂吧",
description: "一無所有",
musicUrl: "http://mp3.com/xx.mp3",
hqMusicUrl: "http://mp3.com/xx.mp3"
}
});
} else {
// 回復高富帥(圖文回復)
res.reply([
{
title: '你來我家接我吧',
description: '這是女神與高富帥之間的對話',
picurl: 'http://nodeapi.cloudfoundry.com/qrcode.jpg',
url: 'http://nodeapi.cloudfoundry.com/'
}
]);
}
}));
備注:token在微信平臺上申請
回復消息
當用戶發送消息到微信公眾賬號,自動回復一條消息。這條消息可以是文本、圖片、語音、視頻、音樂、圖文。詳見:官方文檔
回復文本
res.reply('Hello world!');
// 或者
res.reply({type: "text", content: 'Hello world!'});
回復圖片
res.reply({
type: "image",
content: {
mediaId: 'mediaId'
}
});
回復語音
res.reply({
type: "voice",
content: {
mediaId: 'mediaId'
}
});
回復視頻
res.reply({
type: "video",
content: {
mediaId: 'mediaId',
thumbMediaId: 'thumbMediaId'
}
});
回復音樂
res.reply({
title: "來段音樂吧",
description: "一無所有",
musicUrl: "http://mp3.com/xx.mp3",
hqMusicUrl: "http://mp3.com/xx.mp3"
});
回復圖文
res.reply([
{
title: '你來我家接我吧',
description: '這是女神與高富帥之間的對話',
picurl: 'http://nodeapi.cloudfoundry.com/qrcode.jpg',
url: 'http://nodeapi.cloudfoundry.com/'
}
]);
WXSession支持
由于公共平臺應用的客戶端實際上是微信,所以采用傳統的Cookie來實現會話并不現實,為此中間件模塊在openid的基礎上添加了Session支持。一旦服務端啟用了connect.session
中間件,在業務中就可以訪問req.wxsession
屬性。這個屬性與req.session
行為類似。
app.use(connect.cookieParser());
app.use(connect.session({secret: 'keyboard cat', cookie: {maxAge: 60000}}));
app.use('/wechat', wechat('some token', wechat.text(function (info, req, res, next) {
if (info.Content === '=') {
var exp = req.wxsession.text.join('');
req.wxsession.text = '';
res.reply(exp);
} else {
req.wxsession.text = req.wxsession.text || [];
req.wxsession.text.push(info.Content);
res.reply('收到' + info.Content);
}
})));
req.wxsession
與req.session
采用相同的存儲引擎,這意味著如果采用redis作為存儲,這樣wxsession
可以實現跨進程共享。
等待回復
等待回復,類似于電話撥號業務。該功能在WXSession的基礎上提供。需要為等待回復預置操作,中間件將其抽象為List
對象,在提供服務前需要添加服務。
var List = require('wechat').List;
List.add('view', [
['回復{a}查看我的性別', function (info, req, res) {
res.reply('我是個妹紙喲');
}],
['回復{b}查看我的年齡', function (info, req, res) {
res.reply('我今年18歲');
}],
['回復{c}查看我的性取向', '這樣的事情怎么好意思告訴你啦- -']
]);
然后在業務中觸發等待回復事務,如下示例,當收到用戶發送list
后,調用res.wait('view')
進入事務view
中。
var app = connect();
app.use(connect.query());
app.use(connect.cookieParser());
app.use(connect.session({secret: 'keyboard cat', cookie: {maxAge: 60000}}));
app.use('/wechat', wechat('some token', wechat.text(function (info, req, res, next) {
if (info.Content === 'list') {
res.wait('view');
} else {
res.reply('hehe');
// 或者中斷等待回復事務
// res.nowait('hehe');
}
})));
用戶將收到如下回復:
回復a查看我的性別
回復b查看我的年齡
回復c查看我的性取向
用戶回復其中的a
、b
、c
將會由注冊的方法接管回復。回復可以是一個函數,也可以是一個字符串:
List.add('view', [
['回復{a}查看我的性別', function (info, req, res, next) {
res.reply('我是個妹紙喲');
}],
// 或者字符串
['回復{c}查看我的性取向', '這樣的事情怎么好意思告訴你啦- -']
]);
如果用戶觸發等待回復事務后,沒有按照{}
中的進行回復,那么將會由原有的默認函數進行處理。在原有函數中,可以選擇調用res.nowait()
中斷事務。nowait()
除了能中斷事務外,與reply
的行為一致。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!