第一章:公众号开发环境搭建

做公众号开发,第一步不是写代码,而是搭环境。

我见过太多新手,代码写得挺溜,结果卡在环境配置上,一卡就是半天。说实话,这部分确实有点琐碎,但绕不过去。今天我就带你一步步搞定它。

1.1 申请测试号

正式公众号的申请流程比较长,还要营业执照、认证费什么的。我建议你直接用微信公众平台测试号来学习。它和正式号的功能几乎一样,唯一的区别就是——不用钱,申请即用。

怎么申请?很简单:

  1. 打开微信公众平台官网,找到「开发」-「开发者工具」
  2. 点击「公众平台测试号」,用微信扫码登录
  3. 系统会自动分配一个测试号给你

拿到测试号后,你会看到两个关键信息:appIDappsecret。这两个东西,说白了就是你的公众号身份证。后面所有的接口调用,都得靠它们来验证身份。

注意:appsecret 一定要保管好。我曾经见过有人把它直接贴到 GitHub 上,结果被恶意调用,白白损失了几百块短信费。

1.2 服务器配置

测试号申请完了,接下来要配置服务器。微信的机制是这样的:用户发消息给公众号,微信服务器会把消息转发到你自己的服务器上。所以你得先告诉微信:「我的服务器在哪」。

在测试号管理页面,找到「接口配置信息」,需要填两个东西:

  • URL:你的服务器地址,必须是外网可访问的
  • Token:你自己随便写的一个字符串,用来做签名验证

Token 这个东西,我习惯用「wechat_2024」这种格式,好记又不容易撞车。你随便写个「abc123」也行,但别太简单,免得被猜到。

1.3 接入验证

配置好 URL 和 Token 后,微信会发一个 GET 请求到你的服务器。这个请求里带了几个参数:

  • signature:签名,用来验证请求是否真的来自微信
  • timestamp:时间戳
  • nonce:随机数
  • echostr:随机字符串,你需要原样返回它

验证的逻辑其实不复杂:你把 Token、timestamp、nonce 这三个参数拼起来,做一次 SHA1 加密,结果和 signature 对比。如果一致,就说明请求来自微信,你把 echostr 返回回去就行。

我直接给你一个 Node.js 的示例代码:

const crypto = require('crypto');

function checkSignature(token, signature, timestamp, nonce) {
  const arr = [token, timestamp, nonce].sort();
  const str = arr.join('');
  const sha1 = crypto.createHash('sha1').update(str).digest('hex');
  return sha1 === signature;
}

// 在路由里这样用
app.get('/wechat', (req, res) => {
  const { signature, timestamp, nonce, echostr } = req.query;
  const token = '你的Token';

  if (checkSignature(token, signature, timestamp, nonce)) {
    res.send(echostr);
  } else {
    res.send('验证失败');
  }
});

代码跑起来之后,点击测试号页面的「提交」按钮。如果看到「配置成功」的提示,恭喜你,接入验证通过了。

小技巧:如果验证失败,先检查一下服务器日志。我遇到过最坑的一次,是服务器时间不准,导致 timestamp 对不上。同步一下系统时间就好了。

1.4 内网穿透工具使用

你可能会问:「我的电脑在局域网里,微信怎么访问得到?」

嗯,这就是内网穿透工具要解决的问题了。它能把你的本地服务暴露到公网上,让微信服务器能访问到。

常用的工具有几个:

工具名称 特点 推荐场景
ngrok 免费版有限速,配置简单 快速测试
natapp 国内服务,速度较快 日常开发
frp 自建服务器,完全可控 生产环境

我个人最常用的是 natapp。原因很简单——它不需要注册就能用,下载下来直接跑。而且国内访问速度比 ngrok 快不少。

用法也很简单:

  1. 下载 natapp 客户端
  2. 在命令行里执行 natapp -authtoken=你的token
  3. 它会生成一个类似 http://abc123.natapp.cc 的地址

把这个地址填到测试号的 URL 配置里,后面加上你的路由路径,比如 http://abc123.natapp.cc/wechat。这样微信就能找到你的本地服务了。

注意:免费版的 natapp 每次启动都会换域名。你每次重启后,都得去测试号页面更新 URL。我建议你开发期间不要频繁关掉它。

1.5 完整流程总结

好了,我们来捋一遍整个流程:

  1. 申请测试号,拿到 appID 和 appsecret
  2. 写一个简单的服务器,实现接入验证逻辑
  3. 启动内网穿透工具,拿到公网地址
  4. 把地址和 Token 填到测试号配置里
  5. 点击提交,验证通过

这一步走通了,后面的开发才有意义。你想想看,如果连环境都没搭好,后面写再多代码也跑不起来,对吧?

核心要点:

  • 测试号是学习的最佳选择,功能完整且免费
  • 接入验证的本质是 SHA1 签名比对
  • 内网穿透是本地开发的必备工具
  • Token 和 appsecret 一定要保管好

下一章,我们会正式开始写代码,实现公众号的自动回复功能。到时候你会发现,环境搭好了,写代码其实是最简单的一步。