Ako poslať SMS cez SMPP API pomocou PHP

Short Message Peer-to-Peer (SMPP) API je výkonný telekomunikačný protokol určený na výmenu SMS správ medzi partnerskými entitami, ako sú SMS centrá a externé aplikácie. Tento komplexný sprievodca ukazuje, ako implementovať SMPP API pomocou PHP na pripojenie k Ozeki SMS Gateway, čo umožňuje vývojárom efektívne odosielať a spravovať SMS správy. S detailnými príkladmi kódu v PHP tento tutoriál pokrýva nastavenie pripojenia, odosielanie správ, doručovacie správy a osvedčené postupy pre vytvorenie robustného klienta SMPP API.

Pochopenie SMPP API a jeho úlohy v SMS komunikácii

SMPP API (Short Message Peer-to-Peer) je široko používané v telekomunikačnom priemysle na uľahčenie vysokoobjemovej SMS komunikácie. Umožňuje aplikáciám pripojiť sa k SMS bráne, ako je Ozeki SMS Gateway, na spoľahlivé odosielanie a prijímanie správ. Využitím PHP môžu vývojári vytvárať škálovateľné aplikácie, ktoré interagujú s SMPP API na správu SMS pracovných postupov. Tento sprievodca používa knižnicu php-smpp, robustný nástroj na implementáciu SMPP protokolu v PHP, na zjednodušenie interakcií s nízkou úrovňou protokolu.

Nastavenie PHP SMPP klienta na odosielanie SMS cez SMPP API

Na odoslanie SMS cez SMPP API musíte najprv SMPP server Ozeki SMS Gateway. Použijeme knižnicu php-smpp, ktorá poskytuje implementáciu SMPP protokolu:

  1. Nainštalujte knižnicu php-smpp pomocou Composeru na spracovanie interakcií s SMPP API.
  2. Nakonfigurujte svoje prihlasovacie údaje, vrátane hostiteľa, portu, používateľského mena a hesla poskytnutého Ozeki SMS Gateway.
  3. Nadviažte spojenie so SMPP serverom pomocou soketového transportu.

Tu je návod, ako nainštalovať knižnicu:

composer require onlinecity/php-smpp

Základný príklad pripojenia pre SMPP API v PHP

Nasledujúci kód v PHP demonštruje, ako nadviazať spojenie s Ozeki SMS Gateway pomocou SMPP API. Tento príklad používa knižnicu php-smpp na vytvorenie klienta, pripojenie k serveru a naviazanie ako vysielač na odosielanie SMS správ.

<?php
require 'vendor/autoload.php';

use Smpp\Client;
use Smpp\Transport\Socket;

$host = 'your.ozeki.server';
$port = 2775;
$username = 'your_username';
$password = 'your_password';

// Vytvorenie transportu a klienta
$transport = new Socket([$host], $port);
$transport->setRecvTimeout(30000);
$smpp = new Client($transport);

// Pripojenie a naviazanie
$transport->open();
$smpp->bindTransmitter($username, $password);

echo "Úspešne pripojené k SMPP serveru\n";

// Odoslanie správy tu...

// Uzatvorenie spojenia
$smpp->close();
?>

Tento kód inicializuje soketový transport, nastaví časový limit na prijímanie dát a naviaže klienta ako vysielača pomocou poskytnutých prihlasovacích údajov. Po pripojení je klient pripravený odosielať SMS správy cez SMPP API.

Udržiavanie spojenia s PHP cez SMPP API

Na zabezpečenie spoľahlivého pripojenia k SMPP API musí vaša aplikácia v PHP odosielať periodické keep-alive správy pomocou PDU enquire_link. Tým sa zabráni vypršaniu časového limitu spojenia a zabezpečí sa nepretržitá prevádzka. Nižšie je uvedený príklad, ako implementovať mechanizmus keep-alive v PHP.

function sendKeepAlive($smpp) {
    try {
        $smpp->enquireLink();
        echo "Keep-alive správa odoslaná\n";
    } catch (Exception $e) {
        echo "Keep-alive zlyhal: " . $e->getMessage() . "\n";
        // Implementujte logiku opätovného pripojenia tu
    }
}

// Odosielanie keep-alive každých 30 sekúnd
$keepAliveInterval = 30;
$lastKeepAlive = time();
while (true) {
    if (time() - $lastKeepAlive >= $keepAliveInterval) {
        sendKeepAlive($smpp);
        $lastKeepAlive = time();
    }
    // Spracovanie ďalších operácií tu
    sleep(1);
}

Tento skript odosiela keep-alive správu každých 30 sekúnd a obsahuje spracovanie chýb na správu problémov s pripojením. Ak keep-alive zlyhá, môžete implementovať logiku opätovného pripojenia na obnovenie spojenia s SMPP API.

Odosielanie SMS správ pomocou PHP cez SMPP API

Odosielanie SMS správ cez SMPP API v PHP zahŕňa vytvorenie SMS správy s PDU submit_sm. Nasledujúci príklad ukazuje, ako odoslať správu pomocou knižnice 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, 'Ahoj z PHP SMPP klienta!');
$message->setDataCoding(SMPP::DATA_CODING_DEFAULT);

try {
    $messageId = $smpp->sendSMS($message);
    echo "Správa úspešne odoslaná, ID: $messageId\n";
} catch (Exception $e) {
    echo "Odoslanie správy zlyhalo: " . $e->getMessage() . "\n";
}

