Tous les produits
Search
Centre de documentation

IoT Platform:Exemple de connexion avec le SDK PHP

Dernière mise à jour :Aug 10, 2026

Connectez-vous à IoT Platform et recevez les messages d'abonnement côté serveur en utilisant le SDK PHP.

Prérequis

Vous disposez d'un ID de groupe de consommateurs et vous êtes abonné aux messages des rubriques requises.

Télécharger le SDK

Cet exemple de code utilise la bibliothèque Stomp PHP pour communiquer avec IoT Platform via le protocole STOMP. Rendez-vous sur Stomp PHP pour télécharger le client et consulter les instructions.

Pour connaître les versions de PHP compatibles, consultez la déclaration require dans le fichier composer.json du SDK Stomp PHP.

Les versions de Stomp PHP antérieures à la 5.0.0 présentent un problème connu de reconnexion. Nous recommandons d'utiliser la version 5.0.0 ou une version ultérieure. Pour plus d'informations, consultez la page Issues.

Exécutez la commande suivante dans le répertoire de votre projet PHP pour installer Stomp PHP 5.0.0.

composer require stomp-php/stomp-php 5.0.0

Exemple de code

<?php
require __DIR__ . '/vendor/autoload.php';
use Stomp\Client;
use Stomp\Network\Observer\Exception\HeartbeatException;
use Stomp\Network\Observer\ServerAliveObserver;
use Stomp\StatefulStomp;
// For parameter details, see the documentation on connecting an AMQP client.
// WARNING: Hard-coding your AccessKey is a security risk. This example retrieves it from an environment variable for enhanced security.
$accessKey = getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
$accessSecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$consumerGroupId = "${YourConsumerGroupId}";
$clientId = "${YourClientId}";
// iotInstanceId: The ID of the IoT Platform instance.
$iotInstanceId = "${YourIotInstanceId}";
$timeStamp = round(microtime(true) * 1000);
// The signature algorithm. Supported values are hmacmd5, hmacsha1, and hmacsha256.
$signMethod = "hmacsha1";
// For instructions on how to construct the username, see the AMQP client connection documentation.
// To transmit binary data, add the encode=base64 parameter to the username. The server will then Base64-encode the message body before sending the message. See the "Binary message body" section for more information.
$userName = $clientId . "|authMode=aksign"
            . ",signMethod=" . $signMethod
            . ",timestamp=" . $timeStamp
            . ",authId=" . $accessKey
            . ",iotInstanceId=" . $iotInstanceId
            . ",consumerGroupId=" . $consumerGroupId
            . "|";
$signContent = "authId=" . $accessKey . "&timestamp=" . $timeStamp;
// Calculate the signature. For instructions on how to construct the password, see the documentation on connecting an AMQP client.
$password = base64_encode(hash_hmac("sha1", $signContent, $accessSecret, $raw_output = TRUE));
// The connection endpoint. For details, see the AMQP client connection documentation.
$client = new Client('ssl://${YourHost}:61614');
$sslContext = ['ssl' => ['verify_peer' => true, 'verify_peer_name' => false], ];
$client->getConnection()->setContext($sslContext);
// Listen for server heartbeats.
$observer = new ServerAliveObserver();
$client->getConnection()->getObservers()->addObserver($observer);
// Heartbeat configuration. The client expects a heartbeat packet from the server every 30 seconds.
$client->setHeartbeat(0, 30000);
$client->setLogin($userName, $password);
try {
    $client->connect();
}
catch(StompException $e) {
    echo "failed to connect to server, msg:" . $e->getMessage() , PHP_EOL;
}
// If the connection is successful, execution continues.
$stomp = new StatefulStomp($client);
$stomp->subscribe('/topic/#');
echo "connect success";
while (true) {
    try {
        // Check the connection status.
        if (!$client->isConnected()) {
            echo "connection not exists, will reconnect after 10s.", PHP_EOL;
            sleep(10);
            $client->connect();
            $stomp->subscribe('/topic/#');
            echo "connect success", PHP_EOL;
        }
        // Add your message processing logic here.
        echo $stomp->read();
    }
    catch(HeartbeatException $e) {
        echo 'The server failed to send us heartbeats within the defined interval.', PHP_EOL;
        $stomp->getClient()->disconnect();
    } catch(Exception $e) {
        echo 'process message occurs error: '. $e->getMessage() , PHP_EOL;
        $stomp->getClient()->disconnect();
    }
}   

