Todos os produtos
Search
Central de documentação

IoT Platform:Exemplo de conexão com o SDK para PHP

Última atualização: Jun 26, 2026

Conecte-se ao IoT Platform e receba mensagens de assinatura do lado do servidor usando o SDK para PHP.

Pré-requisitos

Obtenha um ID de grupo de consumidores e assine as mensagens dos tópicos necessários.

Baixe o SDK

Este código de exemplo usa a biblioteca Stomp PHP para se comunicar com o IoT Platform via protocolo STOMP. Acesse Stomp PHP para baixar o cliente e consultar as instruções.

Para verificar as versões compatíveis do PHP, consulte a declaração require no arquivo composer.json do SDK Stomp PHP.

Versões do Stomp PHP anteriores à 5.0.0 apresentam um problema conhecido de reconexão. Recomendamos a versão 5.0.0 ou superior. Para mais detalhes, veja Issues.

Execute o comando abaixo no diretório do seu projeto PHP para instalar o Stomp PHP 5.0.0.

composer require stomp-php/stomp-php 5.0.0

Código de exemplo

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

Substitua os valores de espaço reservado no código pelos seus valores reais. Para obter mais informações sobre os parâmetros, consulte Conectar um cliente AMQP ao IoT Platform.

Importante

Especifique valores válidos para os parâmetros. Caso contrário, o cliente AMQP não conseguirá se conectar ao IoT Platform.

Parâmetro

Descrição

accessKey

Faça login no console do IoT Platform, passe o mouse sobre sua foto de perfil no canto superior direito e clique em AccessKey Management para obter o AccessKey ID e o AccessKey secret.

Nota

Se você utilizar um usuário RAM, conceda a ele a permissão para gerenciar o IoT Platform (AliyunIOTFullAccess). Sem essa permissão, a conexão falhará. Para saber como conceder permissões, consulte Acesso de Usuário RAM.

accessSecret

consumerGroupId

O ID do grupo de consumidores na instância do IoT Platform.

Faça login no console do IoT Platform. Na instância correspondente, acesse Message Forwarding > Server-side Subscription > Consumer Group List para visualizar o ID do seu grupo de consumidores.

iotInstanceId

O ID da instância. Encontre-o na página Overview do console do IoT Platform.

  • Especifique o ID da instância caso esteja disponível.

  • Se a página Overview não for exibida ou se nenhum ID estiver disponível, passe uma string vazia, como iotInstanceId = "".

clientId

O ID do cliente. Defina este ID, que pode ter até 64 caracteres. Recomendamos o uso de um identificador exclusivo, como UUID, endereço MAC ou endereço IP do servidor onde o cliente AMQP está localizado.

Após conectar e iniciar o cliente AMQP, faça login no console do IoT Platform. Na aba Consumer Groups da página Message Forwarding > > > Server-side Subscription da instância, clique em View ao lado do grupo de consumidores. A página Consumer Group Details exibirá esse parâmetro, facilitando a identificação dos diferentes clientes.

client

Estabelece uma conexão entre o cliente AMQP e o IoT Platform: $client = new Client('ssl://${YourHost}:61614');

Para informações sobre o endpoint AMQP referente a ${YourHost}, consulte Visualizar e configurar endpoints de instância.

Resultados de exemplo

  • Sucesso: Uma mensagem de log semelhante à abaixo é retornada, indicando que o cliente AMQP se conectou ao IoT Platform e recebeu mensagens com êxito.

    $ 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
  • Falha: Uma mensagem de log semelhante à abaixo é retornada, indicando que o cliente AMQP não conseguiu se conectar ao IoT Platform.

    Use o log de erros para verificar seu código e as configurações de rede. Corrija o problema e execute o código novamente.

    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

Corpo de mensagem binária

Como o STOMP é um protocolo baseado em texto, use um parâmetro de codificação Base64 para transmitir dados binários. Sem essa codificação, os corpos das mensagens podem ser truncados.

Adicione o parâmetro encode=base64 ao userName conforme mostrado abaixo. Dessa forma, o servidor codificará o corpo da mensagem em Base64 antes de enviá-la.

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

Referências

Para mais informações sobre códigos de erro relacionados a mensagens de assinatura do lado do servidor, consulte Códigos de erro relacionados a mensagens.