以下是使用 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.";
}
?>

代码说明

  1. Token 配置

    • TOKEN 是你在微信公众号后台配置的 Token,需要与代码中的 define("TOKEN", "your_token"); 一致。
  2. 签名验证

    • checkSignature() 函数用于验证消息是否来自微信服务器。
    • 微信服务器会发送 signaturetimestampnonceechostr 参数,通过校验签名确认请求的合法性。
  3. 处理订阅事件

    • 当用户关注公众号时,微信服务器会发送一个 XML 格式的事件消息。
    • 解析 XML 数据,判断 MsgType 是否为 event,且 Event 是否为 subscribe
    • 如果是订阅事件,构造一个文本消息回复用户。
  4. 回复消息

    • 回复的消息是一个 XML 格式的文本消息,包含用户的 OpenID、公众号的原始 ID、消息类型和内容。
  5. GET 和 POST 请求处理

    • GET 请求用于验证服务器地址有效性。
    • POST 请求用于处理用户消息和事件。

部署与测试

  1. 将代码上传到你的服务器,确保可以通过公网访问。
  2. 在微信公众号后台配置服务器地址(URL)和 Token。
    • URL 是你的服务器地址,例如:https://yourdomain.com/wechat.php
    • Token 需要与代码中的 TOKEN 一致。
  3. 关注你的公众号,测试是否能收到欢迎消息。

注意事项

  1. 服务器响应时间

    • 微信服务器会在 5 秒内等待响应,如果超时会重试 3 次。因此,确保你的服务器能够快速处理请求。
  2. 安全性

    • 确保代码中的 Token 与微信公众号后台配置一致,避免被恶意请求攻击。
  3. 日志记录

    • 可以在代码中添加日志记录功能,方便调试和排查问题。

通过以上代码,你可以实现微信公众号的订阅事件回复功能。如果有更复杂的需求(如图文消息、菜单事件等),可以在此基础上扩展。

deepseek:如何用php写微信公众号订阅回复事件的更多相关文章

  1. 用Markdown写微信公众号文章

    目前微信公众号的编辑器是不支持Markdown语法的,那怎么办呢? 有一款叫Markdown Here的插件可以解决这个问题(支持Chrome.Firefox.Safari). 官方网站:http:/ ...

  2. vue 仿写微信公众号自定义菜单

    先看效果图 代码参考 <template> <div> <!-- 公众号设置 --> <el-col :span="24" style=& ...

  3. 微信公众号订阅号以及服务号通过网页授权获取用户openid方法

    微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 官方流程 网页授权流程分为四步: 1.引导用户 ...

  4. Java获取微信公众号新增用户事件

    一.新建项目工程 新建一个spring项目 填写 Group 和 Artifact 信息 这步可以直接跳过,后面再按需导入 选择工程地址 二.配置 pom.xml <dependencies&g ...

  5. ios微信公众号分享回调事件

    IOS手机在分享成功后,回调事件无法正常执行,在回调方法里面加入: setTimeout(function () { //todo }, ); 例如: //分享 Share({ title: &quo ...

  6. C#微信公众号/订阅号开发 接口源码

    using System; using System.Web; using System.IO; using System.Text; using System.Web.Security; using ...

  7. 微信公众号开发(一)--验证服务器地址的Java实现

    现在主流上都用php写微信公众号后台,其实作为后端语言之一的java也可以实现. 这篇文章将对验证服务器地址这一步做出实现. 参考资料:1.慕课网-<初识java微信公众号开发>,2.微信 ...

  8. 小技巧,把Markdown文本发布到微信公众号文章

    估计很多人都是这样,平常工作在github,等到有成果要发布,又要写微信公众号. github用Markdown,微信公众号,至少截止今天,还是沿用富文本的方式.不是说富文本不好,但每次精心撰写的内容 ...

  9. 微信公众号DOM的一个坑

    最近不知道写什么,node的源码有点不知道怎么入手,还在努力学习C++中…… 在写微信公众号的时候遇到了一个小bug,有一个tab栏,在开发者工具.IOS手机上都OK,但是一到我的小米note上就GG ...

  10. Django实现微信公众号简单自动回复

    在上篇博客阿里云部署django实现公网访问已经实现了了django在阿里云上的部署,接下来记录django实现微信公众号简单回复的开发过程,以方便日后查看 内容概要: (1)微信公众号声请 (2)微 ...

随机推荐

  1. 【网站搭建】Docsify+Gittalk的配置过程记录分享。原创!

    Gittalk 配置 这个不一定最先配置,我也不建议你最先配置这个,这个最好最后配置. 萌狼蓝天把这个的配置写在第一条,是因为我在这折腾了很久,就是因为网上抄来抄去的答案,除了迷惑萌狼蓝天难以给萌狼蓝 ...

  2. 欧拉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 / ...

  3. [转]创建Visual Studio 2019离线安装包

    可以在不同的网络环境和不同的计算机上在线安装微软Visual Studio 2019.微软提供的在线安装工具(Visual Studio web installer)可以让用户在线下载最新版本Visu ...

  4. [转]CMake:相关概念与使用入门

    CMake:相关概念与使用入门(一) CMake:搜索文件和指定头文件目录(三) CMake 子工程添加 根目录中他文件夹里的cpp文件 翻译 搜索 复制

  5. [转]CMake学习笔记(一)基本概念介绍、入门教程及CLion安装配置

    原文链接:CMake学习笔记(一)基本概念介绍.入门教程及CLion安装配置

  6. CF1763C Another Array Problem

    人类智慧题.harmis_yz 不会. 题意 \(\tt{Link}\) 给定一个序列 \(\{a_n\}\),可以进行若干次操作,每次可以选择 \(i,j(1 \le i < j \le n) ...

  7. Solution -「CF 808E」Selling Souvenirs

    \(\mathscr{Description}\)   Link.   01 背包.   物品种类 \(n\le10^5\),背包容量 \(m\le3\times10^5\),单个物品体积 \(w\i ...

  8. x86平台SIMD编程入门(4):整型指令

    1.算术指令 算术类型 函数示例 加 _mm_add_epi32._mm256_sub_epi16 减 _mm_sub_epi32._mm256_sub_epi16 乘 _mm_mul_epi32._ ...

  9. ids4-startup

    https://stackoverflow.com/questions/28418360/jwt-json-web-token-audience-aud-versus-client-id-whats- ...

  10. 免费-高清免费视频录像软件OBS

    OBS studio 是免费开源的. https://obsproject.com/download 中文绿色版: http://www.xitongzhijia.net/soft/151705.ht ...