Hogyan küldjünk SMS-t az SMPP API segítségével PHP-ban

A Short Message Peer-to-Peer (SMPP) API egy hatékony távközlési protokoll, amelyet SMS-üzenetek cseréjére terveztek pár entitások között, például SMS központok és külső alkalmazások között. Ez az átfogó útmutató bemutatja, hogyan implementálható az SMPP API a PHP segítségével az Ozeki SMS Gateway-hez való csatlakozáshoz, lehetővé téve a fejlesztők számára az SMS-üzenetek hatékony küldését és kezelését. Részletes PHP kódpéldákkal ez az oktatóanyag lefedi a kapcsolat felépítését, üzenetküldést, kézbesítési jelentéseket és ajánlott eljárásokat egy robusztus SMPP API kliens létrehozásához.

Az SMPP API és szerepe az SMS üzenetküldésben

Az SMPP API (Short Message Peer-to-Peer) széles körben használatos a távközlési iparban a nagy mennyiségű SMS kommunikáció megkönnyítésére. Lehetővé teszi az alkalmazások számára, hogy csatlakozzanak egy SMS gateway-hez, például az Ozeki SMS Gateway-hez, hogy megbízhatóan küldjenek és fogadjanak üzeneteket. A PHP használatával a fejlesztők skálázható alkalmazásokat hozhatnak létre, amelyek az SMPP API-val kommunikálnak, hogy kezeljék az SMS munkafolyamatokat. Ez az útmutató a php-smpp könyvtárat használja, egy robusztus eszközt az SMPP protokoll implementálásához PHP-ban, hogy leegyszerűsítse az alacsony szintű protokoll interakciókat.

PHP SMPP kliens beállítása SMS küldéséhez az SMPP API-n keresztül

Ahhoz, hogy SMS-t küldhess az SMPP API-n keresztül, először be kell állítanod egy SMPP felhasználót, majd csatlakoztatnod kell a klienst az Ozeki SMS Gateway SMPP szerveréhez. A php-smpp könyvtárat fogjuk használni, amely SMPP protokoll implementációt biztosít:

  1. Telepítsd a php-smpp könyvtárat Composer segítségével az SMPP API interakciók kezeléséhez.
  2. Konfiguráld a kapcsolati paramétereket, beleértve a gazdagépet, portot, felhasználónevet és jelszót, amelyet az Ozeki SMS Gateway biztosít.
  3. Állítsd fel a kapcsolatot az SMPP szerverrel egy socket transport segítségével.

Íme, hogyan telepítheted a könyvtárat:

composer require onlinecity/php-smpp

Alapvető kapcsolati példa az SMPP API-hoz PHP-ban

A következő PHP kód bemutatja, hogyan állítható fel kapcsolat az Ozeki SMS Gateway-hez az SMPP API segítségével. Ez a példa a php-smpp könyvtárat használja egy kliens létrehozásához, a szerverhez való csatlakozáshoz és adóként való kötéshez SMS üzenetek küldéséhez.

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

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

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

// Transport és kliens létrehozása
$transport = new Socket([$host], $port);
$transport->setRecvTimeout(30000);
$smpp = new Client($transport);

// Kapcsolódás és kötés
$transport->open();
$smpp->bindTransmitter($username, $password);

echo "Sikeresen csatlakoztál az SMPP szerverhez\n";

// Üzenet küldése itt...

// Kapcsolat lezárása
$smpp->close();
?>

Ez a kód inicializál egy socket transport-ot, beállít egy időtúllépést az adatfogadáshoz, és köti a klienst adóként a megadott hitelesítő adatokkal. Miután csatlakoztál, a kliens készen áll SMS üzenetek küldésére az SMPP API segítségével.

A kapcsolat fenntartása PHP-ban az SMPP API-n keresztül

