phpmqttphpmqtt

I tried to connect MQTTS with my HTTPS server but it didn't work. It works fine on MQTTX but with PHP it doesn't connect


I tried to connect MQTTS with my HTTPS server but it didn't work. It works fine on MQTTX but with PHP it doesn't connect.

<?php 

$server   = 'myServer';
$port     = '8883';
$clientId = 'testing';
$username = 'XXXX';
$password = 'XXXX';
$clean_session = false;

$connectionSettings  = new ConnectionSettings();
$connectionSettings->setUsername($username)
    ->setPassword($password)
    ->setKeepAliveInterval(60)
    ->setLastWillTopic('mytopic')
    ->setLastWillMessage('client disconnect')
    ->setLastWillQualityOfService(1);

$mqtt = new MqttClient($server, $port, $clientId);
$mqtt->connect($connectionSettings, $clean_session);

$mqtt->subscribe('mytopic/respond', function ($topic, $message) use ($mqtt) {
    echo $message;
}, 2);

$mqtt->close();
$mqtt->interrupt();
?>

How to connect MQTTS with PHP.


Solution

  • For connecting MQTTS we need to add three additional params into the connectionSettings

    ->setUseTls(true)
    ->setTlsSelfSignedAllowed(true) // Allow self-signed certificates. Discouraged for production use.
    ->setTlsVerifyPeer(false)           // Do not require the self-signed certificate to match the host. Discouraged.
    

    https://github.com/php-mqtt/client-examples/blob/master/03_connection_settings/02_use_tls_without_client_certificate.php

    <?php 
    
    $server   = 'myServer';
    $port     = '8883';
    $clientId = 'testing';
    $username = 'XXXX';
    $password = 'XXXX';
    $clean_session = false;
    
    $connectionSettings = (new ConnectionSettings)
        ->setUsername($username)
        ->setPassword($password)
        ->setKeepAliveInterval(60)
        ->setLastWillTopic('mytopic')
        ->setLastWillMessage('client disconnect')
        ->setUseTls(true)
        ->setTlsSelfSignedAllowed(true) // Allow self-signed certificates. Discouraged for production use.
        ->setTlsVerifyPeer(false)           // Do not require the self-signed certificate to match the host. Discouraged.
        ->setLastWillQualityOfService(1);
    
    $mqtt = new MqttClient($server, $port, $clientId);
    $mqtt->connect($connectionSettings, $clean_session);
    
    $mqtt->subscribe('mytopic/respond', function ($topic, $message) use ($mqtt) {
        echo $message;
    }, 2);
    
    $mqtt->close();
    $mqtt->interrupt();
    ?>