All Products
Search
Document Center

IoT Platform:Menghubungkan klien ke IoT Platform menggunakan SDK untuk PHP

Last Updated:Jul 02, 2025

Topik ini menjelaskan cara menggunakan SDK untuk PHP guna menghubungkan klien Advanced Message Queuing Protocol (AMQP) ke Alibaba Cloud IoT Platform dan menerima pesan dari IoT Platform melalui fitur langganan sisi server.

Prasyarat

ID grup konsumen yang berlangganan pesan dari topik telah diperoleh.

  • Anda dapat menggunakan grup konsumen default bernama DEFAULT_GROUP atau membuat grup konsumen di konsol IoT Platform. Untuk informasi lebih lanjut, lihat Kelola Grup Konsumen.

  • Anda dapat menggunakan grup konsumen untuk berlangganan pesan dari topik. Untuk informasi lebih lanjut, lihat Konfigurasikan Langganan Sisi Server AMQP.

Unduh SDK

Kode contoh ditulis berdasarkan pustaka Stomp PHP dan memungkinkan Anda menghubungkan klien Stomp PHP ke IoT Platform melalui Simple Text Oriented Message Protocol (STOMP). Untuk mengunduh klien Stomp PHP dan melihat petunjuknya, kunjungi Stomp PHP.

Untuk informasi tentang versi PHP yang didukung oleh Stomp SDK untuk PHP, lihat deklarasi parameter require dalam file composer.json dari Stomp SDK untuk PHP.

Pada versi Stomp PHP sebelum 5.0.0, SDK mungkin gagal menyambung kembali ke IoT Platform setelah terputus. Kami menyarankan Anda mengunduh Stomp PHP 5.0.0 atau yang lebih baru. Untuk informasi lebih lanjut, lihat Masalah.

Di direktori proyek PHP, jalankan perintah berikut untuk mengunduh SDK 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 informasi lebih lanjut tentang parameter, lihat topik "Menghubungkan klien AMQP ke IoT Platform".
// Jika Anda melakukan hard-code pasangan AccessKey dalam kode proyek, pasangan AccessKey tersebut mungkin terungkap jika kode proyek bocor. Dalam hal ini, sumber daya dalam akun Anda menjadi tidak aman. Contoh kode berikut memberikan contoh cara mendapatkan pasangan AccessKey dari variabel lingkungan. Contoh ini hanya untuk referensi.
$accessKey = getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
$accessSecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$consumerGroupId = "${YourConsumerGroupId}";
$clientId = "${YourClientId}";
// iotInstanceId: ID instance IoT Platform.
$iotInstanceId = "${YourIotInstanceId}";
$timeStamp = round(microtime(true) * 1000);
// Algoritma tanda tangan. Nilai yang valid: hmacmd5, hmacsha1, dan hmacsha256.
$signMethod = "hmacsha1";
// Struktur parameter userName. Untuk informasi lebih lanjut, lihat topik "Menghubungkan klien AMQP ke IoT Platform".
// Jika Anda ingin mentransmisikan pesan dalam format biner, tentukan encode=base64 dalam parameter userName. Sebelum IoT Platform mengirimkan pesan-pesan ini, IoT Platform mengkodekan pesan-pesan tersebut menggunakan algoritma Base64. Untuk informasi lebih lanjut, lihat bagian "Pesan dalam format biner" dari topik ini.
$userName = $clientId . "|authMode=aksign"
            . ",signMethod=" . $signMethod
            . ",timestamp=" . $timeStamp
            . ",authId=" . $accessKey
            . ",iotInstanceId=" . $iotInstanceId
            . ",consumerGroupId=" . $consumerGroupId
            . "|";
$signContent = "authId=" . $accessKey . "&timestamp=" . $timeStamp;
// Hitung tanda tangan. Untuk informasi lebih lanjut tentang cara membangun kata sandi, lihat topik "Menghubungkan klien AMQP ke IoT Platform".
$password = base64_encode(hash_hmac("sha1", $signContent, $accessSecret, $raw_output = TRUE));
// Titik akhir. Untuk informasi lebih lanjut, lihat topik "Menghubungkan klien AMQP ke IoT Platform".
$client = new Client('ssl://${YourHost}:61614');
$sslContext = ['ssl' => ['verify_peer' => true, 'verify_peer_name' => false], ];
$client->getConnection()->setContext($sslContext);

// Konfigurasikan pendengar untuk memantau status koneksi antara klien dan IoT Platform.
$observer = new ServerAliveObserver();
$client->getConnection()->getObservers()->addObserver($observer);
// Pengaturan denyut jantung. Pengaturan ini memungkinkan IoT Platform mengirim paket denyut jantung setiap 30 detik.
$client->setHeartbeat(0, 30000);
$client->setLogin($userName, $password);
try {
    $client->connect();
}
catch(StompException $e) {
    echo "gagal terhubung ke server, pesan:" . $e->getMessage() , PHP_EOL;
}
// Jalankan kode berikut jika tidak ada pengecualian yang terjadi:
$stomp = new StatefulStomp($client);
$stomp->subscribe('/topic/#');
echo "koneksi berhasil";

