?个人微信号,未认证状态下,也可以通过自己的服务器设置更丰富的关键字回复?
?
<?php
$token = 'aaabbb'; // 在微信公众平台设置的 Token
// 获取微信服务器发送的参数
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
$echoStr = $_GET['echostr'];
// 将参数按照字典序排序
$params = array($token, $timestamp, $nonce);
sort($params, SORT_STRING);
// 拼接参数并计算签名
$str = implode($params);
$signatureCheck = sha1($str);
// 验证签名是否匹配
if ($signature === $signatureCheck) {
// 签名匹配,返回 echostr 给微信服务器
echo $echoStr;
} else {
// 签名不匹配,返回错误信息或空字符串
echo 'Invalid signature';
}
?>
<?php
// 获取微信服务器发送的POST数据
$postData = file_get_contents('php://input');
// 解析XML数据
$xmlData = simplexml_load_string($postData, 'SimpleXMLElement', LIBXML_NOCDATA);
// 获取消息类型
$msgType = $xmlData->MsgType;
// 获取用户发送的消息内容
$content = $xmlData->Content;
// 构建回复消息的XML结构
$response = "<xml>
<ToUserName><![CDATA[" . $xmlData->FromUserName . "]]></ToUserName>
<FromUserName><![CDATA[" . $xmlData->ToUserName . "]]></FromUserName>
<CreateTime>" . time() . "</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你发送的消息是:" . $content . "]]></Content>
</xml>";
// 输出回复消息
echo $response;
?>
nodejs方案
npm init -y
npm install express --save
const express = require('express');
const app = express();
// 用于验证微信Token的端点
app.get('/wechat/token', (req, res) => {
const token = 'YOUR_WECHAT_TOKEN'; // 将YOUR_WECHAT_TOKEN替换为您在微信公众平台设置的Token
const signature = req.query.signature;
const timestamp = req.query.timestamp;
const nonce = req.query.nonce;
const echostr = req.query.echostr;
const sha1 = require('sha1');
const sortedString = [token, timestamp, nonce].sort().join('');
const sha1String = sha1(sortedString);
if (sha1String === signature) {
res.send(echostr);
} else {
res.status(401).send('Invalid signature');
}
});
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});