deepseek:如何用php写微信公众号订阅回复事件
以下是使用 PHP 重写的微信公众号订阅事件回复的示例代码。这个代码实现了用户订阅(关注)公众号时,自动回复一条欢迎消息。
PHP 实现代码
<?php
// 微信公众平台的Token
define("TOKEN", "your_token");
// 验证消息的确来自微信服务器
function checkSignature() {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$tmpArr = array(TOKEN, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if ($tmpStr == $signature) {
return true;
} else {
return false;
}
}
// 处理用户订阅事件并回复消息
function responseMsg() {
// 获取POST数据
$postStr = file_get_contents("php://input");
// 如果数据不为空
if (!empty($postStr)) {
// 解析XML数据
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$msgType = $postObj->MsgType; // 消息类型
$event = $postObj->Event; // 事件类型
// 如果是订阅事件
if ($msgType == "event" && $event == "subscribe") {
$fromUser = $postObj->FromUserName; // 用户OpenID
$toUser = $postObj->ToUserName; // 公众号原始ID
// 回复的文本内容
$content = "欢迎关注我们的公众号!";
// 构造回复的XML消息
$response = "<xml>
<ToUserName><![CDATA[$fromUser]]></ToUserName>
<FromUserName><![CDATA[$toUser]]></FromUserName>
<CreateTime>" . time() . "</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[$content]]></Content>
</xml>";
echo $response;
}
} else {
echo "";
exit;
}
}
// 主逻辑
if (checkSignature()) {
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
// 验证服务器地址有效性
echo $_GET['echostr'];
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// 处理用户消息
responseMsg();
}
} else {
echo "Invalid signature.";
}
?>
代码说明
Token 配置:
TOKEN是你在微信公众号后台配置的 Token,需要与代码中的define("TOKEN", "your_token");一致。
签名验证:
checkSignature()函数用于验证消息是否来自微信服务器。- 微信服务器会发送
signature、timestamp、nonce和echostr参数,通过校验签名确认请求的合法性。
处理订阅事件:
- 当用户关注公众号时,微信服务器会发送一个 XML 格式的事件消息。
- 解析 XML 数据,判断
MsgType是否为event,且Event是否为subscribe。 - 如果是订阅事件,构造一个文本消息回复用户。
回复消息:
- 回复的消息是一个 XML 格式的文本消息,包含用户的 OpenID、公众号的原始 ID、消息类型和内容。
GET 和 POST 请求处理:
- GET 请求用于验证服务器地址有效性。
- POST 请求用于处理用户消息和事件。
部署与测试
- 将代码上传到你的服务器,确保可以通过公网访问。
- 在微信公众号后台配置服务器地址(URL)和 Token。
- URL 是你的服务器地址,例如:
https://yourdomain.com/wechat.php。 - Token 需要与代码中的
TOKEN一致。
- URL 是你的服务器地址,例如:
- 关注你的公众号,测试是否能收到欢迎消息。
注意事项
服务器响应时间:
- 微信服务器会在 5 秒内等待响应,如果超时会重试 3 次。因此,确保你的服务器能够快速处理请求。
安全性:
- 确保代码中的 Token 与微信公众号后台配置一致,避免被恶意请求攻击。
日志记录:
- 可以在代码中添加日志记录功能,方便调试和排查问题。
通过以上代码,你可以实现微信公众号的订阅事件回复功能。如果有更复杂的需求(如图文消息、菜单事件等),可以在此基础上扩展。
deepseek:如何用php写微信公众号订阅回复事件的更多相关文章
- 用Markdown写微信公众号文章
目前微信公众号的编辑器是不支持Markdown语法的,那怎么办呢? 有一款叫Markdown Here的插件可以解决这个问题(支持Chrome.Firefox.Safari). 官方网站:http:/ ...
- vue 仿写微信公众号自定义菜单
先看效果图 代码参考 <template> <div> <!-- 公众号设置 --> <el-col :span="24" style=& ...
- 微信公众号订阅号以及服务号通过网页授权获取用户openid方法
微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 官方流程 网页授权流程分为四步: 1.引导用户 ...
- Java获取微信公众号新增用户事件
一.新建项目工程 新建一个spring项目 填写 Group 和 Artifact 信息 这步可以直接跳过,后面再按需导入 选择工程地址 二.配置 pom.xml <dependencies&g ...
- ios微信公众号分享回调事件
IOS手机在分享成功后,回调事件无法正常执行,在回调方法里面加入: setTimeout(function () { //todo }, ); 例如: //分享 Share({ title: &quo ...
- C#微信公众号/订阅号开发 接口源码
using System; using System.Web; using System.IO; using System.Text; using System.Web.Security; using ...
- 微信公众号开发(一)--验证服务器地址的Java实现
现在主流上都用php写微信公众号后台,其实作为后端语言之一的java也可以实现. 这篇文章将对验证服务器地址这一步做出实现. 参考资料:1.慕课网-<初识java微信公众号开发>,2.微信 ...
- 小技巧,把Markdown文本发布到微信公众号文章
估计很多人都是这样,平常工作在github,等到有成果要发布,又要写微信公众号. github用Markdown,微信公众号,至少截止今天,还是沿用富文本的方式.不是说富文本不好,但每次精心撰写的内容 ...
- 微信公众号DOM的一个坑
最近不知道写什么,node的源码有点不知道怎么入手,还在努力学习C++中…… 在写微信公众号的时候遇到了一个小bug,有一个tab栏,在开发者工具.IOS手机上都OK,但是一到我的小米note上就GG ...
- Django实现微信公众号简单自动回复
在上篇博客阿里云部署django实现公网访问已经实现了了django在阿里云上的部署,接下来记录django实现微信公众号简单回复的开发过程,以方便日后查看 内容概要: (1)微信公众号声请 (2)微 ...
随机推荐
- Zookeeper Java API操作流程
首先需要配置一台Zookeeper服务器 pom文件 <dependencies> <!-- https://mvnrepository.com/artifact/org.a ...
- 【MyBatis】学习笔记14:通过collection解决一对多的映射关系
MyBatis14:通过collection解决一对多的映射关系 目录 MyBatis14:通过collection解决一对多的映射关系 对象 接口 映射文件 测试 总结 注意事项 已知,一个部门对应 ...
- mac上遇到的错误sed command a expects followed by text
上简单的替换操作 sed -i 's/apple/mac/g' full-path-file 执行后报错,"sed: 1: command a expects \ followed by t ...
- com.sun.xml.internal.messaging.saaj.util 不存在
maven 编译时报错:程序包com.sun.xml.internal.messaging.saaj.util不存在需要添加 <compilerArguments> <verbose ...
- macOS 中有什么好用的虚拟机软件?
macOS 中有什么好用的虚拟机软件? https://www.zhihu.com/question/66366176/answer/268256386 问题:1.macOS是否有专门的虚拟机软件?或 ...
- Qt/C++音视频开发54-视频监控控件的极致设计
一.前言 跌跌撞撞摸爬滚打一步步迭代完善到今天,这个视频监控控件的设计,在现阶段水平上个人认为是做的最棒的(稍微自恋一下),理论上来说应该可以用5年不用推翻重写,推翻重写当然也是程序员爱干的事情,这个 ...
- Qt自定义控件集成到全平台QtCreator效果图
- NetCore开源项目,适合新手学习
VerEasy.Core 介绍 这是一个基于 .NET Core 的易开发的框架,附 vue3前端框架.提供了一个高效可扩展的API程序. 支持 JWT 认证.数据库操作.日志记录.异步处理等特性,能 ...
- Kubernetes系列(四) - Pod和Pod调度
目录 1. Pod的组成部分 2. Pod的优势 3. Pod的两种分类 3.1 普通的pod 3.2 静态pod(static pod) 4. 控制器controller的特点 4.1 Deploy ...
- Solution -「NOI 2017」「洛谷 P3824」泳池
\(\mathscr{Description}\) Link. 给定 \(n,k,p\), 求在一个 \(\infty\times n\) 的矩阵中, 每个位置的值以 \(p\) 的概率为 \ ...