CMS对接短信平台,表单提交发送验证码

很多CMS站点在用户注册或留言时,需要给提交表单的手机号发送验证码。
这需要将CMS与第三方短信平台对接,本文用零基础也能看懂的方式,讲清从选短信平台到表单验证码成功发送的全部步骤。

一、对接前需要准备什么

动手改代码前,先把下面几项准备好,避免中途卡住。

  • 一个可用的短信平台账号:阿里云、腾讯云、华为云等主流服务商都提供短信服务,注册后完成实名认证。
  • 短信签名和模板:在短信平台控制台申请签名(如“XX网站”)和验证码模板(如“您的验证码是{code},5分钟内有效”)。签名和模板需要审核,建议提前1-2个工作日提交。
  • CMS后台或数据库权限:需要能修改表单提交逻辑,或者能编辑模板文件、添加PHP/Java等后端脚本。
  • 服务器外网访问权限:服务器必须能访问短信平台的API地址,如果有限制需要在防火墙放行。

短信平台审核通过后,务必记录好API密钥(AccessKey ID和AccessKey Secret),后续配置要用。

二、分步操作:从短信平台到CMS表单

1. 在短信平台获取API凭证

以阿里云为例,登录控制台,进入“短信服务”->“AccessKey管理”,创建或查看AccessKey。AccessKey Secret只在创建时显示一次,请立即保存
同时记下短信服务的API发送地址(通常形如https://dysmsapi.aliyuncs.com)。

2. 安装短信SDK或编写请求代码

大多数CMS使用PHP,推荐通过Composer安装官方SDK:

composer require alibabacloud/dysmsapi-20170525

如果不想用SDK,也可以直接用cURL发送HTTP请求。
参考请求参数如下:

$params = [
    'PhoneNumbers' => $phone,
    'SignName' => '你的签名',
    'TemplateCode' => 'SMS_123456789',
    'TemplateParam' => json_encode(['code' => $code])
];

3. 修改CMS表单提交逻辑

找到处理表单提交的文件(常见位置:/app/controller/UserController.php/include/form.php)。
在接收手机号后、写入数据库前,插入发送验证码的代码。

关键逻辑顺序:

  1. 验证手机号格式(正则表达式)。
  2. 生成6位随机数字作为验证码,存入Session或缓存(如Redis),设置5分钟过期。
  3. 调用短信API发送验证码。
  4. 如果发送成功,返回“验证码已发送”;失败则记录错误日志并返回提示。

4. 宝塔面板操作路径(适合无代码经验)

如果使用宝塔面板,可以安装“短信插件”或通过“计划任务”调用API。
以宝塔的“网站”->“站点设置”->“配置文件”为例,可以在PHP配置中增加自定义函数文件,然后通过表单提交触发。

注意:不同CMS的表单位置不同,请先找到表单对应的提交地址(通常通过浏览器F12查看Network中的请求URL)。

三、避坑指南:常见错误与解决

  • 签名或模板未审核通过:短信平台会返回错误码isv.SMS_SIGNATURE_ILLEGAL。请检查签名和模板状态,审核通过后再试。
  • 手机号格式错误:确保传入的是11位数字,不带+86或空格。
  • AccessKey权限不足:子账号需要授予AliyunDysmsFullAccess权限。
  • 发送频率超限:同一个手机号1分钟内只能发1条,1小时内最多5条。建议在代码里加频率限制。
  • 服务器时间不准:短信API要求请求时间与服务器时间误差不超过15分钟,请用ntpdate同步时间。
  • 验证码泄露:不要在前端返回验证码,只返回“发送成功”状态。

四、验证是否发送成功

配置完成后,按以下步骤验证:

  1. 在表单输入自己的手机号,点击“获取验证码”。
  2. 查看浏览器控制台Network,确认请求返回{"code":"OK"}或类似成功状态。
  3. 检查手机是否收到短信,记录收到时间。
  4. 在短信平台控制台查看发送记录,确认状态为“发送成功”。
  5. 输入错误的验证码,确认表单会提示验证失败。

如果手机未收到短信,先检查短信平台余额和发送记录,再排查服务器日志中的API返回信息。

五、常见疑问

问:验证码存Session还是Redis?
答:单机站点用Session即可;多台服务器负载均衡时建议用Redis,保证验证码共享。

问:短信平台每天有免费额度吗?
答:不同服务商政策不同,部分平台提供每月100条免费额度,具体以官方控制台显示为准。

问:可以同时对接多个短信平台吗?
答:可以,但需要写多个发送函数,并按优先级或故障转移逻辑调用。建议初期先用一家,稳定后再考虑冗余。

问:表单提交后没收到短信,但API返回成功?
答:可能是手机号归属地运营商拦截,或者短信平台通道延迟。请等待1-2分钟,或联系短信平台客服查询通道状态。

按照以上步骤操作,大多数CMS都能在半小时内完成短信验证码对接。
如果遇到报错,优先查看短信平台返回的错误码和服务器日志,通常能快速定位问题。

分享到:
上一篇
CMS对接对象存储OSS,图片视频云端存放
下一篇
CMS对接邮件服务器,网站邮件通知配置
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意