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-smpp
za 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.
More information
- Jak skonfigurować połączenie klienta SMPP API z Twoim SMSC
- Jak skonfigurować serwer SMPP API do wysyłania i odbierania SMS z wielu aplikacji
- Jak wybrać odpowiedniego dostawcę SMPP API dla Twojej firmy
- Jak wysyłać SMS za pomocą SMPP API na poziomie protokołu
- Jak wysyłać SMS przez SMPP API używając Pythona
- Jak wysyłać SMS przez SMPP API używając Javascript
- Jak wysyłać SMS przez SMPP API używając Java
- Jak wysyłać SMS przez SMPP API używając PHP
- Jak wysyłać SMS-y przez SMPP API za pomocą C#
- Jak wysyłać SMS przez SMPP API używając C/Cpp
- Jak odbierać SMS za pomocą SMPP API
- Jak odebrać raport dostarczenia SMS za pomocą SMPP API
- FAQ SMPP API