1

原文
摸索中遇到的一些坑,虽然很简单,但新手还是会被坑到,就稍微记录一下吧,也当学习手册,最好去了解一下express,不是很难,这边只是简单的配置,更高级的接口还是去看文档,模块或者自己实现都是可以的

公众号配置

首先你得有一个公众号,最好是服务号,因为个人的订阅号很多功能不提供的,比如自定义菜单,当然没有也没关系,可以用腾讯提供的测试号测试号.

测试号提供完全的功能,基本够用了。

接下来就是服务器的配置了,这边要说一下,公众号服务器的端口必须是80端口,所以自己服务器最好用nginx代理,但是这样不好的是服务端编辑代码总是很不方便,提交也麻烦,所以自己测试的话还是用nat123或者花生壳映射本地端口吧。

但是nat123太慢了,建议使用花生壳,具体教程百度吧,很简单的。

ps:今天看到了微信官方推出的一个浏览器插件,用来调试微信后台和页面的,挺好的。不过只能在qq浏览器内使用微信调试工具

调试

服务端
上图是服务器的接口配置

获取授权

因为是基于node-wechat开发的,所以底层的东西就不用管了,了解一下它的api就好,简单来说就是用三个参数生成签名与加密的字符串进行对比以获得授权。
我用的是wechat提供的api。只要处理好自己的业务就好。

  1. 安装:
    npm i wechat --save-dev

  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
将三者进行加密与签名进行对比

之后每次都会进行身份校验。

总结

简单的大概就是这些了,虽然感觉没啥,当时也是掉进各种坑。然而后面还有更深的坑。


xiadd
2.6k 声望88 粉丝