A megbízható kapcsolat biztosításához az SMPP API-val, a PHP alkalmazásodnak periodikus keep-alive üzeneteket kell küldenie a enquire_link PDU segítségével. Ez megakadályozza a kapcsolat időtúllépését és biztosítja a folyamatos működést. Az alábbi példa bemutatja, hogyan implementálhatsz egy keep-alive mechanizmust PHP-ban.

function sendKeepAlive($smpp) {
    try {
        $smpp->enquireLink();
        echo "Keep-alive elküldve\n";
    } catch (Exception $e) {
        echo "Keep-alive sikertelen: " . $e->getMessage() . "\n";
        // Implementálj újrakapcsolódási logikát itt
    }
}

// Keep-alive küldése 30 másodpercenként
$keepAliveInterval = 30;
$lastKeepAlive = time();
while (true) {
    if (time() - $lastKeepAlive >= $keepAliveInterval) {
        sendKeepAlive($smpp);
        $lastKeepAlive = time();
    }
    // Egyéb műveletek kezelése itt
    sleep(1);
}

Ez a szkript 30 másodpercenként küld egy keep-alive üzenetet, és tartalmaz hibakezelést a kapcsolati problémák kezeléséhez. Ha a keep-alive sikertelen, implementálhatsz újrakapcsolódási logikát a kapcsolat helyreállításához az SMPP API-val.

SMS üzenetek küldése PHP-ban az SMPP API-n keresztül

SMS üzenetek küldése az SMPP API segítségével PHP-ban egy SMS üzenet létrehozását jelenti a submit_sm PDU segítségével. A következő példa bemutatja, hogyan küldhetsz üzenetet a php-smpp könyvtár használatával.

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, 'Helló a PHP SMPP klienstől!');
$message->setDataCoding(SMPP::DATA_CODING_DEFAULT);

try {
    $messageId = $smpp->sendSMS($message);
    echo "Üzenet sikeresen elküldve, ID: $messageId\n";
} catch (Exception $e) {
    echo "Üzenet küldése sikertelen: " . $e->getMessage() . "\n";
}

Ebben a példában a feladó címe alfanumerikus sztringként van beállítva, a címzett száma pedig nemzetközi formátumban. A DATA_CODING_DEFAULT beállítás biztosítja a kompatibilitást a standard szöveges üzenetekkel. A hibakezelés biztosítja, hogy az üzenetküldés során felmerülő problémákat elkapja és jelenteni tudja.

Kézbesítési jelentések kezelése PHP-ban az SMPP API-n keresztül

Az SMPP API támogatja a kézbesítési jelentéseket a küldött üzenetek állapotának nyomon követéséhez. Ahhoz, hogy ezeket a jelentéseket PHP-ban fogadd, kösd a klienst fogadóként és dolgozd fel a bejövő deliver_sm PDU-kat. A következő kód bemutatja, hogyan implementálhatod ezt a funkcionalitást.

// Először kösd fogadóként a kézbesítési jelentések fogadásához
$smpp->bindReceiver($username, $password);

while (true) {
    try {
        $pdu = $smpp->readPDU();
        if ($pdu instanceof DeliverSm) {
            $messageId = $pdu->getReceiptedMessageId();
            $status = $pdu->getMessageStatus();
            
            echo "Kézbesítési jelentés a(z) $messageId számára: $status\n";
            
            // Válasz küldése
            $smpp->respond($pdu, new DeliverSmResp());
        }
    } catch (Exception $e) {
        echo "Hiba a PDU olvasásakor: " . $e->getMessage() . "\n";
        break;
    }
}

Ez a kód a klienst fogadóként köti, hogy figyelje a kézbesítési jelentéseket, feldolgozza a bejövő PDU-kat, és küldjön megfelelő válaszokat. Ez biztosítja, hogy a PHP alkalmazásod hatékonyan követni tudja az üzenetek kézbesítési állapotát.

Teljes PHP SMPP kliens SMS küldéséhez az SMPP API-n keresztül

