Kako poslati SMS putem SMPP API-ja koristeći PHP
Short Message Peer-to-Peer (SMPP) API je moćan telekomunikacijski protokol dizajniran za razmjenu SMS poruka između peer entiteta, kao što su SMS centri i vanjske aplikacije. Ovaj opsežan vodič pokazuje kako implementirati SMPP API koristeći PHP za povezivanje s Ozeki SMS Gatewayem, omogućujući programerima učinkovito slanje i upravljanje SMS porukama. S detaljnim primjerima PHP koda, ovaj vodič pokriva postavljanje veze, slanje poruka, izvješća o isporuci i najbolje prakse za izgradnju robusnog SMPP API klijenta.
Razumijevanje SMPP API-ja i njegove uloge u SMS razmjeni poruka
SMPP API (Short Message Peer-to-Peer) široko se koristi u
telekomunikacijskoj industriji za omogućavanje SMS komunikacije velikog obima. Omogućuje
aplikacijama da se povežu s SMS gatewayem, kao što je Ozeki SMS Gateway, za pouzdano
slanje i primanje poruka. Koristeći PHP, programeri mogu
stvoriti skalabilne aplikacije koje komuniciraju s SMPP API-jem kako bi
upravljali SMS tijekovima. Ovaj vodič koristi php-smpp
biblioteku, robusni
alat za implementaciju SMPP protokola u PHP-u,
kako bi pojednostavio interakcije na niskoj razini protokola.
Postavljanje PHP SMPP klijenta za slanje SMS-a putem SMPP API-ja
Da biste poslali SMS putem SMPP API-ja, prvo morate postaviti SMPP korisnika, a zatim povezati svoj klijent s Ozeki SMS Gateway SMPP serverom. Koristit ćemo php-smpp biblioteku koja pruža implementaciju SMPP protokola:
- Instalirajte
php-smpp
biblioteku koristeći Composer za upravljanje interakcijama s SMPP API-jem. - Konfigurirajte svoje parametre veze, uključujući host, port, korisničko ime i lozinku koje pruža Ozeki SMS Gateway.
- Uspostavite vezu s SMPP serverom koristeći socket transport.
Evo kako instalirati biblioteku:
composer require onlinecity/php-smpp
Osnovni primjer veze za SMPP API u PHP-u
Sljedeći PHP kod pokazuje kako uspostaviti vezu
s Ozeki SMS Gatewayem koristeći SMPP API. Ovaj primjer koristi
php-smpp
biblioteku za stvaranje klijenta, povezivanje s serverom i
vezivanje kao transmitter za slanje SMS poruka.
<?php require 'vendor/autoload.php'; use Smpp\Client; use Smpp\Transport\Socket; $host = 'your.ozeki.server'; $port = 2775; $username = 'your_username'; $password = 'your_password'; // Stvaranje transporta i klijenta $transport = new Socket([$host], $port); $transport->setRecvTimeout(30000); $smpp = new Client($transport); // Povezivanje i vezivanje $transport->open(); $smpp->bindTransmitter($username, $password); echo "Uspješno povezan s SMPP serverom\n"; // Pošalji poruku ovdje... // Zatvaranje veze $smpp->close(); ?>
Ovaj kod inicijalizira socket transport, postavlja timeout za primanje podataka i veže klijenta kao transmitter koristeći navedene vjerodajnice. Nakon povezivanja, klijent je spreman za slanje SMS poruka putem SMPP API-ja.
Održavanje veze s PHP-om putem SMPP API-ja
Kako biste osigurali pouzdanu vezu s SMPP API-jem, vaša PHP
aplikacija mora slati periodične keep-alive poruke koristeći enquire_link
PDU. Ovo sprječava prekid veze zbog timeouta i osigurava kontinuirani rad.
Ispod je primjer kako implementirati keep-alive mehanizam u PHP-u.
function sendKeepAlive($smpp) { try { $smpp->enquireLink(); echo "Keep-alive poslan\n"; } catch (Exception $e) { echo "Keep-alive nije uspio: " . $e->getMessage() . "\n"; // Implementirajte logiku ponovnog povezivanja ovdje } } // Šalji keep-alive svakih 30 sekundi $keepAliveInterval = 30; $lastKeepAlive = time(); while (true) { if (time() - $lastKeepAlive >= $keepAliveInterval) { sendKeepAlive($smpp); $lastKeepAlive = time(); } // Obrađujte druge operacije ovdje sleep(1); }
Ova skripta šalje keep-alive poruku svakih 30 sekundi i uključuje rukovanje greškama za upravljanje problemima s vezom. Ako keep-alive ne uspije, možete implementirati logiku ponovnog povezivanja kako biste obnovili vezu s SMPP API-jem.
Slanje SMS poruka s PHP-om putem SMPP API-ja
Slanje SMS poruka putem SMPP API-ja u PHP-u
uključuje stvaranje SMS poruke s submit_sm
PDU-om. Sljedeći
primjer pokazuje kako poslati poruku koristeći php-smpp
biblioteku.
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, 'Pozdrav iz PHP SMPP klijenta!'); $message->setDataCoding(SMPP::DATA_CODING_DEFAULT); try { $messageId = $smpp->sendSMS($message); echo "Poruka uspješno poslana, ID: $messageId\n"; } catch (Exception $e) { echo "Slanje poruke nije uspjelo: " . $e->getMessage() . "\n"; }
U ovom primjeru, adresa pošiljatelja postavljena je kao alfanumerički niz, a
broj primatelja koristi međunarodno formatiranje. Postavka DATA_CODING_DEFAULT
osigurava kompatibilnost sa standardnim tekstualnim porukama. Rukovanje greškama osigurava
da se svi problemi tijekom slanja poruke uhvate i prijave.
Upravljanje izvješćima o isporuci s PHP-om putem SMPP API-ja
SMPP API podržava izvješća o isporuci za praćenje statusa
poslanih poruka. Da biste primali ta izvješća u PHP-u, povežite svoj klijent
kao primatelj i obradite dolazne deliver_sm
PDU-e. Sljedeći
kod pokazuje kako implementirati ovu funkcionalnost.
// Prvo se povežite kao primatelj za dobivanje izvješća o isporuci $smpp->bindReceiver($username, $password); while (true) { try { $pdu = $smpp->readPDU(); if ($pdu instanceof DeliverSm) { $messageId = $pdu->getReceiptedMessageId(); $status = $pdu->getMessageStatus(); echo "Izvješće o isporuci za $messageId: $status\n"; // Pošaljite odgovor $smpp->respond($pdu, new DeliverSmResp()); } } catch (Exception $e) { echo "Greška pri čitanju PDU-a: " . $e->getMessage() . "\n"; break; } }
Ovaj kod povezuje klijenta kao primatelja za slušanje izvješća o isporuci, obrađuje dolazne PDU-e i šalje odgovarajuće odgovore. To osigurava da vaša PHP aplikacija može učinkovito pratiti statuse isporuke poruka.
Potpuni PHP SMPP klijent za slanje SMS-a putem SMPP API-ja
Ispod je sveobuhvatna PHP klasa koja obuhvaća funkcionalnost SMPP API-ja, uključujući upravljanje vezom, slanje poruka i logiku ponovnog povezivanja. Ova implementacija je dizajnirana za produkcijsku upotrebu, s robusnim upravljanjem greškama i modularnošću.
<?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 "Povezan s SMPP serverom\n"; } catch (Exception $e) { echo "Povezivanje nije uspjelo: " . $e->getMessage() . "\n"; $this->reconnect(); } } public function sendSMS($from, $to, $message) { if (!$this->isConnected) { throw new Exception("Niste povezani s SMPP serverom"); } 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(); } } // Primjer upotrebe $config = [ 'host' => 'your.ozeki.server', 'port' => 2775, 'username' => 'your_username', 'password' => 'your_password' ]; $client = new SMPPClient($config); try { $messageId = $client->sendSMS('12345', '+1234567890', 'Pozdrav iz PHP-a!'); echo "Poruka poslana s ID-om: $messageId\n"; } catch (Exception $e) { echo "Greška pri slanju poruke: " . $e->getMessage() . "\n"; } ?>
Ova klasa pruža ponovno upotrebljivu PHP implementaciju SMPP API-ja, s metodama za povezivanje, slanje poruka, ponovno povezivanje u slučaju greške i čišćenje resursa. Dizajnirana je da bude modularna i laka za integraciju u veće aplikacije.
Najbolje prakse za izradu PHP SMPP klijenta
Kako biste osigurali da je vaša PHP aplikacija koja koristi SMPP API robusna i skalabilna, slijedite ove najbolje prakse:
- Implementirajte robusno upravljanje greškama: Uhvatite i obradite iznimke za greške pri povezivanju, slanju poruka i obradi PDU-a kako biste osigurali pouzdanost.
- Koristite trajne veze: Održavajte jednu vezu s SMPP API-jem kako biste smanjili opterećenje i poboljšali performanse.
- Implementirajte red čekanja poruka: Za slanje velikog broja SMS-ova, koristite red čekanja za upravljanje isporukom poruka i sprječavanje preopterećenja servera.
- Nadzirajte stanje veze: Kontinuirano provjeravajte status veze i implementirajte logiku automatskog ponovnog povezivanja za rješavanje mrežnih prekida.
- Koristite radni proces: Pokrenite svoj PHP SMPP klijent kao demona ili radni proces za kontinuirani rad u produkcijskim okruženjima.
- Evidentirajte aktivnosti: Implementirajte bilježenje kako biste pratili događaje vezanja, statuse poruka i greške za otklanjanje pogrešaka i nadzor.
Zaključak
Ovaj sveobuhvatni vodič pokazao je kako implementirati PHP
klijent za SMPP API za slanje i upravljanje SMS porukama koristeći
Ozeki SMS Gateway. Korištenjem biblioteke php-smpp
,
programeri mogu upravljati detaljima SMPP protokola niske razine dok
se fokusiraju na izgradnju robusnih aplikacija. Navedeni primjeri koda pokrivaju
upravljanje vezom, slanje poruka, obradu izvješća o isporuci i potpunu
PHP klasu za produkcijsku upotrebu. Za napredne aplikacije,
razmislite o implementaciji dodatnih značajki kao što su red čekanja poruka, detaljno
bilježenje i nadzor kako biste poboljšali pouzdanost i skalabilnost.
Za produkcijska okruženja, osigurajte da vaš PHP SMPP klijent uključuje robusno upravljanje greškama, nadzor veze i bilježenje. SMPP API podržava napredne značajke kao što su prioritizacija poruka i ograničavanje brzine, što se može istražiti kako vaši zahtjevi aplikacije rastu.
More information
- Kako postaviti SMPP API klijentsku vezu s Vašim SMSC
- Kako postaviti SMPP API poslužitelj za slanje i primanje SMS-a iz više aplikacija
- Kako odabrati pravog SMPP API pružatelja za vaš posao
- Kako poslati SMS koristeći SMPP API na razini protokola
- Kako poslati SMS putem SMPP API-a koristeći Python
- Kako poslati SMS putem SMPP API-a koristeći Javascript
- Kako poslati SMS putem SMPP API-a koristeći Java
- Kako poslati SMS putem SMPP API-a koristeći PHP
- Kako poslati SMS putem SMPP API-ja koristeći C#
- Kako poslati SMS putem SMPP API-a koristeći C/Cpp
- Kako primiti SMS koristeći SMPP API
- Kako primiti izvješće o isporuci SMS-a koristeći SMPP API
- SMPP API FAQ