Envio de SMS em PHP: Visão Geral das Bibliotecas de API e Exemplos de Integração
O envio de mensagens SMS continua sendo uma função essencial para aplicações web: autenticação de dois fatores, notificações de pedidos, campanhas de marketing. Em PHP, essa tarefa é resolvida através da API de serviços terceiros. Neste artigo, analisaremos bibliotecas populares, formas de instalá-las e forneceremos exemplos práticos de código.
1. Serviços Populares e suas Bibliotecas PHP
A escolha do provedor depende da região, preço e requisitos de entrega. Vamos considerar três opções:
- Twilio — líder internacional, fornece SDK para PHP (twilio/sdk). Adequado para projetos globais.
- SMS Aero — serviço russo com API REST simples e biblioteca PHP oficial.
- smsc.ru — outro serviço nacional popular com tarifas baixas e scripts prontos.
2. Instalação via Composer
A maioria das bibliotecas modernas é instalada via Composer. Exemplo para Twilio:
composer require twilio/sdkPara SMS Aero, use:
composer require smsaero/smsaero-phpSe você usar smsc.ru, pode dispensar o Composer — basta copiar a classe PHP deles do GitHub.
3. Exemplo de Envio de SMS via Twilio
A biblioteca Twilio requer Account SID e Auth Token, que você obtém no painel de controle.
<?phprequire_once 'vendor/autoload.php';
use Twilio\\Rest\\Client;
// Seus dados$sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";$token = "your_auth_token";$twilio = new Client($sid, $token);
// Envio de SMS$message = $twilio->messages ->create( "+71234567890", // número do destinatário [ "from" => "+15017122661", // número do remetente (comprado no Twilio) "body" => "Olá! Este é um SMS de teste do Twilio." ] );
echo "Mensagem enviada! SID: " . $message->sid;?>4. Envio de SMS via SMS Aero (REST API)
SMS Aero usa chave de API e login. A biblioteca fornece uma interface conveniente:
<?phprequire_once 'vendor/autoload.php';
use Smsaero\\Smsaero;
$client = new Smsaero('your_email@example.com', 'your_api_key');
// Envio de mensagem$response = $client->send('71234567890', 'Mensagem de teste do SMS Aero');
if ($response->success) { echo "SMS enviado. ID: " . $response->id;} else { echo "Erro: " . $response->error;}?>5. Trabalhando com smsc.ru (sem Composer)
Para smsc.ru, você pode usar requisições HTTP diretas ou a classe pronta deles. Exemplo simples via cURL:
<?php$login = "your_login";$password = "your_password";$phones = "71234567890";$message = "Olá do 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 — resposta em 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 "Erro: " . $data['error'];} else { echo "SMS enviado. ID: " . $data['id'];}?>6. Tratamento de Erros e Logging
Ao enviar SMS, é importante tratar os erros corretamente. Problemas típicos:
- Credenciais inválidas (401 Unauthorized).
- Saldo insuficiente.
- Número na lista negra.
- Exceder limites de envio.
Exemplo de tratamento de exceções para Twilio:
<?phptry { $message = $twilio->messages->create(...); // logging de sucesso error_log("SMS enviado: " . $message-&g