📋 目录
- 什么是微信公众号开发
- 准备工作
- 创建微信测试号
- 服务器配置
- 代码实现
- 功能测试
- 高级功能
- 常见问题
什么是微信公众号开发
微信公众号开发是指通过微信公众平台提供的接口,开发自定义功能,实现:
- 自动回复用户消息
- 获取用户信息
- 创建自定义菜单
- 推送消息给用户
- 实现各种业务逻辑(比如招商银行的查询余额)
微信公众号开发工作原理是:
用户发消息 → 微信服务器 → 你的服务器 → 处理逻辑 → 返回回复 → 微信服务器 → 用户收到回复
**它的本质,是把公众号后台和你自己的服务器“配对”。**配对成功后,你自己的服务器,将接管公众号的处理过程。一旦微信公众号后台与服务器上的 wechat.php
(可以是任何文件名字) 成功完成验证后:
- 微信服务器会将用户消息、事件推送到你的服务器接口。
- 你的服务器将正式“接管”公众号的后台逻辑。
- 后续所有交互(如自动回复、菜单点击、扫码事件等)都将通过你编写的 PHP 程序来处理。
这意味着你可以通过 PHP 编程来实现几乎所有的可能。
公众号开发与服务器如何配对?
第一步:在服务器上先放一个对接的PHP文件
往服务器根目录里创建个“wechat”的文件夹,扔进去一个”wechat.php”,里面写上token。token的名字可以任意。
比如https://yousite.com/wechatdemo/wechat.php
<?php
// 配置信息
define('WECHAT_TOKEN', 'hayeblog'); // 您的Token
define('WECHAT_APPID', 'your_app_id'); // 请替换为您的AppID
define('WECHAT_APPSECRET', 'your_app_secret'); // 请替换为您的AppSecret
第二步:在公众号后台-“开发接口管理”-启用服务器配置
在公众号后台-开发接口管理:启用”服务器配置”。
🔧 填写配置:
- URL:
https://haoyeblog.com/wpchatdemo/wechat.php
- Token:
hayeblog
⚠️ 重要提醒:
- URL必须是完整的,包含
.php
后缀 - Token必须与服务器里
wechat.php
代码中的完全一致 - 配置后点击”提交”进行验证
验证配置:
- 点击”提交”按钮
- 系统会向您的服务器发送验证请求
- 如果配置正确,会显示”配置成功”
保存这个设置后,微信会尝试使用token,与你设置的服务器地址和token进行配对。如果服务器上没有对应的wechat.php文件和token,公众号设置将会提示“无法设置”之类的错误。
所以,现在服务器上放好一个写有token的PHP文件,是第一步。
OK,现在,微信公众号开发,已经设置成功了。你自己的服务器上的PHP文件,已经接管了公众号的一部分功能。例如你会发现公众号后台,已经无法编辑“自动回复”信息了,“已被接管,去到你自己的服务器上去编辑吧”。
PHP编程接管公众号后台,那就无所不能了,你想到的,想不到的,都可以通过PHP编程来实现了。
领取微信官方的测试号,来试验各种功能
公众号个人账号,即使开通了公众号开发,受限也很大,很多功能无法实现,比如无法创建菜单。微信官方给了个测试后,高级权限,可以领略公众号开发的各种功能。
为什么用测试号?
- ✅ 功能完整 – 支持所有开发功能
- ✅ 无需认证 – 个人即可申请
- ✅ 无限制 – 没有消息发送限制
- ✅ 立即使用 – 申请后马上可用
不要使用easywechat第三方库!!我折腾了2次,都不成功!!用原生的就很容易!!
📁 我的项目文件结构
wechat-demo/
├── wechat.php # 微信消息处理主程序
├── wechat_functions.php # 功能函数库
├── create_simple_menu.php # 菜单创建脚本
├── check_menu.php # 菜单检查工具
└── wechat.log # 日志文件(自动生成)
📄 核心文件1:wechat_functions.php
这个文件包含所有功能函数,内容较长,主要包括:
<?php
// 配置信息
define('WECHAT_TOKEN', 'haoyelaiga');
define('WECHAT_APPID', 'your_app_id'); // 替换为实际AppID
define('WECHAT_APPSECRET', 'your_app_secret'); // 替换为实际AppSecret
// 主要功能模块:
// 1. 签名验证函数
// 2. 消息处理函数
// 3. 用户管理功能
// 4. 天气查询功能
// 5. 计算器功能
// 6. 娱乐功能(笑话、励志语录)
// 7. 自定义菜单功能
// ... 完整代码见附件文件
?>
📄 核心文件2:wechat.php
微信服务器访问的入口文件:
<?php
/**
* 微信公众号开发 - 主程序入口
* 专门处理微信服务器的请求
*/
require_once 'wechat_functions.php';
// 主程序逻辑
$method = $_SERVER['REQUEST_METHOD'];
writeLog("收到 {$method} 请求");
if ($method == 'GET') {
// 微信URL验证
writeLog("🔍 收到微信验证请求");
$signature = $_GET['signature'] ?? '';
$timestamp = $_GET['timestamp'] ?? '';
$nonce = $_GET['nonce'] ?? '';
$echostr = $_GET['echostr'] ?? '';
// 检查必要参数
$missingParams = array();
if (empty($signature)) $missingParams[] = 'signature';
if (empty($timestamp)) $missingParams[] = 'timestamp';
if (empty($nonce)) $missingParams[] = 'nonce';
if (empty($echostr)) $missingParams[] = 'echostr';
if (!empty($missingParams)) {
$error = "缺少必要参数: " . implode(', ', $missingParams);
writeLog("❌ " . $error);
http_response_code(400);
echo $error;
exit;
}
// 验证签名
if (checkSignature($signature, $timestamp, $nonce, WECHAT_TOKEN)) {
writeLog("✅ 微信验证成功!返回echostr: " . $echostr);
echo $echostr;
} else {
writeLog("❌ 微信验证失败!");
http_response_code(403);
echo '验证失败';
}
} elseif ($method == 'POST') {
// 处理微信消息
writeLog("📨 收到微信消息");
$signature = $_GET['signature'] ?? '';
$timestamp = $_GET['timestamp'] ?? '';
$nonce = $_GET['nonce'] ?? '';
// 验证签名
if (!checkSignature($signature, $timestamp, $nonce, WECHAT_TOKEN)) {
writeLog("❌ 消息验证失败");
http_response_code(403);
echo '验证失败';
exit;
}
// 获取POST数据
$input = file_get_contents('php://input');
writeLog("📋 接收到XML数据,长度: " . strlen($input) . " 字符");
// 解析XML
$message = simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA);
if ($message === false) {
writeLog("❌ XML解析失败");
http_response_code(400);
echo 'XML parsing error';
exit;
}
// 转换为数组
$messageArray = json_decode(json_encode($message), true);
// 处理消息并回复
$reply = handleMessage($messageArray);
// 清理输出缓冲区
if (ob_get_level()) {
ob_end_clean();
}
// 设置HTTP头部
header('Content-Type: text/xml; charset=utf-8');
header('Cache-Control: no-cache, must-revalidate');
// 输出回复
echo trim($reply);
flush();
writeLog("✅ 回复已发送到微信服务器");
}
?>
📄 辅助工具:自定义菜单创建
创建 create_simple_menu.php
:
<?php
/**
* 创建简单菜单 - 只有一个跳转到csrwiki.com的按钮
*/
require_once 'wechat_functions.php';
// 检查配置
if (WECHAT_APPID == 'your_app_id' || WECHAT_APPSECRET == 'your_app_secret') {
echo "❌ 请先配置 WECHAT_APPID 和 WECHAT_APPSECRET";
exit;
}
// 创建菜单函数
function createSimpleMenu() {
$accessToken = getAccessToken();
if (!$accessToken) {
return array('success' => false, 'message' => '无法获取Access Token');
}
// 菜单结构 - 跳转到外部网站
$menuData = array(
"button" => array(
array(
"type" => "view",
"name" => "CSR Wiki",
"url" => "https://csrwiki.com"
)
)
);
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $accessToken;
$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => "Content-Type: application/json; charset=utf-8\r\n",
'content' => json_encode($menuData, JSON_UNESCAPED_UNICODE)
)
));
$response = @file_get_contents($url, false, $context);
if ($response === false) {
return array('success' => false, 'message' => '网络请求失败');
}
$result = json_decode($response, true);
if ($result['errcode'] == 0) {
writeLog("✅ 简单菜单创建成功");
return array('success' => true, 'message' => '菜单创建成功');
} else {
writeLog("❌ 创建菜单失败:" . $result['errmsg']);
return array('success' => false, 'message' => $result['errmsg']);
}
}
echo "🚀 创建简单菜单...\n";
$result = createSimpleMenu();
if ($result['success']) {
echo "✅ " . $result['message'] . "\n";
echo "📱 用户现在可以点击菜单中的 'CSR Wiki' 跳转到 csrwiki.com\n";
} else {
echo "❌ " . $result['message'] . "\n";
}
?>
功能测试
🧪 第一步:基本功能测试
1. 关注测试号
- 扫描微信测试号管理页面的二维码
- 关注后应该收到欢迎消息
2. 测试基础回复功能
发送以下消息测试:
你好 → 应该收到欢迎消息
时间 → 应该收到当前时间
菜单 → 应该收到功能列表
测试 → 应该收到测试成功信息
🎮 第二步:高级功能测试
1. 天气查询功能
天气 北京 → 显示北京天气(模拟数据)
天气 上海 → 显示上海天气(模拟数据)
天气 xxx → 提示支持的城市列表
2. 计算器功能
1+2*3 → 显示计算结果:7
计算 10/2 → 显示计算结果:5
(1+2)*3 → 显示计算结果:9
3. 娱乐功能
笑话 → 随机程序员笑话
励志 → 随机励志语录
4. 用户管理功能
我的信息 → 显示用户详细信息
设置备注 VIP → 设置用户备注名
用户统计 → 显示公众号统计数据
本地数据 → 显示本地缓存的用户数据
🔗 第三步:自定义菜单测试
1. 创建菜单
访问:https://你的域名/create_simple_menu.php
2. 检查菜单
- 微信底部应该出现 “CSR Wiki” 按钮
- 点击按钮应该跳转到 csrwiki.com
3. 菜单显示问题
如果菜单没有显示:
- 取消关注后重新关注(最快方法)
- 等待1-5分钟自动刷新
- 清除微信缓存后重新打开
高级功能
🎯 已实现的功能模块
1. 消息处理系统
- ✅ 自动回复文本消息
- ✅ 智能回复逻辑
- ✅ 关注/取消关注事件处理
- ✅ 菜单点击事件处理
2. 实用工具
- ✅ 天气查询(支持4个城市)
- ✅ 数学计算器
- ✅ 时间查询
- ✅ 帮助菜单
3. 娱乐功能
- ✅ 程序员笑话库(5条)
- ✅ 励志语录库(5条)
- ✅ 随机内容推送
4. 用户管理系统
- ✅ 获取用户基本信息
- ✅ 设置用户备注名
- ✅ 查看用户统计数据
- ✅ 本地数据缓存
- ✅ 智能数据存储
5. 自定义菜单
- ✅ 创建外链菜单
- ✅ 菜单管理工具
- ✅ 菜单状态检查
🔧 技术特性
1. 完善的日志系统
- 详细的请求日志
- 错误诊断信息
- 签名验证过程
- 消息处理流程
2. 安全机制
- 微信签名验证
- XML安全解析
- 错误处理机制
- 参数验证
3. 扩展性设计
- 模块化函数设计
- 易于添加新功能
- 配置文件分离
- 代码复用性强
常见问题
❓ Q1: 验证失败,显示”Invalid signature”
解决方案:
- 检查Token是否一致
- 确认URL格式正确(包含.php后缀)
- 检查服务器时间是否正确
- 查看日志文件排查具体原因
❓ Q2: 用户发送消息没有回复
解决方案:
- 检查微信平台配置是否成功提交
- 查看服务器日志是否收到POST请求
- 确认PHP文件可以正常访问
- 验证AppID和AppSecret是否正确
❓ Q3: 自定义菜单不显示
解决方案:
- 取消关注后重新关注(最有效)
- 等待1-5分钟自动刷新
- 检查菜单是否创建成功
- 清除微信缓存
❓ Q4: 获取用户信息失败
解决方案:
- 确认AppID和AppSecret配置正确
- 检查Access Token是否获取成功
- 确认用户已关注公众号
- 查看API调用限制是否超出
❓ Q5: 服务器报错500
解决方案:
- 检查PHP语法错误
- 确认服务器支持PHP
- 检查文件权限
- 查看服务器错误日志
总结
🎉 完成的成果
通过本教程,你已经成功创建了:
- ✅ 功能完整的微信公众号后端
- ✅ 智能消息处理系统
- ✅ 用户管理功能模块
- ✅ 实用工具集合
- ✅ 自定义菜单系统
- ✅ 完善的调试和日志机制
🚀 可扩展的方向
- 接入真实API – 天气、新闻、翻译等
- 数据库存储 – MySQL存储用户数据
- AI功能 – 接入ChatGPT等AI服务
- 富媒体消息 – 图文消息、语音、图片
- 业务逻辑 – 电商、客服、教育等应用
💡 开发心得
- 从简单开始 – 先实现基本功能再扩展
- 完善日志 – 详细的日志是调试的关键
- 模块化设计 – 便于维护和扩展
- 测试驱动 – 每个功能都要充分测试
- 用户体验 – 关注用户的使用感受
这个项目为你提供了微信公众号开发的完整基础框架,可以在此基础上开发任何你想要的功能!🎮