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-smppbiblioteku 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.