侠盒 - 一个杂七杂八的分享博客，总之就是随便搭来玩的 - 微信相关
type: channel
link: https://www.gtabox.cn/CAT/wechatabout/
items: 轻松实现微信公众号题库对接
items: 微信公众号本地服务器配置（持续更新）

轻松实现微信公众号题库对接
type: item
date: 2025-09-01T14:51:00+08:00
description: 简单说明一篇文章教你如何让你的微信公众号实现题库对接。这个题库功能，本人的公众号也在使用，各位可以去体验一下，扫侧栏的二维码，关注即可。具体代码已经写好了，只要复制到相应的位置即可【建议使用本人修改后的公众号配置文件，微信公众号的配置具体看：https://www.gtabox.cn/post/1376/ 这篇文章！】，使用起来十分方便，且看下面的操作步骤。注：只是提供了一个思路，你可以把代码里的题库改成其他的，甚至美化，这都随便。操作步骤将下面代码添加到 【// 构造回复内容】if语句后面，elif语句前面： // 题目查询处理 elseif (mb_strpos($content, '题目：') === 0) { $prefix = '题目：'; $questionText = trim(mb_substr($content, mb_strlen($prefix))); if (empty($questionText)) { $replyContent = "⚠️ 题目内容不能为空"; } else { list($error, $answer) = query_question_bank($questionText); $replyContent = $answer ?: $error; } $reply = <<<XML {$fromUser} {$toUser} {time()} text {$replyContent} XML; } 将下面代码添加到wechat.php的最下方：function query_question_bank($question) { // 参数验证 if (empty($question) || mb_strlen($question) > 500) { return ["问题内容不合法（长度限制500字符）", null]; } // 缓存机制（APCu示例） $cacheKey = 'qbank_'.md5($question); if (apcu_exists($cacheKey)) { $cached = apcu_fetch($cacheKey); return $cached['error'] ? [$cached['data'], null] : [null, $cached['data']]; } // API配置 $apiUrl = 'https://cx.icodef.com/wyn-nb?v=4'; $headers = [ 'Content-Type: application/x-www-form-urlencoded', 'Authorization: 6LDgu0KMkIi8s3B4' ]; $retry = 0; do { $ch = curl_init(); try { curl_setopt_array($ch, [ CURLOPT_URL => $apiUrl, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query(['question' => $question]), CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 5, // 延长至5秒 CURLOPT_SSL_VERIFYPEER => true, // 启用SSL验证 CURLOPT_CAINFO => '/path/to/cacert.pem', // CA证书路径 CURLOPT_ENCODING => 'gzip' // 启用压缩 ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $errorNo = curl_errno($ch); // 记录日志 file_put_contents('query.log', date('[Y-m-d H:i:s]')." [Q]:{$question} [HTTP:{$httpCode}] [CURL:{$errorNo}] [RES:".substr($response,0,100)."]\n", FILE_APPEND ); // 网络层错误处理 if ($errorNo) { $errorMsg = "题库连接失败（".curl_strerror($errorNo)."）"; if ($retry < 2) { usleep(500000 * ($retry + 1)); // 指数退避 continue; } apcu_store($cacheKe…

微信公众号本地服务器配置（持续更新）
type: item
date: 2025-04-29T22:56:00+08:00
description: 提要😭 最近在折腾微信公众号，也是遇到了不少问题....这篇文章就记录我在实现微信公众号本地服务器配置时遇到的各种问题以及对应的解决方法（持续更新），以供各位友们参考学习！一.初始操作1.将wechat.php解压至项目的根目录，去微信公众平台进行服务器配置，服务器地址(URL)填 https://你的域名/wechat/wechat.php ，自行设置一个 令牌(Token) ，消息加解密方式选择 安全模式 ，生成一个 消息加解密密钥 (EncodingAESKey) ，最后保存。2.将开发者ID(AppID) 、令牌(Token)、 消息加解密密钥 (EncodingAESKey) 填入wechat.php中。wechat.php（已添加加解密）下载 点击下载 二.微信加密解密适配问题官方给出的pkcs7Encoder.php只适合php4+的版本，但如今各位友们的网站基本都是php7+及以上的版本了，所以之前的函数并不适配，于是作出了以下修改：​1.openssl 函数替换​使用 openssl_encrypt 和 openssl_decrypt 替代 mcrypt 系列函数。加密算法调整为 aes-256-cbc（对应原 MCRYPT_RIJNDAEL_128 + 32字节密钥）。添加 OPENSSL_NO_PADDING 选项禁用 OpenSSL 自动填充（因已手动处理填充）。​2.错误处理优化​直接检查 OpenSSL 函数返回值（$encrypted === false）替代 try-catch。保留外层异常捕获以兼容代码原有逻辑。​3.代码规范调整​构造函数更名为 __construct。补充方法可见性声明（public/private）。修复 substr 参数错误和填充逻辑。​4.PKCS7 兼容性​保持 PKCS7Encoder 类的手动填充逻辑，确保与原有协议兼容。微信加密解密文件php7+下载同样将下面的压缩包解压至根目录 点击下载