while (true) {
    try {

        // Periksa status koneksi.
        if (!$client->isConnected()) {
            echo "koneksi tidak ada, akan menyambung kembali setelah 10 detik.", PHP_EOL;
            sleep(10);
            $client->connect();
            $stomp->subscribe('/topic/#');
            echo "koneksi berhasil", PHP_EOL;
        }

        // Tentukan logika bisnis untuk memproses pesan.
        echo $stomp->read();
    }
    catch(HeartbeatException $e) {
        echo 'Server gagal mengirim denyut jantung kepada kita 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();
    }
}   

Anda dapat mengonfigurasi parameter dalam kode sebelumnya sesuai dengan deskripsi parameter dalam tabel berikut. Untuk informasi lebih lanjut tentang parameter lainnya, lihat Menghubungkan Klien AMQP ke IoT Platform.

Penting

Pastikan Anda menentukan nilai parameter yang valid. Jika tidak, klien AMQP gagal terhubung ke IoT Platform.

Parameter

Deskripsi

accessKey

Masuk ke konsol IoT Platform, arahkan pointer ke foto profil di sudut kanan atas, lalu klik AccessKey Management untuk mendapatkan ID AccessKey dan Rahasia AccessKey.

Catatan

Jika Anda menggunakan pengguna Resource Access Management (RAM), Anda harus melampirkan kebijakan AliyunIOTFullAccess ke pengguna RAM. Kebijakan ini memungkinkan pengguna RAM mengelola sumber daya IoT Platform. Jika tidak, koneksi ke IoT Platform gagal. Untuk informasi lebih lanjut, lihat Akses IoT Platform sebagai pengguna RAM.

accessSecret

consumerGroupId

ID grup konsumen dari instance IoT Platform.

Untuk melihat ID grup konsumen, lakukan langkah-langkah berikut: Masuk ke konsol IoT Platform dan klik kartu instance yang ingin Anda kelola. Di panel navigasi di sebelah kiri, pilih Message Forwarding > Server-side Subscription. ID grup konsumen ditampilkan pada tab Consumer Groups.

iotInstanceId

ID instance IoT Platform. Anda dapat melihat ID instance pada tab Ikhtisar di konsol IoT Platform.

  • Jika ID instance ditampilkan, Anda harus menyetel parameter ini ke ID instance.

  • Jika tab Ikhtisar tidak ditampilkan atau instance Anda tidak memiliki ID, biarkan parameter ini kosong dalam format iotInstanceId = "".

clientId

ID klien. Anda harus menentukan ID kustom. ID harus memiliki panjang 1 hingga 64 karakter. Kami menyarankan Anda menggunakan pengenal unik sebagai ID klien, seperti UUID, alamat MAC, atau alamat IP server tempat klien berjalan.

Setelah klien AMQP terhubung ke IoT Platform dan dimulai, lakukan langkah-langkah berikut untuk melihat detail klien: Masuk ke konsol IoT Platform dan klik kartu instance yang ingin Anda kelola. Di panel navigasi di sebelah kiri, pilih Message Forwarding > Server-side Subscription. Pada tab Consumer Groups, temukan grup konsumen yang ingin Anda kelola dan klik View di kolom Tindakan. ID setiap klien ditampilkan pada tab Consumer Group Status. Anda dapat menggunakan ID klien untuk mengidentifikasi klien dengan mudah.

client

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

Untuk informasi lebih lanjut tentang titik akhir yang dapat Anda tentukan untuk variabel ${YourHost}, lihat Kelola titik akhir instance.

Hasil contoh

  • Jika informasi serupa dengan output berikut ditampilkan, klien AMQP terhubung ke IoT Platform dan dapat menerima pesan.成功

  • Jika informasi serupa dengan output berikut ditampilkan, klien AMQP gagal terhubung ke IoT Platform.

    Anda dapat memeriksa kode atau lingkungan jaringan berdasarkan log, menyelesaikan masalah, lalu menjalankan kode lagi.

    失败

Pesan dalam format biner

Jika Anda ingin mentransmisikan pesan dalam format biner, gunakan algoritma Base64 untuk mengkodekan pesan. Jika Anda tidak menggunakan algoritma Base64 untuk mengkodekan pesan, pesan mungkin terpotong karena STOMP adalah protokol berbasis teks.

Kode berikut menunjukkan cara menentukan encode=base64 dalam parameter userName. Pengaturan ini memungkinkan IoT Platform mengkodekan pesan menggunakan algoritma Base64 sebelum IoT Platform mengirimkan pesan.

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

Referensi

Untuk informasi lebih lanjut tentang kode kesalahan yang terkait dengan fitur langganan sisi server, lihat bagian Kode Kesalahan yang Terkait dengan Pesan dari topik "Log IoT Platform".