Todos los productos
Search
Centro de documentos

IoT Platform:Ejemplo de conexión con el SDK de PHP

Última actualización: Sep 03, 2026

Conéctese a IoT Platform y reciba mensajes de suscripción del lado del servidor mediante el SDK de PHP.

Requisitos previos

Debe haber obtenido un ID de grupo de consumidores y haberse suscrito a los mensajes de tema requeridos.

Descarga del SDK

Este código de ejemplo utiliza la biblioteca Stomp PHP para comunicarse con IoT Platform mediante el protocolo STOMP. Visite Stomp PHP para descargar el cliente y consultar las instrucciones.

Para conocer las versiones de PHP compatibles, consulte la declaración require en el archivo composer.json del SDK de Stomp PHP.

Las versiones de Stomp PHP anteriores a la 5.0.0 presentan un problema conocido de reconexión. Se recomienda usar la versión 5.0.0 o posterior. Para obtener más información, consulte Issues.

Ejecute el siguiente comando en el directorio de su proyecto PHP para instalar Stomp PHP 5.0.0.

composer require stomp-php/stomp-php 5.0.0

Código de ejemplo

<?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();
    }
}   

Reemplace los valores de marcador de posición en el código por sus valores reales. Para obtener más información sobre los parámetros, consulte Connect an AMQP client to IoT Platform.

Importante

Especifique valores de parámetro válidos. De lo contrario, el cliente AMQP no podrá conectarse a IoT Platform.

Parámetro

Descripción

accessKey

Inicie sesión en la consola de IoT Platform, pase el cursor sobre su foto de perfil en la esquina superior derecha y haga clic en AccessKey Management para obtener el AccessKey ID y el AccessKey secret.

Nota

Si usa un usuario RAM, debe otorgarle el permiso para gestionar IoT Platform (AliyunIOTFullAccess). De lo contrario, la conexión fallará. Para obtener más información sobre cómo otorgar permisos, consulte RAM User Access.

accessSecret

consumerGroupId

El ID del grupo de consumidores en la instancia de IoT Platform.

Inicie sesión en la consola de IoT Platform. En la instancia correspondiente, vaya a Message Forwarding > Server-side Subscription > Consumer Group List para consultar su ID de grupo de consumidores.

iotInstanceId

El ID de la instancia. Puede encontrarlo en la página Overview de la consola de IoT Platform.

  • Especifique el ID de la instancia si hay uno disponible.

  • Si no se muestra la página Overview o si no hay ningún ID disponible, pase una cadena vacía, como iotInstanceId = "".

clientId

El ID del cliente. Debe definir este ID. La longitud máxima es de 64 caracteres. Se recomienda usar un identificador único, como el UUID, la dirección MAC o la dirección IP del servidor donde se encuentra su cliente AMQP.

Una vez que el cliente AMQP esté conectado e iniciado, inicie sesión en la consola de IoT Platform. En la pestaña Consumer Groups de la página Message Forwarding > > > Server-side Subscription de la instancia, haga clic en View junto al grupo de consumidores. La página Consumer Group Details muestra este parámetro. Esto le ayuda a identificar los diferentes clientes.

client

Establece una conexión entre el cliente AMQP e IoT Platform: $client = new Client('ssl://${YourHost}:61614');

Para obtener información sobre el endpoint AMQP correspondiente a ${YourHost}, consulte View and configure instance endpoints.

Resultados de ejemplo

  • Éxito: Se devuelve un mensaje de registro similar al siguiente, lo que indica que el cliente AMQP se ha conectado a IoT Platform y ha recibido mensajes correctamente.

    $ 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
  • Error: Se devuelve un mensaje de registro similar al siguiente, lo que indica que el cliente AMQP no pudo conectarse a IoT Platform.

    Use el registro de errores para comprobar su código y la configuración de red. Resuelva el problema y ejecute el código nuevamente.

    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

Cuerpo de mensaje binario

Para transmitir datos binarios, use un parámetro de codificación Base64, ya que STOMP es un protocolo basado en texto. Sin esta codificación, los cuerpos de los mensajes podrían truncarse.

Agregue el parámetro encode=base64 a userName como se muestra a continuación. El servidor codificará entonces el cuerpo del mensaje en Base64 antes de enviarlo.

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

Referencias

Para obtener más información sobre los códigos de error de los mensajes de suscripción del lado del servidor, consulte Message-related error codes.