All Products
Search
Document Center

IoT Platform:Contoh koneksi PHP SDK

Last Updated:Jun 17, 2026

Hubungkan ke IoT Platform dan terima pesan langganan sisi server menggunakan PHP SDK.

Prasyarat

Anda telah memperoleh ID kelompok konsumen dan berlangganan ke pesan topik yang diperlukan.

Unduh SDK

Kode contoh ini menggunakan pustaka Stomp PHP untuk berkomunikasi dengan IoT Platform melalui protokol STOMP. Kunjungi Stomp PHP untuk mengunduh klien dan melihat petunjuknya.

Untuk versi PHP yang kompatibel, lihat deklarasi require dalam file composer.json dari Stomp PHP SDK.

Versi Stomp PHP sebelum 5.0.0 memiliki masalah rekoneksi yang diketahui. Kami merekomendasikan versi 5.0.0 atau yang lebih baru. Untuk informasi selengkapnya, lihat Issues.

Jalankan perintah berikut di direktori proyek PHP Anda untuk menginstal Stomp PHP 5.0.0.

composer require stomp-php/stomp-php 5.0.0

Kode contoh

<?php
require __DIR__ . '/vendor/autoload.php';
use Stomp\Client;
use Stomp\Network\Observer\Exception\HeartbeatException;
use Stomp\Network\Observer\ServerAliveObserver;
use Stomp\StatefulStomp;
// Untuk detail parameter, lihat dokumentasi tentang menghubungkan client AMQP.
// PERINGATAN: Menyimpan AccessKey secara langsung dalam kode merupakan risiko keamanan. Contoh ini mengambilnya dari variabel lingkungan untuk meningkatkan keamanan.
$accessKey = getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
$accessSecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$consumerGroupId = "${YourConsumerGroupId}";
$clientId = "${YourClientId}";
// iotInstanceId: ID instans IoT Platform.
$iotInstanceId = "${YourIotInstanceId}";
$timeStamp = round(microtime(true) * 1000);
// Algoritma signature. Nilai yang didukung adalah hmacmd5, hmacsha1, dan hmacsha256.
$signMethod = "hmacsha1";
// Untuk petunjuk cara menyusun username, lihat dokumentasi koneksi client AMQP.
// Untuk mengirimkan data biner, tambahkan parameter encode=base64 ke username. Server kemudian akan meng-encode isi pesan dalam Base64 sebelum mengirim pesan. Lihat bagian "Binary message body" untuk informasi selengkapnya.
$userName = $clientId . "|authMode=aksign"
            . ",signMethod=" . $signMethod
            . ",timestamp=" . $timeStamp
            . ",authId=" . $accessKey
            . ",iotInstanceId=" . $iotInstanceId
            . ",consumerGroupId=" . $consumerGroupId
            . "|";
$signContent = "authId=" . $accessKey . "&timestamp=" . $timeStamp;
// Hitung signature. Untuk petunjuk cara menyusun password, lihat dokumentasi tentang menghubungkan client AMQP.
$password = base64_encode(hash_hmac("sha1", $signContent, $accessSecret, $raw_output = TRUE));
// Titik akhir koneksi. Untuk detailnya, lihat dokumentasi koneksi client AMQP.
$client = new Client('ssl://${YourHost}:61614');
$sslContext = ['ssl' => ['verify_peer' => true, 'verify_peer_name' => false], ];
$client->getConnection()->setContext($sslContext);
// Dengarkan heartbeat dari server.
$observer = new ServerAliveObserver();
$client->getConnection()->getObservers()->addObserver($observer);
// Konfigurasi heartbeat. Client mengharapkan paket heartbeat dari server setiap 30 detik.
$client->setHeartbeat(0, 30000);
$client->setLogin($userName, $password);
try {
    $client->connect();
}
catch(StompException $e) {
    echo "gagal terhubung ke server, msg:" . $e->getMessage() , PHP_EOL;
}
// Jika koneksi berhasil, eksekusi dilanjutkan.
$stomp = new StatefulStomp($client);
$stomp->subscribe('/topic/#');
echo "connect success";
while (true) {
    try {
        // Periksa status koneksi.
        if (!$client->isConnected()) {
            echo "koneksi tidak ada, akan mencoba kembali setelah 10 detik.", PHP_EOL;
            sleep(10);
            $client->connect();
            $stomp->subscribe('/topic/#');
            echo "connect success", PHP_EOL;
        }
        // Tambahkan logika pemrosesan pesan Anda di sini.
        echo $stomp->read();
    }
    catch(HeartbeatException $e) {
        echo 'Server gagal mengirim heartbeat dalam interval yang ditentukan.', PHP_EOL;
        $stomp->getClient()->disconnect();
    } catch(Exception $e) {
        echo 'terjadi kesalahan saat memproses pesan: '. $e->getMessage() , PHP_EOL;
        $stomp->getClient()->disconnect();
    }
}   

Ganti nilai placeholder dalam kode dengan nilai aktual Anda. Untuk informasi selengkapnya tentang parameter, lihat Connect an AMQP client to IoT Platform.

Penting

Tentukan nilai parameter yang valid. Jika tidak, klien AMQP gagal terhubung ke IoT Platform.

Parameter

Deskripsi

accessKey

