网站短信通知功能,CMS表单提交短信提醒
当访客在网站表单提交留言或订单后,你希望第一时间收到短信提醒,而不是被动等待邮件或频繁刷新后台。
实现这一功能通常需要三部分:短信服务商的API接口、CMS系统的插件或代码嵌入、以及表单提交事件的触发设置。
下面以常见CMS(如WordPress、织梦、PbootCMS)为例,说明从零开始配置短信通知的完整步骤。
准备工作:短信服务商与CMS环境确认
先确认你的CMS支持插件扩展或自定义代码,否则可能需要手动修改主题文件。
同时准备一个短信服务账号,国内常用服务商包括阿里云短信、腾讯云短信、华为云短信等,均提供API发送接口。
需要提前获取的信息:
- 短信服务商的
AccessKey ID和AccessKey Secret(或类似密钥对) - 短信签名名称(例如“你的网站名”)
- 短信模板ID(模板内容需包含变量,如
${content}) - 短信模板中变量的占位符名称(如
code、name)
以阿里云短信为例,
登录控制台后进入“短信服务” -> “国内消息” -> “模板管理”,
创建一个通知短信模板,
内容示例:您有新的表单提交,,
内容:
${content}
审核通过后记录模板CODE。
CMS环境检查:
- 确认网站根目录可写,以便上传插件或修改文件。
- 确认PHP版本不低于7.0,且开启了
curl扩展(用于调用短信API)。 - 如果使用WordPress,可在后台“插件” -> “安装插件”中搜索短信通知插件。
配置短信API并接入CMS表单
根据CMS类型选择接入方式。
如果使用现成插件,直接在插件设置中填入密钥和模板ID即可;
如果没有插件,则需要手动在表单提交处理文件中添加发送短信的代码。
方式一:使用插件(以WordPress为例)
- 安装并启用“SMS Alert”或“WP SMS”类插件。
- 在插件设置中选择服务商(如阿里云),填入
AccessKey ID、AccessKey Secret、签名和模板ID。 - 设置触发条件:选择“新表单提交时发送”,并填写接收短信的手机号。
- 保存设置后,插件通常会自动在表单提交钩子中调用短信API。
方式二:手动添加代码(通用CMS)
找到表单提交后的处理文件,一般在 `
/inc/
或
/include/
目录下,例如 save.php、feedback.php`。在该文件中找到数据入库成功的位置,插入以下PHP代码调用短信API(以阿里云SDK为例):
// 引入阿里云SDK(需先通过Composer安装)
require_once 'vendor/autoload.php';
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
// 配置参数
$accessKeyId = '你的AccessKeyId';
$accessKeySecret = '你的AccessKeySecret';
$signName = '你的短信签名';
$templateCode = 'SMS_123456789';
$phoneNumbers = '接收短信的手机号';
$templateParam = json_encode(['content' => $formContent]); // $formContent为表单内容变量
try {
$client = new AlibabaCloud($accessKeyId, $accessKeySecret);
$result = $client->request('SendSms', [
'PhoneNumbers' => $phoneNumbers,
'SignName' => $signName,
'TemplateCode' => $templateCode,
'TemplateParam' => $templateParam,
]);
// 可选:记录日志
file_put_contents('sms_log.txt', date('Y-m-d H:i:s') . ' 发送成功' . PHP_EOL, FILE_APPEND);
} catch (ClientException $e) {
file_put_contents('sms_error.txt', date('Y-m-d H:i:s') . ' 发送失败:' . $e->getMessage() . PHP_EOL, FILE_APPEND);
}
如果使用腾讯云短信,代码结构类似,只需替换为腾讯云SDK。
注意:手动添加代码前,建议先备份原文件。
避坑指南:常见错误与安全设置
1. 短信模板审核不通过
模板内容必须符合服务商规范,避免营销词汇。通知类模板通常要求包含变量,且不能包含链接或联系方式。
2. 发送频率限制
多数服务商对同一手机号有频率限制(如1条/分钟,5条/小时)。如果表单提交频繁,建议在代码中加入去重逻辑,例如同一IP或同一内容5分钟内只发送一次。
3. 密钥泄露风险
不要将 AccessKey 直接写在公开的代码仓库中。建议通过环境变量或配置文件读取,并在服务商控制台设置IP白名单,仅允许你的服务器IP调用API。
4. 短信费用
国内短信按条计费,价格因服务商和套餐而异,建议以官网最新价格为准。测试时尽量使用自己的手机号,避免浪费。
5. 表单提交失败但短信已发
如果短信发送成功但表单数据未入库,说明代码插入位置错误。应确保短信发送代码在数据库写入成功之后执行,避免用户提交失败却收到通知。
测试与效果验证
配置完成后,必须进行完整测试。
测试步骤:
- 在网站前端打开表单页面,填写测试内容并提交。
- 观察页面是否提示提交成功。
- 检查接收短信的手机是否在1分钟内收到通知。
- 登录CMS后台,确认表单数据已正常保存。
- 查看短信服务商控制台的发送记录,确认状态为“发送成功”。
如果未收到短信:
- 检查手机号是否正确,是否欠费。
- 查看代码中的日志文件(如
sms_error.txt),根据错误码排查。常见错误:isv.AMOUNT_NOT_ENOUGH(余额不足)、isv.SMS_TEMPLATE_ILLEGAL(模板不合法)。 - 确认服务器时间是否准确,部分API要求时间戳误差在15分钟内。
验证发送成功率:
可以连续提交3次不同内容,观察短信接收情况。如果部分成功,检查是否触发了频率限制。
常见疑问
问:一个短信模板可以用于多个表单吗?
可以,只要模板中的变量能覆盖不同表单的内容字段即可。但建议为不同表单设置不同的接收手机号,便于区分。
问:短信通知功能会影响网站速度吗?
如果同步调用短信API,可能增加表单提交的响应时间。建议使用异步发送,例如将发送任务写入队列,或使用 fastcgi_finish_request() 提前返回页面响应。
问:国外手机号能接收吗?
国内短信服务商通常只支持中国大陆手机号。如需国际短信,需单独开通国际/港澳台短信服务,并注意模板和签名要求不同。
问:可以同时通知多个手机号吗?
多数API支持一次请求发送多个号码,用逗号分隔即可,但需注意频率限制。
按照以上步骤操作后,你的CMS网站就能在表单提交时自动发送短信提醒。
建议先在测试环境验证,再部署到生产环境。
如果遇到服务商政策调整,请以官方文档为准。