2、开发环境准备:申请微信公众平台测试号、配置服务器URL、Token验证机制详解
好,咱们正式开始动手了。这一章我会带你走完开发前的所有准备工作。说白了,就是让微信服务器和你的本地代码能互相认识。
我刚开始做微信开发时,觉得这步最烦人。又是填URL又是配Token,搞不好还验证失败。但后来我发现,只要理解了背后的逻辑,其实就那点事儿。
2.1 为什么要用测试号?
正式的服务号或订阅号,申请流程长,权限限制多。你想想看,开发阶段频繁改配置,动不动就要审核,谁受得了?
微信官方提供了测试号,专门给开发者练手用。它的好处很明显:
- 申请快:扫码即用,不用等审核
- 权限全:几乎覆盖所有接口权限
- 随便改:服务器配置可以反复修改
- 无成本:完全免费
2.2 申请测试号
操作很简单,跟着我来:
- 打开微信公众平台测试号申请页面:
https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index - 用你的微信扫码登录
- 系统会自动分配一个测试号,包含
appID和appsecret
拿到这两个参数后,先记下来。后面所有接口调用都离不开它们。
| 参数名 | 说明 | 示例值 |
|---|---|---|
| appID | 应用唯一标识 | wx1234567890abcdef |
| appsecret | 应用密钥(请保密) | abcdef1234567890abcdef1234567890 |
2.3 配置服务器URL
拿到测试号后,你会看到一个「接口配置信息」的栏目。这里需要填两个东西:
- URL:你的服务器地址,微信会往这里发请求
- Token:你自己定义的签名密钥,用来验证请求是否来自微信
URL 必须是公网可访问的地址。本地开发怎么办?我推荐用内网穿透工具,比如 ngrok 或 natapp。
我的实战经验:用 ngrok 最省事。一条命令就能把本地 localhost 映射到公网。
ngrok http 8080
运行后你会得到一个 https://xxxx.ngrok.io 的地址,把这个填到 URL 里就行。
URL 的路径可以自定义。我习惯用 /wechat 作为入口,比如:https://xxxx.ngrok.io/wechat。
2.4 Token验证机制详解
嗯,这里要重点说一下。微信为什么要搞这个Token验证?说白了,就是为了确认「这个URL确实是你控制的」。防止别人乱填你的地址。
验证流程是这样的:
- 你在测试号后台填好 URL 和 Token,点击提交
- 微信服务器会向你的 URL 发一个 GET 请求
- 请求里带着四个参数:
signature、timestamp、nonce、echostr - 你的服务器需要校验
signature是否正确 - 校验通过后,原样返回
echostr,微信就知道这个URL是你的了
校验算法其实很简单,就三步:
- 将 Token、timestamp、nonce 三个参数按字典序排序
- 将排序后的三个字符串拼接成一个字符串
- 对拼接后的字符串做 SHA1 加密,得到的结果和 signature 对比
来看代码实现,我用 Node.js 写一个示例:
const crypto = require('crypto');
// 这是你在测试号后台填的 Token
const TOKEN = 'your_self_defined_token';
function checkSignature(signature, timestamp, nonce) {
// 1. 排序
const arr = [TOKEN, timestamp, nonce].sort();
// 2. 拼接
const str = arr.join('');
// 3. SHA1 加密
const sha1 = crypto.createHash('sha1');
sha1.update(str);
const result = sha1.digest('hex');
// 4. 对比
return result === signature;
}
// 在 Express 路由中处理
app.get('/wechat', (req, res) => {
const { signature, timestamp, nonce, echostr } = req.query;
if (checkSignature(signature, timestamp, nonce)) {
// 验证通过,返回 echostr
res.send(echostr);
} else {
// 验证失败
res.send('Invalid signature');
}
});
避坑指南:我曾经犯过一个错——把 Token 写死在代码里,结果换项目时忘了改,调试了半天才发现。后来我统一用环境变量管理 Token,再也没出过问题。
const TOKEN = process.env.WECHAT_TOKEN || 'default_token';
2.5 验证成功后的下一步
当你点击提交,看到「配置成功」的提示时,恭喜你,环境已经搭好了。
这时候测试号后台会多出几个功能模块:
- JS接口安全域名:用于网页授权和JS-SDK调用
- 体验者微信号:添加微信号后,该用户可以用测试号进行交互
- 模板消息接口:发送通知类消息
- 自定义菜单:配置公众号菜单
我建议你先把「体验者微信号」加上自己的微信号。这样调试时可以直接用手机发消息,实时看到效果。
总结一下这章的核心:
- 测试号是开发利器,申请快、权限全
- URL 必须公网可访问,用 ngrok 解决本地开发问题
- Token 验证本质是 SHA1 签名校验,代码量很少
- 环境变量管理敏感信息,别硬编码
下一章,我们会正式接入微信消息。到时候你就能看到自己写的代码和微信服务器「对话」了。想想是不是有点小激动?