开篇

笔者大概 2013 年开始接触围绕微信相关的开发,到今年(2018)也有 5 年的时间了。记得,刚开是接触微信公众号相关开发的时候,微信公众号还没有开放 API。市场上只有几家很牛逼的企业(如招商银行、印象笔记)有拿到授权。我们不得不利用脚本的形式,来操作 dom 实现业务,是一个很蠢但是最快的接入方式。后来微信开放了 API,我们也第一时间跟进,在此期间也遇到了很多坑(包括腾讯自己的问题),所以我打算写一系列文章,为了可以让后来者不至于掉坑。由于笔者主要开发是基于 nodejs(go、c#也有涉及),所以代码实例均以 nodejs 为主。

建议

当然, 再好的文章也只能当做辅助手段。最好、最直接的  还是参考微信官方文档

公众号的分类

开始的时候,公众号并没有类型的区分,大家都是一样的。不过,在公众号上线一段时间之后,就有了订阅号和服务号的区分。

  • 订阅号 订阅号的申请者主要以个人为主,订阅号每天可以推送一个群发消息,不过在 API 权限方面较弱。
  • 服务号 服务号的申请者主要是企业,推送群发消息有限制,不过微信提供了丰富的 API 接口。
  • 小程序 小程序不属于公众号,不过小程序的开发流程和部分 API 和公众号是公用的,所以  也列在此。

开始开发

正如上面所说的,最好先参考微信官方文档。官方文档中有一个菜单叫做“开始开发”, 我就按照上面的步骤来结束我们的“开篇”

1.准备服务器

第一步叫做“填写服务器配置”,说明在开发之前,我们需要准备一台服务器。这台服务器必须要有固定的公网 IP,这是为了接受微信发送过来的请求。填写的时候会要求填写 3 项信息:

  • url  简单来说,url 就是一个 HTTP 接口,不过此接口必须遵守微信的规范,微信会以调接口的形式,将相关的消息、事件  推送过来
  • token 由于服务器是暴露在公网环境的,为了过滤非微信的请求,保证只处理正确的请求,而 token 是用来做签名的,只处理正确的签名
  • EncodingAESKey EncodingAESKey 是给消息加密的 key

2.验证消息

第二步“验证消息的确来自微信服务器”。就像  在上一步说的,我们必须验证请求是微信服务器发来的。 正常情况下,微信服务器会 GET 方法来请求 url 并带上 4 个 query 参数:

  • signature 签名
  • timestamp 时间戳
  • nonce 随机数
  • echostr 随机字符串

生成签名代码如下

'use strict';

const crypto = require('crypto');

// 排序并拼接
const str = [token, timestamp, nonce].sort().join('');
// 生成签名
const sha1 = crypto.createHash('sha1').update(str);
const mySignature = sha1.digest('hex');

如果我们需要验证消息,需要做一下步骤

  • 将 token、timestamp、nonce 三个参数进行字典序排序
  • 将排序好的三个参数进行拼接
  • 将拼接好的字符串进行 sha1 得到签名 mySignature
  • 然后将 mySignature 和 signature 进行对比,如果一致,则验证成功!如果不一致,则验证失败 如果验证成功,我们需要将 echostr 原样返回给微信,否则微信会认为此次调用未成功,会进行重试操作

3.业务实现

验证成功之后,我们就可以根据业务需求,实现对应的业务。

总结

开篇比较简单,主要介绍下概念和简单的接入,接下来一篇我会开始介绍微信公众号 access_token 的获取与保存。

results matching ""

    No results matching ""