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:

  1. Instalirajte php-smpp biblioteku koristeći Composer za upravljanje interakcijama s SMPP API-jem.
  2. Konfigurirajte svoje parametre veze, uključujući host, port, korisničko ime i lozinku koje pruža Ozeki SMS Gateway.
  3. 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