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)微 ...
随机推荐
- 【网站搭建】Docsify+Gittalk的配置过程记录分享。原创!
Gittalk 配置 这个不一定最先配置,我也不建议你最先配置这个,这个最好最后配置. 萌狼蓝天把这个的配置写在第一条,是因为我在这折腾了很久,就是因为网上抄来抄去的答案,除了迷惑萌狼蓝天难以给萌狼蓝 ...
- 欧拉OpenEuler安装MySQL8
1. 安装mysql tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar mv mysql-8.0.21-linux-glibc2.12-x86_64 / ...
- [转]创建Visual Studio 2019离线安装包
可以在不同的网络环境和不同的计算机上在线安装微软Visual Studio 2019.微软提供的在线安装工具(Visual Studio web installer)可以让用户在线下载最新版本Visu ...
- [转]CMake:相关概念与使用入门
CMake:相关概念与使用入门(一) CMake:搜索文件和指定头文件目录(三) CMake 子工程添加 根目录中他文件夹里的cpp文件 翻译 搜索 复制
- [转]CMake学习笔记(一)基本概念介绍、入门教程及CLion安装配置
原文链接:CMake学习笔记(一)基本概念介绍.入门教程及CLion安装配置
- CF1763C Another Array Problem
人类智慧题.harmis_yz 不会. 题意 \(\tt{Link}\) 给定一个序列 \(\{a_n\}\),可以进行若干次操作,每次可以选择 \(i,j(1 \le i < j \le n) ...
- Solution -「CF 808E」Selling Souvenirs
\(\mathscr{Description}\) Link. 01 背包. 物品种类 \(n\le10^5\),背包容量 \(m\le3\times10^5\),单个物品体积 \(w\i ...
- x86平台SIMD编程入门(4):整型指令
1.算术指令 算术类型 函数示例 加 _mm_add_epi32._mm256_sub_epi16 减 _mm_sub_epi32._mm256_sub_epi16 乘 _mm_mul_epi32._ ...
- ids4-startup
https://stackoverflow.com/questions/28418360/jwt-json-web-token-audience-aud-versus-client-id-whats- ...
- 免费-高清免费视频录像软件OBS
OBS studio 是免费开源的. https://obsproject.com/download 中文绿色版: http://www.xitongzhijia.net/soft/151705.ht ...