通过PHP发送短信:API库概述与集成示例
发送短信功能对于Web应用仍然非常实用:双因素认证、订单通知、营销推送。在PHP中,这个问题通过第三方服务的API来解决。在本文中,我们将介绍流行的库、它们的安装方法,并提供可运行的代码示例。
1. 热门服务及其PHP库
服务提供商的选择取决于地区、价格和送达要求。我们来看三个选项:
- Twilio — 国际领导者,提供PHP的SDK(twilio/sdk)。适用于全球项目。
- SMS Aero — 俄罗斯服务,拥有简单的REST API和官方PHP库。
- smsc.ru — 另一个受欢迎的俄罗斯服务,费率低,有现成的脚本。
2. 通过Composer安装
大多数现代库通过Composer安装。以Twilio为例:
composer require twilio/sdk对于SMS Aero,使用:
composer require smsaero/smsaero-php如果您使用smsc.ru,可以不用Composer — 只需从GitHub复制他们的PHP类即可。
3. 通过Twilio发送短信示例
Twilio库需要Account SID和Auth Token,您可以在个人账户中获取。
<?phprequire_once 'vendor/autoload.php';
use Twilio\\Rest\\Client;
// 您的数据$sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";$token = "your_auth_token";$twilio = new Client($sid, $token);
// 发送短信$message = $twilio->messages ->create( "+71234567890", // 接收方号码 [ "from" => "+15017122661", // 发送方号码(在Twilio购买) "body" => "你好!这是来自Twilio的测试短信。" ] );
echo "短信已发送!SID: " . $message->sid;?>4. 通过SMS Aero发送短信(REST API)
SMS Aero使用API密钥和登录名。该库提供了便捷的接口:
<?phprequire_once 'vendor/autoload.php';
use Smsaero\\Smsaero;
$client = new Smsaero('your_email@example.com', 'your_api_key');
// 发送消息$response = $client->send('71234567890', '来自SMS Aero的测试消息');
if ($response->success) { echo "短信已发送。ID: " . $response->id;} else { echo "错误: " . $response->error;}?>5. 使用smsc.ru(无需Composer)
对于smsc.ru,您可以直接使用HTTP请求或他们的现成类。通过cURL的简单示例:
<?php$login = "your_login";$password = "your_password";$phones = "71234567890";$message = "来自smsc.ru的问候!";
$url = "https://smsc.ru/sys/send.php?login=" . urlencode($login) . "&psw=" . urlencode($password) . "&phones=" . urlencode($phones) . "&mes=" . urlencode($message) . "&fmt=3"; // fmt=3 — 返回JSON格式
$ch = curl_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);curl_close($ch);
$data = json_decode($response, true);if ($data['error'] ?? false) { echo "错误: " . $data['error'];} else { echo "短信已发送。ID: " . $data['id'];}?>6. 错误处理与日志记录
发送短信时,正确处理错误非常重要。典型问题:
- 凭据错误(401 Unauthorized)。
- 账户余额不足。
- 号码在黑名单中。
- 超出发送限制。
Twilio的异常处理示例:
<?phptry { $message = $twilio->messages->create(...); // 记录成功 error_log("短信已发送: " . $message-&g