Remplacez les valeurs fictives du code par vos valeurs réelles. Pour plus d'informations sur les paramètres, consultez la rubrique Connecter un client AMQP à IoT Platform.

Important

Spécifiez des valeurs de paramètre valides. Dans le cas contraire, le client AMQP ne parviendra pas à se connecter à IoT Platform.

Paramètre

Description

accessKey

Connectez-vous à la console IoT Platform, placez le curseur sur votre photo de profil dans le coin supérieur droit, puis cliquez sur AccessKey Management pour obtenir l'ID AccessKey et le secret AccessKey.

Remarque

Si vous utilisez un utilisateur RAM, vous devez lui accorder l'autorisation de gérer IoT Platform (AliyunIOTFullAccess). Dans le cas contraire, la connexion échouera. Pour plus d'informations sur l'octroi de cette autorisation, consultez la rubrique Accès des utilisateurs RAM.

accessSecret

consumerGroupId

L'ID du groupe de consommateurs dans l'instance IoT Platform.

Connectez-vous à la console IoT Platform. Dans l'instance correspondante, accédez à Message Forwarding > Server-side Subscription > Consumer Group List pour afficher l'ID de votre groupe de consommateurs.

iotInstanceId

L'ID de l'instance. Vous pouvez le trouver sur la page Aperçu de la console IoT Platform.

  • Spécifiez l'ID de l'instance si elle existe.

  • Si la page Aperçu n'est pas affichée ou si aucun ID n'est disponible, transmettez une chaîne vide, par exemple iotInstanceId = "".

clientId

L'ID client. Vous devez définir cet ID. Sa longueur maximale est de 64 caractères. Nous vous recommandons d'utiliser un identifiant unique, tel que l'UUID, l'adresse MAC ou l'adresse IP du serveur où se trouve votre client AMQP.

Une fois le client AMQP connecté et démarré, connectez-vous à la console IoT Platform. Sur l'onglet Groupes de consommateurs de la page Message Forwarding > > > Server-side Subscription de l'instance, cliquez sur View à côté du groupe de consommateurs. La page Consumer Group Details affiche ce paramètre. Cela vous aide à identifier les différents clients.

client

Crée une connexion entre le client AMQP et IoT Platform : $client = new Client('ssl://${YourHost}:61614');

Pour plus d'informations sur le point de terminaison AMQP correspondant à ${YourHost}, consultez la rubrique Afficher et configurer les points de terminaison des instances.

Résultats de l'exemple

  • Succès : Un message de journal similaire à celui ci-dessous est renvoyé, indiquant que le client AMQP s'est connecté à IoT Platform et a reçu les messages avec succès.

    $ 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
  • Échec : Un message de journal similaire à celui ci-dessous est renvoyé, indiquant que le client AMQP n'a pas réussi à se connecter à IoT Platform.

    Utilisez le journal d'erreurs pour vérifier votre code et vos paramètres réseau. Résolvez le problème et exécutez à nouveau le code.

    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

Corps de message binaire

Pour transmettre des données binaires, utilisez un paramètre d'encodage Base64, car STOMP est un protocole basé sur du texte. Sans encodage, les corps de message risquent d'être tronqués.

Ajoutez le paramètre encode=base64 à userName comme indiqué ci-dessous. Le serveur encode alors le corps du message en Base64 avant de l'envoyer.

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

Références

Pour plus d'informations sur les codes d'erreur relatifs aux messages d'abonnement côté serveur, consultez la rubrique Codes d'erreur liés aux messages.