<?php
/**
* 微信小程序消息推送配置 - URL验证程序
*
* 将此文件部署到你需要配置的URL对应的服务器上
* 然后在微信公众平台配置消息推送时,微信服务器会发送验证请求到此URL
*/
// 设置PHP错误报告级别(生产环境可以关闭)
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 获取微信发送的GET参数
$signature = isset($_GET['signature']) ? $_GET['signature'] : '';
$timestamp = isset($_GET['timestamp']) ? $_GET['timestamp'] : '';
$nonce = isset($_GET['nonce']) ? $_GET['nonce'] : '';
$echostr = isset($_GET['echostr']) ? $_GET['echostr'] : '';
// 你的小程序消息推送配置的Token(在微信公众平台配置的)
$token = '你的Token'; // 替换为你在微信公众平台配置的Token
/**
* 验证微信服务器的签名
*
* @param string $token 令牌
* @param string $timestamp 时间戳
* @param string $nonce 随机数
* @param string $signature 微信加密签名
* @return bool 验证结果
*/
function checkSignature($token, $timestamp, $nonce, $signature)
{
// 将token、timestamp、nonce按字典序排序
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
// 将三个参数字符串拼接成一个字符串进行sha1加密
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
// 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
return $tmpStr === $signature;
}
// 验证签名
if (checkSignature($token, $timestamp, $nonce, $signature)) {
// 签名验证通过,返回echostr参数内容
echo $echostr;
exit;
} else {
// 签名验证失败
header('HTTP/1.1 403 Forbidden');
echo "签名验证失败";
exit;
}
?>
将以上代码保存为callback.php,上传的服务器后,在下图中验证
验证后,可以用自己实际 要用的内容替换 callback.php
使用说明
-
将上述代码保存为一个PHP文件(例如callback.php)
-
上传到你的服务器,确保可以通过你配置的URL访问到
-
在微信公众平台的小程序后台配置消息推送时:
-
填写这个PHP文件的完整URL
-
设置Token(与代码中的
$token
变量一致) -
选择加密方式(根据你的需求选择)
-
-
点击"提交"按钮时,微信服务器会发送验证请求到你的URL
-
如果验证通过,配置就会成功
注意事项
-
Token安全:Token相当于密码,请妥善保管,不要泄露
-
服务器要求:
-
PHP环境(通常5.6以上版本都可以)
-
服务器需要能够处理GET请求
-
确保URL可以通过公网访问
-
-
日志记录:生产环境建议添加日志记录功能,记录验证请求
-
HTTPS:微信要求消息推送接口必须使用HTTPS协议
扩展功能
如果需要处理后续的消息推送,可以在这个验证通过后,添加消息处理逻辑。微信服务器会以POST方式发送XML格式的消息内容到你的URL。