Az alábbiakban egy átfogó PHP osztály található, amely magában foglalja az SMPP API funkcionalitását, beleértve a kapcsolatkezelést, üzenetküldést és újrakapcsolódási logikát. Ez az implementáció termelési környezetekre van tervezve, robusztus hibakezeléssel és modularitással.

<?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 "Csatlakozva az SMPP szerverhez\n";
        } catch (Exception $e) {
            echo "Kapcsolódás sikertelen: " . $e->getMessage() . "\n";
            $this->reconnect();
        }
    }
    
    public function sendSMS($from, $to, $message) {
        if (!$this->isConnected) {
            throw new Exception("Nincs kapcsolat az SMPP szerverrel");
        }
        
        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();
    }
}

// Használati példa
$config = [
    'host' => 'your.ozeki.server',
    'port' => 2775,
    'username' => 'your_username',
    'password' => 'your_password'
];

$client = new SMPPClient($config);

try {
    $messageId = $client->sendSMS('12345', '+1234567890', 'Helló a PHP-ból!');
    echo "Üzenet elküldve, ID: $messageId\n";
} catch (Exception $e) {
    echo "Hiba az üzenet küldésekor: " . $e->getMessage() . "\n";
}
?>

Ez az osztály egy újrafelhasználható PHP implementációt nyújt az SMPP API-hoz, metódusokkal a kapcsolódáshoz, üzenetküldéshez, újrakapcsolódáshoz hibák esetén és erőforrások felszabadításához. Modularitása és könnyű integrálhatósága miatt nagyobb alkalmazásokba is könnyen beilleszthető.

Ajánlott eljárások egy PHP SMPP kliens létrehozásához

Annak érdekében, hogy a PHP alkalmazásod az SMPP API használatával robusztus és skálázható legyen, kövesd az alábbi ajánlott eljárásokat:

  • Robusztus hibakezelés implementálása: Kapcsolódási hibák, üzenetküldési hibák és PDU feldolgozási problémák kezelése a megbízhatóság érdekében.
  • Állandó kapcsolatok használata: Egyetlen kapcsolat fenntartása az SMPP API-val a terhelés csökkentése és a teljesítmény javítása érdekében.
  • Üzenetsor használata: Nagy mennyiségű SMS küldéséhez használj üzenetsort az üzenetek kézbesítésének kezelésére és a szerver túlterhelésének elkerülésére.
  • Kapcsolat állapotának monitorozása: Folyamatosan ellenőrizd a kapcsolat állapotát és implementálj automatikus újrakapcsolódási logikát a hálózati megszakítások kezelésére.
  • Worker folyamat használata: Futtasd a PHP SMPP klienst daemon vagy worker folyamatként a folyamatos működés érdekében termelési környezetekben.
  • Naplózás: Implementálj naplózást a kapcsolati események, üzenetállapotok és hibák nyomon követéséhez hibakeresés és monitorozás céljából.

Összegzés

Ez az átfogó útmutató bemutatta, hogyan implementálható egy PHP kliens az SMPP API-hoz az Ozeki SMS Gateway segítségével történő SMS üzenetek küldéséhez és kezeléséhez. A php-smpp könyvtár használatával a fejlesztők kezelhetik az alacsony szintű SMPP protokoll részleteket, miközben robusztus alkalmazások építésére koncentrálnak. A megadott kódpéldák lefedik a kapcsolatkezelést, üzenetküldést, kézbesítési jelentések kezelését és egy teljes PHP osztályt termelési használatra. Fejlett alkalmazásokhoz érdemes további funkciókat implementálni, például üzenetsorokat, részletes naplózást és monitorozást a megbízhatóság és skálázhatóság növelésére.

Termelési környezetekben győződj meg róla, hogy a PHP SMPP klensed tartalmaz robusztus hibakezelést, kapcsolatmonitorozást és naplózást. Az SMPP API támogatja a fejlett funkciókat, például az üzenetek prioritizálását és szabályozását, amelyeket érdemes felderíteni az alkalmazás követelményeinek növekedésével.

More information