node微信後臺開發初探

原文
摸索中遇到的一些坑,雖然很簡單,但新手仍是會被坑到,就稍微記錄一下吧,也當學習手冊,最好去了解一下express,不是很難,這邊只是簡單的配置,更高級的接口仍是去看文檔,模塊或者本身實現都是能夠的html

公衆號配置

首先你得有一個公衆號,最好是服務號,由於我的的訂閱號不少功能不提供的,好比自定義菜單,固然沒有也不要緊,能夠用騰訊提供的測試號測試號.node

測試號提供徹底的功能,基本夠用了。nginx

接下來就是服務器的配置了,這邊要說一下,公衆號服務器的端口必須是80端口,因此本身服務器最好用nginx代理,可是這樣很差的是服務端編輯代碼老是很不方便,提交也麻煩,因此本身測試的話仍是用nat123或者花生殼映射本地端口吧。git

可是nat123太慢了,建議使用花生殼,具體教程百度吧,很簡單的。github

ps:今天看到了微信官方推出的一個瀏覽器插件,用來調試微信後臺和頁面的,挺好的。不過只能在qq瀏覽器內使用微信調試工具web

調試

服務端
上圖是服務器的接口配置express

獲取受權

由於是基於node-wechat開發的,因此底層的東西就不用管了,瞭解一下它的api就好,簡單來講就是用三個參數生成簽名與加密的字符串進行對比以得到受權。
我用的是wechat提供的api。只要處理好本身的業務就好。npm

  1. 安裝:
    npm i wechat --save-devapi

  2. 與express混合使用瀏覽器

var wechat = require('wechat');
var config = {
  token: 'token',
  appid: 'appid',
  encodingAESKey: 'encodinAESKey'//無關緊要
};
app.use(express.query());
app.use('/wechat', wechat(config, 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",
        thumbMediaId: "thisThumbMediaId"
      }
    });
  } else {
    // 回覆高富帥(圖文回覆)
    res.reply([
      {
        title: '你來我家接我吧',
        description: '這是女神與高富帥之間的對話',
        picurl: 'http://nodeapi.cloudfoundry.com/qrcode.jpg',
        url: 'http://nodeapi.cloudfoundry.com/'
      }
    ]);
  }
}));

稍微解釋一下。token就是填配置的時候天的token,appid也提供了。
wechat(config, function (req, res, next)下面就是受權成功進行操做,這邊是根據關鍵字回覆。具體api請看api.
不過,這點功能確定是不夠用的,接下來就是wechat-api了,基本提供了全部的官方api。

底層實現

其實我也是菜鳥。這個是根據別人的文章總結的,
token+時間戳timestamp+隨機數nonce->生成簽名signiture
將三者進行加密與簽名進行對比

以後每次都會進行身份校驗。

總結

簡單的大概就是這些了,雖然感受沒啥,當時也是掉進各類坑。然然後面還有更深的坑。

相關文章
相關標籤/搜索