Login ke Konsol IoT Platform, arahkan kursor ke gambar profil Anda di pojok kanan atas, lalu klik AccessKey Management untuk memperoleh ID AccessKey dan Rahasia AccessKey.

Catatan

Jika Anda menggunakan Pengguna RAM, Anda harus memberikan izin kepada Pengguna RAM tersebut untuk mengelola IoT Platform (AliyunIOTFullAccess). Jika tidak, koneksi akan gagal. Untuk informasi selengkapnya tentang cara memberikan izin, lihat RAM User Access.

accessSecret

consumerGroupId

ID kelompok konsumen dalam instans IoT Platform.

Login ke Konsol IoT Platform. Di instans yang sesuai, buka Message Forwarding > Server-side Subscription > Consumer Group List untuk melihat ID kelompok konsumen Anda.

iotInstanceId

ID instans. Anda dapat menemukannya di halaman Overview pada Konsol IoT Platform.

  • Tentukan ID instans jika tersedia.

  • Jika halaman Overview tidak ditampilkan atau jika tidak ada ID yang tersedia, berikan string kosong, seperti iotInstanceId = "".

clientId

ID client. Anda harus menentukan ID ini sendiri. Panjang ID maksimal 64 karakter. Kami menyarankan Anda menggunakan pengenal unik, seperti UUID, alamat MAC, atau alamat IP server tempat client AMQP Anda berada.

Setelah client AMQP terhubung dan mulai berjalan, login ke Konsol IoT Platform. Pada tab Consumer Groups di halaman Message Forwarding > > > Server-side Subscription untuk instans tersebut, klik View di samping kelompok konsumen. Halaman Consumer Group Details akan menampilkan parameter ini. Hal ini membantu Anda mengidentifikasi client yang berbeda.

client

Membuat koneksi antara client AMQP dan IoT Platform: $client = new Client('ssl://${YourHost}:61614');

Untuk informasi tentang titik akhir AMQP untuk ${YourHost}, lihat View and configure instance endpoints.

Hasil contoh

  • Berhasil: Pesan log seperti berikut dikembalikan, menunjukkan bahwa klien AMQP telah terhubung ke IoT Platform dan berhasil menerima pesan.

    $ php newfile.php
    connect successMESSAGE
    qos:1
    destination:/xxx/thing/event/property/post
    message-id:xxx2096
    topic:/xxx/xxx2/thing/event/property/post
    subscription:xxx
    generateTime:xxx
    {"deviceType":"CustomCategory","iotId":"xxx","requestId":"1614065952794","checkFailedData":{},"productKey":"xxx","gmtCreate":1614065819600,"deviceName":"xxx","items":{"Temperature":{"value":11,"time":1614065819597},"Humidity":{"value":28,"time":1614065819597}}} MESSAGE
    qos:1
    destination:/xxx/xxx2/thing/event/property/post
  • Gagal: Pesan log seperti berikut dikembalikan, menunjukkan bahwa klien AMQP gagal terhubung ke IoT Platform.

    Gunakan log kesalahan untuk memeriksa kode dan pengaturan jaringan Anda. Perbaiki masalah tersebut dan jalankan kembali kode.

    xxx>php newfile.php
    PHP Fatal error:  Uncaught Stomp\Exception\ConnectionException: Failed to connect.  (0: php_network_getaddresses: getaddrinfo failed: □)
    Fatal error: Uncaught Stomp\Exception\ConnectionException: Failed to connect.  (0: php_network_getaddresses: getaddrinfo failed: □) (Host: xxx.un
    cs.com) in xxx\stomp-php\stomp-php\src\Network\Connection.php:417
    Stack trace:
    #0                 xxx\stomp-php\stomp-php\src\Network\Connection.php(353): Stomp\Network\Connection->connectSocket(Array)
    #1                 xxx\stomp-php\stomp-php\src\Network\Connection.php(327): Stomp\Network\Connection->getConnection()
    #2                 xxx\stomp-php\stomp-php\src\Client.php(207): Stomp\Network\Connection->connect()
    #3                 xxx.php(45): Stomp\Client->connect()
    #4                 xxx.php(56): start_consume()
    #5 {main}
    Next Stomp\Exception\ConnectionException: Could not connect to a broker (Host: xxx) in xxx\stomp
    -php\src\Network\Connection.php:358
    Stack t in xxx\vendor\stomp-php\stomp-php\src\Network\Connection.php on line 358

Isi pesan biner

Untuk mengirimkan data biner, gunakan encoding Base64 karena STOMP adalah protokol berbasis teks. Tanpa encoding, isi pesan mungkin terpotong.

Tambahkan parameter encode=base64 ke userName seperti yang ditunjukkan di bawah. Server kemudian akan meng-encode isi pesan dalam Base64 sebelum mengirimnya.

$userName = $clientId . "|authMode=aksign"
                . ",signMethod=" . $signMethod
                . ",timestamp=" . $timeStamp
                . ",authId=" . $accessKey
                . ",iotInstanceId=" . $iotInstanceId
                . ",consumerGroupId=" . $consumerGroupId
                . ",encode=base64" . "|";

Referensi

Untuk informasi selengkapnya tentang kode kesalahan pesan langganan sisi server, lihat Message-related error codes.