微信公共平臺消息接口服務中間件:wechat

jopen 10年前發布 | 53K 次閱讀 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.wxsessionreq.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查看我的性取向

用戶回復其中的abc將會由注冊的方法接管回復。回復可以是一個函數,也可以是一個字符串:

List.add('view', [
  ['回復{a}查看我的性別', function (info, req, res, next) {
    res.reply('我是個妹紙喲');
  }],
  // 或者字符串
  ['回復{c}查看我的性取向', '這樣的事情怎么好意思告訴你啦- -']
]);

如果用戶觸發等待回復事務后,沒有按照{}中的進行回復,那么將會由原有的默認函數進行處理。在原有函數中,可以選擇調用res.nowait()中斷事務。nowait()除了能中斷事務外,與reply的行為一致。

項目主頁:http://www.baiduhome.net/lib/view/home/1406456995295

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!