一个基于PHP开发的微信模板消息推送服务支持PHP5.6+版本。开源地址:https://gitee.com/web/php-wxpush
功能特性
✅ 支持GET和POST请求方式
✅ 支持JSON和表单参数解析
✅ 微信AccessToken自动获取与缓存
✅ 支持多appid独立缓存
✅ 自动处理AccessToken过期
✅ 消息详情页面展示
✅ 动态粒子背景效果
✅ 响应式设计,适配各种设备
✅ 兼容PHP5.6+版本
✅ 支持自定义时区
✅ 完整的错误处理机制
⚠️ 部署条件
体验接口权限
| | |
|---|
| https://developers.weixin.qq.com/doc/service/api/base/api_getstableaccesstoken.html | |
| https://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=tmplmsg/faq_tmpl | |
安装部署
环境要求
PHP 5.6 或更高版本
cURL 扩展
JSON 扩展
部署步骤
下载项目文件
git clone https://gitee.com/web/php-wxpush.gitcd php-wxpush
配置默认参数和API密钥
return [ // 默认模板配置 'default' => [ 'template_id' => 'your_template_id', 'title' => '默认标题', 'content' => '默认内容', 'base_url' => 'https://your-domain.com', 'tz' => 'Asia/Shanghai', ], // API密钥配置(可选,用于增强API安全性) // 默认为空数组,不启用API密钥验证 // 配置后,调用/wxsend接口必须传递有效的apikey参数 'apikeys' => [ 'your_api_key_1', 'your_api_key_2', ], // 按appid配置不同的默认参数 'appids' => [ 'your_appid_here' => [ 'template_id' => 'your_template_id', 'title' => '应用专属标题', 'content' => '应用专属内容', 'base_url' => 'https://your-domain.com', 'tz' => 'Asia/Shanghai', ], ], // 系统配置 'system' => [ 'cache_dir' => './cache/', 'timezone' => 'Asia/Shanghai', ],];
部署到Web服务器
将项目文件上传到Web服务器的根目录或子目录
确保Web服务器配置正确,能够解析PHP文件
确保缓存目录有写入权限
配置Web服务器
server { listen 80; server_name your-domain.com; root /path/to/php-wxpush; index index.php; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}
测试域名(仅供测试,请勿用于生效环境)
https://wxpush.bitefu.net/wxsend
使用方法
1. 通过HTTP请求使用
发送微信模板消息
GET请求(完整参数)
http://your-domain/index.php/wxsend?appid=your_appid&secret=your_secret&userid=your_userid&template_id=your_template_id&title=测试标题&content=测试内容
GET请求(使用默认参数)
http://your-domain/index.php/wxsend?appid=your_appid&secret=your_secret&userid=your_userid
GET请求(使用API密钥)
http://your-domain/index.php/wxsend?appid=your_appid&secret=your_secret&userid=your_userid&template_id=your_template_id&apikey=your_api_key
POST请求(JSON,完整参数)
curl -X POST -H "Content-Type: application/json" -d '{ "appid": "your_appid", "secret": "your_secret", "userid": "your_userid", "template_id": "your_template_id", "title": "测试标题", "content": "测试内容" }' http://your-domain/index.php/wxsendPOST请求(JSON,使用默认参数)
curl -X POST -H "Content-Type: application/json" -d '{ "appid": "your_appid", "secret": "your_secret", "userid": "your_userid" }' http://your-domain/index.php/wxsendPOST请求(JSON,使用API密钥)
curl -X POST -H "Content-Type: application/json" -d '{ "appid": "your_appid", "secret": "your_secret", "userid": "your_userid", "template_id": "your_template_id", "apikey": "your_api_key" }' http://your-domain/index.php/wxsendPOST请求(表单,完整参数)
curl -X POST -d "appid=your_appid&secret=your_secret&userid=your_userid&template_id=your_template_id&title=测试标题&content=测试内容" http://your-domain/index.php/wxsend
POST请求(表单,使用默认参数)
curl -X POST -d "appid=your_appid&secret=your_secret&userid=your_userid" http://your-domain/index.php/wxsend
POST请求(表单,使用API密钥)
curl -X POST -d "appid=your_appid&secret=your_secret&userid=your_userid&template_id=your_template_id&apikey=your_api_key" http://your-domain/index.php/wxsend
ThinkPHP伪静态模式
GET请求(使用s参数)
http://your-domain/index.php?s=/wxsend&appid=your_appid&secret=your_secret&userid=your_userid
GET请求(使用s参数和API密钥)
http://your-domain/index.php?s=/wxsend&appid=your_appid&secret=your_secret&userid=your_userid&template_id=your_template_id&apikey=your_api_key
POST请求(JSON,使用s参数)
curl -X POST -H "Content-Type: application/json" -d '{"appid":"your_appid","secret":"your_secret","userid":"your_userid"}' "http://your-domain/index.php?s=/wxsend"POST请求(JSON,使用s参数和API密钥)
curl -X POST -H "Content-Type: application/json" -d '{"appid":"your_appid","secret":"your_secret","userid":"your_userid","template_id":"your_template_id","apikey":"your_api_key"}' "http://your-domain/index.php?s=/wxsend"POST请求(表单,使用s参数)
curl -X POST -d "appid=your_appid&secret=your_secret&userid=your_userid" "http://your-domain/index.php?s=/wxsend"
POST请求(表单,使用s参数和API密钥)
curl -X POST -d "appid=your_appid&secret=your_secret&userid=your_userid&template_id=your_template_id&apikey=your_api_key" "http://your-domain/index.php?s=/wxsend"
查看消息详情
标准模式
http://your-domain/index.php/detail?title=测试标题&message=测试内容&date=2023-01-01%2012:00:00
ThinkPHP伪静态模式
http://your-domain/index.php?s=/detail&title=测试标题&message=测试内容&date=2023-01-01%2012:00:00
2. 作为PHP类使用
// 引入微信推送类 require_once 'wxpush.php'; // 实例化微信推送类 $wxPush = new WxPush(); // 处理请求 $wxPush->handleRequest();
API文档
1. 发送微信模板消息
接口地址:/wxsend
请求方式:GET/POST
请求参数:
| | | | |
|---|
| | | | |
| | | | |
| | | | |
| | | | |
| | | API密钥,当config.php中配置了apikeys时必填 | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | 完整的模板数据数组,格式:{"keyword1":{"value":"值1"},"keyword2":{"value":"值2"}} | |
| | | 模板参数数组,格式:{"keyword1":{"value":"值1"},"keyword2":{"value":"值2"}} | |
| | | 单个模板参数,如template_keyword1=值1,会转换为{"keyword1":{"value":"值1"}} | |
返回结果:
{"errcode": 0,"errmsg": "ok"}
2. 查看消息详情
接口地址:/detail
请求方式:GET
请求参数:
返回结果:HTML页面
3. 服务状态
接口地址:/
请求方式:GET
返回结果:
{"message": "php-wxpush is running..."}
示例代码
1. 直接调用类文件示例
完整参数示例
<?php// 直接调用WxPush类发送消息require_once 'wxpush.php';// 初始化微信推送类$wxPush = new WxPush();// 准备发送参数$params = [ 'appid' => 'your_appid', 'secret' => 'your_secret', 'userid' => 'your_userid', 'template_id' => 'your_template_id', 'title' => '测试标题', 'content' => '测试内容', 'base_url' => 'https://your-domain.com', // 可选,默认使用当前域名 'tz' => 'Asia/Shanghai' // 可选,默认时区];try { // 直接调用public方法发送消息(推荐方式) $result = $wxPush->sendMessage($params); echo "发送结果:\n"; print_r($result);} catch(Exception $e) { echo "发送失败:" . $e->getMessage() . "\n";}
使用自定义模板参数示例
<?php// 直接调用WxPush类发送消息(使用自定义模板参数)require_once 'wxpush.php';// 初始化微信推送类$wxPush = new WxPush();// 方式1:使用template_data参数(完整的模板数据)$params1 = [ 'appid' => 'your_appid', 'secret' => 'your_secret', 'userid' => 'your_userid', 'template_id' => 'your_template_id', 'template_data' => [ 'keyword1' => ['value' => '订单号:123456'], 'keyword2' => ['value' => '支付金额:100元'], 'keyword3' => ['value' => '支付时间:2023-01-01 12:00:00'], 'keyword4' => ['value' => '支付状态:成功'] ]];// 方式2:使用template_params参数(数组形式的模板参数)$params2 = [ 'appid' => 'your_appid', 'secret' => 'your_secret', 'userid' => 'your_userid', 'template_id' => 'your_template_id', 'template_params' => [ 'keyword1' => ['value' => '订单号:123456'], 'keyword2' => ['value' => '支付金额:100元'] ]];// 方式3:使用单个template_*参数$params3 = [ 'appid' => 'your_appid', 'secret' => 'your_secret', 'userid' => 'your_userid', 'template_id' => 'your_template_id', 'title' => '订单通知', 'content' => '您的订单已支付成功', 'template_keyword1' => '订单号:123456', 'template_keyword2' => '支付金额:100元', 'template_keyword3' => ['value' => '支付时间:2023-01-01 12:00:00', 'color' => '#FF0000']];try { // 使用方式1发送消息 $result = $wxPush->sendMessage($params1); echo "发送结果:\n"; print_r($result);} catch(Exception $e) { echo "发送失败:" . $e->getMessage() . "\n";}
使用API密钥示例
<?php// 直接调用WxPush类发送消息(使用API密钥)require_once 'wxpush.php';// 初始化微信推送类$wxPush = new WxPush();// 当config.php中配置了apikeys时,必须传递apikey参数$params = [ 'appid' => 'your_appid', 'secret' => 'your_secret', 'userid' => 'your_userid', 'template_id' => 'your_template_id', 'apikey' => 'your_api_key', // API密钥,与config.php中配置的apikeys数组中的某个值匹配 'title' => '测试标题', 'content' => '测试内容'];try { // 发送消息 $result = $wxPush->sendMessage($params); echo "发送结果:\n"; print_r($result);} catch(Exception $e) { echo "发送失败:" . $e->getMessage() . "\n";}
2. PHP HTTP请求示例
<?php// 发送HTTP请求示例functionsendWechatMessage($params){ $url = 'http://your-domain/index.php/wxsend'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); $response = curl_exec($ch); curl_close($ch);return json_decode($response, true);}// 使用示例$params = ['appid' => 'your_appid','secret' => 'your_secret','userid' => 'your_userid','template_id' => 'your_template_id','title' => '测试标题','content' => '测试内容'];$result = sendWechatMessage($params);print_r($result);
3. Python示例
import requestsimport jsonurl = 'http://your-domain/index.php/wxsend'params = {'appid': 'your_appid','secret': 'your_secret','userid': 'your_userid','template_id': 'your_template_id','title': '测试标题','content': '测试内容'}response = requests.post(url, data=json.dumps(params), headers={'Content-Type': 'application/json'})print(response.json())
4. Shell示例
# GET请求curl "http://your-domain/index.php/wxsend?appid=your_appid&secret=your_secret&userid=your_userid&template_id=your_template_id&title=测试标题&content=测试内容"# POST JSON请求curl -X POST -H "Content-Type: application/json" -d '{"appid":"your_appid","secret":"your_secret","userid":"your_userid","template_id":"your_template_id","title":"测试标题","content":"测试内容"}' http://your-domain/index.php/wxsend
注意事项
微信模板消息配置
需要在微信公众平台中配置好模板消息
模板消息必须包含title和content字段
确保模板ID与实际配置一致
AccessToken缓存
错误处理
接口返回的错误码与微信官方保持一致
详细错误信息可查看服务器日志
安全性
建议在生产环境中使用HTTPS协议
不要将AppSecret泄露给第三方
建议设置IP白名单限制访问
性能优化
许可证
MIT License
更新日志
v1.0.0 (2026-01-23)
初始版本
实现微信模板消息推送功能
支持GET和POST请求
实现AccessToken缓存机制
提供消息详情页面
兼容PHP5.6+版本
贡献
欢迎提交Issue和Pull Request!
联系方式
如有问题或建议,请通过以下方式联系:
参考项目
本项目参考了以下优秀项目:
感谢
感谢原项目作者的开源贡献,本项目是基于 go-wxpush 项目的PHP实现,保持了与原项目完全兼容的API功能。
PHP微信模板消息推送服务 - 简单、高效、可靠的微信消息推送解决方案!