Jak wysyłać SMS-y przez SMPP API za pomocą PHP
Short Message Peer-to-Peer (SMPP) API to potężny protokół telekomunikacyjny zaprojektowany do wymiany wiadomości SMS między jednostkami, takimi jak centra SMS i aplikacje zewnętrzne. Ten kompleksowy przewodnik pokazuje, jak zaimplementować SMPP API za pomocą PHP, aby połączyć się z Ozeki SMS Gateway, umożliwiając programistom efektywne wysyłanie i zarządzanie wiadomościami SMS. Dzięki szczegółowym przykładom kodu PHP ten samouczek obejmuje konfigurację połączenia, wysyłanie wiadomości, raporty dostarczenia oraz najlepsze praktyki dotyczące budowania solidnego klienta SMPP API.
Zrozumienie SMPP API i jego roli w komunikacji SMS
SMPP API (Short Message Peer-to-Peer) jest szeroko stosowane w branży telekomunikacyjnej do obsługi komunikacji SMS o dużej skali. Pozwala aplikacjom na łączenie się z bramką SMS, taką jak Ozeki SMS Gateway, w celu niezawodnego wysyłania i odbierania wiadomości. Wykorzystując PHP, programiści mogą tworzyć skalowalne aplikacje, które współpracują z SMPP API do zarządzania przepływami SMS. Ten przewodnik wykorzystuje bibliotekę php-smpp, solidne narzędzie do implementacji protokołu SMPP w PHP, aby uprościć interakcje na niskim poziomie protokołu.
Konfiguracja klienta PHP SMPP do wysyłania SMS przez SMPP API
Aby wysyłać SMS-y przez SMPP API, należy najpierw serwerem SMPP Ozeki SMS Gateway. Użyjemy biblioteki php-smpp, która zapewnia implementację protokołu SMPP:
- Zainstaluj bibliotekę
php-smppza pomocą Composera, aby obsługiwać interakcje z SMPP API. - Skonfiguruj parametry połączenia, w tym host, port, nazwę użytkownika i hasło dostarczone przez Ozeki SMS Gateway.
- Nawiąż połączenie z serwerem SMPP za pomocą transportu gniazdowego.
Oto jak zainstalować bibliotekę:
composer require onlinecity/php-smpp
Podstawowy przykład połączenia z SMPP API w PHP
Poniższy kod PHP demonstruje, jak nawiązać połączenie z Ozeki SMS Gateway za pomocą SMPP API. Ten przykład wykorzystuje bibliotekę php-smpp do utworzenia klienta, połączenia z serwerem i powiązania jako nadajnik do wysyłania wiadomości SMS.
<?php require 'vendor/autoload.php'; use Smpp\Client; use Smpp\Transport\Socket; $host = 'your.ozeki.server'; $port = 2775; $username = 'your_username'; $password = 'your_password'; // Utwórz transport i klienta $transport = new Socket([$host], $port); $transport->setRecvTimeout(30000); $smpp = new Client($transport); // Połącz i powiąż $transport->open(); $smpp->bindTransmitter($username, $password); echo "Pomyślnie połączono z serwerem SMPP\n"; // Wyślij wiadomość tutaj... // Zamknij połączenie $smpp->close(); ?>
Ten kod inicjalizuje transport gniazdowy, ustawia timeout na odbieranie danych i powiązuje klienta jako nadajnik przy użyciu podanych poświadczeń. Po nawiązaniu połączenia klient jest gotowy do wysyłania wiadomości SMS przez SMPP API.
Utrzymanie połączenia z PHP przez SMPP API
Aby zapewnić niezawodne połączenie z SMPP API, Twoja aplikacja PHP musi wysyłać okresowe wiadomości keep-alive za pomocą PDU enquire_link. Zapobiega to przekroczeniu czasu połączenia i zapewnia ciągłą pracę. Poniżej znajduje się przykład implementacji mechanizmu keep-alive w PHP.
function sendKeepAlive($smpp) {
try {
$smpp->enquireLink();
echo "Wysłano keep-alive\n";
} catch (Exception $e) {
echo "Keep-alive nie powiódł się: " . $e->getMessage() . "\n";
// Zaimplementuj logikę ponownego połączenia tutaj
}
}
// Wysyłaj keep-alive co 30 sekund
$keepAliveInterval = 30;
$lastKeepAlive = time();
while (true) {
if (time() - $lastKeepAlive >= $keepAliveInterval) {
sendKeepAlive($smpp);
$lastKeepAlive = time();
}
// Obsłuż inne operacje tutaj
sleep(1);
}
Ten skrypt wysyła wiadomość keep-alive co 30 sekund i zawiera obsługę błędów, aby zarządzać problemami z połączeniem. Jeśli keep-alive nie powiedzie się, możesz zaimplementować logikę ponownego połączenia, aby przywrócić połączenie z SMPP API.
Wysyłanie wiadomości SMS za pomocą PHP przez SMPP API
Wysyłanie wiadomości SMS przez SMPP API w PHP polega na utworzeniu wiadomości SMS za pomocą PDU submit_sm. Poniższy przykład pokazuje, jak wysłać wiadomość za pomocą biblioteki php-smpp.
use Smpp\Address;
use Smpp\SMS;
$from = new Address('12345', SMPP::TON_ALPHANUMERIC);
$to = new Address('+1234567890', SMPP::TON_INTERNATIONAL, SMPP::NPI_ISDN);
$message = new SMS($from, $to, 'Witaj z klienta PHP SMPP!');
$message->setDataCoding(SMPP::DATA_CODING_DEFAULT);
try {
$messageId = $smpp->sendSMS($message);
echo "Wiadomość wysłana pomyślnie, ID: $messageId\n";
} catch (Exception $e) {
echo "Nie udało się wysłać wiadomości: " . $e->getMessage() . "\n";
}
W tym przykładzie adres nadawcy jest ustawiony jako ciąg alfanumeryczny, a numer odbiorcy używa formatowania międzynarodowego. Ustawienie DATA_CODING_DEFAULT zapewnia kompatybilność ze standardowymi wiadomościami tekstowymi. Obsługa błędów zapewnia, że wszelkie problemy podczas wysyłania wiadomości są wychwytywane i raportowane.
Obsługa raportów dostarczenia w PHP za pomocą interfejsu SMPP API
Interfejs SMPP API obsługuje raporty dostarczenia, które śledzą status wysłanych wiadomości. Aby odbierać te raporty w PHP, należy powiązać klienta jako odbiorcę i przetwarzać przychodzące PDU deliver_sm. Poniższy kod pokazuje, jak zaimplementować tę funkcjonalność.
// Najpierw powiąż jako odbiorca, aby otrzymywać raporty dostarczenia
$smpp->bindReceiver($username, $password);
while (true) {
try {
$pdu = $smpp->readPDU();
if ($pdu instanceof DeliverSm) {
$messageId = $pdu->getReceiptedMessageId();
$status = $pdu->getMessageStatus();
echo "Raport dostarczenia dla $messageId: $status\n";
// Wyślij odpowiedź
$smpp->respond($pdu, new DeliverSmResp());
}
} catch (Exception $e) {
echo "Błąd odczytu PDU: " . $e->getMessage() . "\n";
break;
}
}
Ten kod powiązuje klienta jako odbiorcę, aby nasłuchiwać raportów dostarczenia, przetwarza przychodzące PDU i wysyła odpowiednie odpowiedzi. Dzięki temu Twoja aplikacja w PHP może skutecznie śledzić statusy dostarczenia wiadomości.
Kompletny klient SMPP w PHP do wysyłania SMS-ów za pomocą interfejsu SMPP API
Poniżej znajduje się kompleksowa klasa w PHP, która enkapsuluje funkcjonalność interfejsu SMPP API, w tym zarządzanie połączeniem, wysyłanie wiadomości i logikę ponownego łączenia. Ta implementacja jest zaprojektowana do użytku produkcyjnego, z solidną obsługą błędów i modularnością.
<?php
require 'vendor/autoload.php';
use Smpp\Client;
use Smpp\Transport\Socket;
use Smpp\Address;
use Smpp\SMS;
class SMPPClient {
private $transport;
private $smpp;
private $config;
private $isConnected = false;
public function __construct($config) {
$this->config = $config;
$this->connect();
}
public function connect() {
try {
$this->transport = new Socket([$this->config['host']], $this->config['port']);
$this->transport->setRecvTimeout(30000);
$this->smpp = new Client($this->transport);
$this->transport->open();
$this->smpp->bindTransceiver(
$this->config['username'],
$this->config['password']
);
$this->isConnected = true;
echo "Połączono z serwerem SMPP\n";
} catch (Exception $e) {
echo "Połączenie nieudane: " . $e->getMessage() . "\n";
$this->reconnect();
}
}
public function sendSMS($from, $to, $message) {
if (!$this->isConnected) {
throw new Exception("Brak połączenia z serwerem SMPP");
}
try {
$fromAddr = new Address($from, SMPP::TON_ALPHANUMERIC);
$toAddr = new Address($to, SMPP::TON_INTERNATIONAL, SMPP::NPI_ISDN);
$sms = new SMS($fromAddr, $toAddr, $message);
$sms->setDataCoding(SMPP::DATA_CODING_DEFAULT);
return $this->smpp->sendSMS($sms);
} catch (Exception $e) {
$this->isConnected = false;
throw $e;
}
}
public function reconnect() {
$this->close();
sleep(5);
$this->connect();
}
public function close() {
if ($this->isConnected) {
$this->smpp->close();
$this->isConnected = false;
}
}
public function __destruct() {
$this->close();
}
}
// Przykład użycia
$config = [
'host' => 'your.ozeki.server',
'port' => 2775,
'username' => 'your_username',
'password' => 'your_password'
];
$client = new SMPPClient($config);
try {
$messageId = $client->sendSMS('12345', '+1234567890', 'Witaj z PHP!');
echo "Wiadomość wysłana z ID: $messageId\n";
} catch (Exception $e) {
echo "Błąd wysyłania wiadomości: " . $e->getMessage() . "\n";
}
?>
Ta klasa zapewnia wielokrotnego użytku implementację interfejsu SMPP API w PHP, z metodami do łączenia, wysyłania wiadomości, ponownego łączenia w przypadku awarii i czyszczenia zasobów. Jest zaprojektowana tak, aby była modularna i łatwa do integracji z większymi aplikacjami.
Najlepsze praktyki dotyczące budowania klienta SMPP w PHP
Aby zapewnić, że Twoja aplikacja w PHP korzystająca z interfejsu SMPP API jest solidna i skalowalna, postępuj zgodnie z tymi najlepszymi praktykami:
- Zaimplementuj solidną obsługę błędów: Przechwytuj i obsługuj wyjątki dotyczące błędów połączenia, wysyłania wiadomości i przetwarzania PDU, aby zapewnić niezawodność.
- Używaj trwałych połączeń: Utrzymuj jedno połączenie z interfejsem SMPP API, aby zmniejszyć obciążenie i poprawić wydajność.
- Zaimplementuj kolejkowanie wiadomości: W przypadku wysyłania dużej liczby SMS-ów użyj kolejki do zarządzania dostarczaniem wiadomości i zapobiegania przeciążeniu serwera.
- Monitoruj stan połączenia: Ciągle sprawdzaj status połączenia i zaimplementuj logikę automatycznego ponownego łączenia, aby radzić sobie z zakłóceniami sieci.
- Używaj procesu roboczego: Uruchom swojego klienta SMPP w PHP jako demona lub proces roboczy do ciągłej pracy w środowiskach produkcyjnych.
- Loguj aktywność: Zaimplementuj logowanie, aby śledzić zdarzenia związane z połączeniami, statusy wiadomości i błędy w celu debugowania i monitorowania.
Podsumowanie
Ten kompleksowy przewodnik pokazał, jak zaimplementować klienta w PHP dla interfejsu SMPP API do wysyłania i zarządzania wiadomościami SMS za pomocą bramki SMS Ozeki. Wykorzystując bibliotekę php-smpp, programiści mogą obsługiwać szczegóły niskopoziomowe protokołu SMPP, skupiając się na budowaniu solidnych aplikacji. Przedstawione przykłady kodu obejmują zarządzanie połączeniem, wysyłanie wiadomości, obsługę raportów dostarczenia oraz kompletną klasę w PHP do użytku produkcyjnego. W przypadku zaawansowanych aplikacji rozważ zaimplementowanie dodatkowych funkcji, takich jak kolejkowanie wiadomości, szczegółowe logowanie i monitorowanie, aby zwiększyć niezawodność i skalowalność.
W środowiskach produkcyjnych upewnij się, że Twój klient SMPP w PHP zawiera solidną obsługę błędów, monitorowanie połączeń i logowanie. Interfejs SMPP API obsługuje zaawansowane funkcje, takie jak priorytetyzacja wiadomości i ograniczanie przepustowości, które można zbadać w miarę wzrostu wymagań aplikacji.