php发送短信脚本怎么实现?免费接口和代码示例有吗?
- 虚拟主机
- 2025-12-18
- 4
PHP发送短信脚本是许多Web应用中常见的功能需求,尤其在用户验证、通知提醒等场景中应用广泛,本文将详细介绍如何使用PHP实现短信发送功能,包括准备工作、代码实现及注意事项。

准备工作
在开始编写脚本前,需要完成以下准备工作:

- 选择短信服务商:常见的短信服务商包括阿里云、腾讯云、Twilio等,需注册账号并获取API密钥(如AccessKey、SecretKey)。
- 获取接口文档:不同服务商的API接口不同,需仔细阅读官方文档,了解请求URL、请求方法、参数格式及返回结果。
- 测试账户余额:确保账户有足够的余额用于发送短信。
PHP脚本实现
以下以阿里云短信服务为例,展示PHP发送短信的完整代码,需安装阿里云SDK(可通过Composer安装:composer require aliyuncs/aliyunphpsdkcore)。

<?php require_once 'vendor/autoload.php'; use CoreDefaultAcsClient; use CoreProfileDefaultProfile; use DysmsapiV20170525DysmsapiRequest; use DysmsapiV20170525ModelsSendSmsRequest; // 配置参数 $accessKeyId = 'your_access_key_id'; $accessKeySecret = 'your_access_key_secret'; $regionId = 'cnhangzhou'; $phoneNumbers = '13800138000'; // 目标手机号 $signName = '你的签名名称'; // 短信签名 $templateCode = 'SMS_123456789'; // 短信模板ID $templateParam = json_encode(['code' => '123456']); // 模板参数 // 初始化AcsClient $profile = DefaultProfile::getProfile($regionId, $accessKeyId, $accessKeySecret); $client = new DefaultAcsClient($profile); // 构建请求对象 $request = new SendSmsRequest(); $request>setPhoneNumbers($phoneNumbers); $request>setSignName($signName); $request>setTemplateCode($templateCode); $request>setTemplateParam($templateParam); // 发送请求并处理响应 try { $response = $client>getAcsResponse($request); if ($response>Code == 'OK') { echo "短信发送成功!"; } else { echo "短信发送失败:" . $response>Message; } } catch (Exception $e) { echo "发送异常:" . $e>getMessage(); } ?>
代码解析
- 配置参数:根据服务商要求填写AccessKey、签名、模板等信息。
- 初始化客户端:使用DefaultProfile和DefaultAcsClient创建客户端实例。
- 构建请求:设置手机号、签名、模板代码及参数。
- 发送请求:调用getAcsResponse方法发送请求,并根据返回结果判断是否成功。
注意事项
- 安全性:API密钥需妥善保管,避免泄露,建议使用环境变量或配置文件存储敏感信息。
- 频率限制:服务商通常对发送频率有限制,避免短时间内大量发送导致接口被封禁。
- 错误处理:需捕获异常并处理返回结果,如手机号格式错误、模板参数不匹配等。
- 模板规范需符合服务商的模板要求,避免使用敏感词汇。
相关FAQs
Q1:如何解决短信发送失败的问题?
A:首先检查API密钥是否正确,手机号格式是否合法,签名和模板是否已审核通过,若服务商返回具体错误码(如isv.MOBILE_NUMBER_ILLEGAL),需根据错误信息调整参数,确认账户余额充足,且未触发频率限制。
Q2:如何实现批量发送短信?
A:服务商通常支持批量发送,可通过循环遍历手机号列表,逐条调用发送接口,但需注意批量发送的频率限制,建议分批次处理并添加延迟(如sleep(1))避免触发风控,部分服务商提供批量接口(如阿里云的BatchSendSms),可直接传入多个手机号,效率更高。