V tomto príklade je adresa odosielateľa nastavená ako alfanumerický reťazec a číslo príjemcu používa medzinárodný formát. Nastavenie DATA_CODING_DEFAULT zabezpečuje kompatibilitu so štandardnými textovými správami. Spracovanie chýb zaisťuje, že akékoľvek problémy počas odosielania správy sú zachytené a nahlásené.

Spracovanie správ o doručení pomocou PHP cez SMPP API

SMPP API podporuje správy o doručení na sledovanie stavu odoslaných správ. Ak chcete tieto správy prijímať v PHP, naviažte svojho klienta ako prijímateľa a spracujte prichádzajúce deliver_sm PDU. Nasledujúci kód ukazuje, ako túto funkciu implementovať.

// Najprv sa naviažte ako prijímateľ, aby ste dostávali správy o doručení
$smpp->bindReceiver($username, $password);

while (true) {
    try {
        $pdu = $smpp->readPDU();
        if ($pdu instanceof DeliverSm) {
            $messageId = $pdu->getReceiptedMessageId();
            $status = $pdu->getMessageStatus();
            
            echo "Správa o doručení pre $messageId: $status\n";
            
            // Odoslať odpoveď
            $smpp->respond($pdu, new DeliverSmResp());
        }
    } catch (Exception $e) {
        echo "Chyba pri čítaní PDU: " . $e->getMessage() . "\n";
        break;
    }
}

Tento kód naviaže klienta ako prijímateľa na počúvanie správ o doručení, spracuje prichádzajúce PDU a odošle príslušné odpovede. Tým sa zabezpečí, že vaša PHP aplikácia môže efektívne sledovať stavy doručenia správ.

Kompletný PHP SMPP klient na odosielanie SMS cez SMPP API

Nižšie je uvedená komplexná PHP trieda, ktorá zahŕňa funkčnosť SMPP API, vrátane správy pripojenia, odosielania správ a logiky opätovného pripojenia. Táto implementácia je navrhnutá pre produkčné použitie s robustným spracovaním chýb a modularitou.

<?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 "Pripojené k SMPP serveru\n";
        } catch (Exception $e) {
            echo "Pripojenie zlyhalo: " . $e->getMessage() . "\n";
            $this->reconnect();
        }
    }
    
    public function sendSMS($from, $to, $message) {
        if (!$this->isConnected) {
            throw new Exception("Nie ste pripojený k SMPP serveru");
        }
        
        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();
    }
}

// Príklad použitia
$config = [
    'host' => 'your.ozeki.server',
    'port' => 2775,
    'username' => 'your_username',
    'password' => 'your_password'
];

$client = new SMPPClient($config);

try {
    $messageId = $client->sendSMS('12345', '+1234567890', 'Ahoj z PHP!');
    echo "Správa odoslaná s ID: $messageId\n";
} catch (Exception $e) {
    echo "Chyba pri odosielaní správy: " . $e->getMessage() . "\n";
}
?>

Táto trieda poskytuje opakovane použiteľnú implementáciu PHP pre SMPP API, s metódami na pripojenie, odosielanie správ, opätovné pripojenie pri zlyhaní a uvoľnenie zdrojov. Je navrhnutá tak, aby bola modulárna a ľahko integrovateľná do väčších aplikácií.

Najlepšie postupy pre vytvorenie PHP SMPP klienta

Ak chcete zabezpečiť, že vaša PHP aplikácia používajúca SMPP API je robustná a škálovateľná, dodržiavajte tieto najlepšie postupy:

  • Implementujte robustné spracovanie chýb: Zachytávajte a spracúvajte výnimky pre zlyhania pripojenia, chyby pri odosielaní správ a problémy so spracovaním PDU, aby ste zabezpečili spoľahlivosť.
  • Použite trvalé pripojenia: Udržiavajte jedno pripojenie k SMPP API, aby ste znížili režiu a zlepšili výkon.
  • Implementujte front správ: Pre odosielanie SMS vo veľkom objeme použite front na správu doručenia správ a zabránenie preťaženiu servera.
  • Sledujte stav pripojenia: Priebežne kontrolujte stav pripojenia a implementujte logiku automatického opätovného pripojenia na zvládnutie výpadkov siete.
  • Použite pracovný proces: Spustite svojho PHP SMPP klienta ako démona alebo pracovný proces pre nepretržitú prevádzku v produkčných prostrediach.
  • Logujte aktivitu: Implementujte logovanie na sledovanie udalostí pripojenia, stavov správ a chýb na účely ladenia a monitorovania.
Záver

Tento komplexný sprievodca ukázal, ako implementovať PHP klienta pre SMPP API na odosielanie a správu SMS správ pomocou Ozeki SMS Gateway. Využitím knižnice php-smpp sa vývojári môžu sústrediť na detaily SMPP protokolu nízkej úrovne pri vytváraní robustných aplikácií. Poskytnuté príklady kódu pokrývajú správu pripojenia, odosielanie správ, spracovanie správ o doručení a kompletnú PHP triedu pre produkčné použitie. Pre pokročilé aplikácie zvážte implementáciu ďalších funkcií, ako je front správ, podrobné logovanie a monitorovanie, aby ste zvýšili spoľahlivosť a škálovateľnosť.

Pre produkčné prostredia zabezpečte, aby váš PHP SMPP klient obsahoval robustné spracovanie chýb, monitorovanie pripojenia a logovanie. SMPP API podporuje pokročilé funkcie, ako je priorizácia správ a obmedzenie rýchlosti, ktoré môžete preskúmať, keď sa vaše požiadavky na aplikáciu zvýšia.

More information