阿里云php同步方式獲取mqtt消息

php服務(wù)端,下發(fā)消息到設(shè)備

<?php
header("Content-Type: text/html; charset=utf-8");
include_once './aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php';
use \Iot\Request\V20170420 as Iot;

//設(shè)置你的AccessKeyId,AccessSecret,ProductKey,
    $accessKeyId = "";
    $accessSecret = "";
    $ProductKey='';
    
    // 這倆傳過來就行
    $deviceName='';
    $DeviceSecret="";
    
    $iClientProfile = DefaultProfile::getProfile("cn-shanghai", $accessKeyId, $accessSecret);
    $client = new DefaultAcsClient($iClientProfile);
    
    // 發(fā)布消息到設(shè)備并同步返回?cái)?shù)據(jù)
    // 文檔: https://help.aliyun.com/document_detail/57241.html?spm=5176.doc57166.2.6.9sc6US

    function sendMsg($msg,$callback){
        global $client;
        global $ProductKey;
        global $deviceName;
        global $DeviceSecret;

        $request = new Iot\RRpcRequest();
        $request->setProductKey($ProductKey);
        $request->setDeviceName($deviceName);
        $request->setRequestBase64Byte(base64_encode($msg));
        $request->setTimeout(1000);
        $response =$client->getAcsResponse($request);
        // print_r(json_encode($response));
        //返回格式:{"MessageId":1,"RequestId":"123","PayloadBase64Byte":"base64格式","Success":true,"RrpcCode":"SUCCESS"}

        if($response&&$response->Success==true){
            $callback(json_decode(base64_decode($response->PayloadBase64Byte)));
        }else{
            // 返回錯誤消息
            echo '{"errno":-1,"msg":"獲取消息失敗"}';
        }
    }
    sendMsg('{"act":1,"channel":1,"Sn":1}',function($data){
                print_f($data);
    });
?>

node模擬設(shè)備端

var mqtt = require('mqtt');
var crypto = require('crypto'); //加密模塊
var device = {
    name: "",
    secret: ''
};
var timestamp = Date.now(); //時(shí)間戳
var obj = {
    productKey: '', //一個項(xiàng)目只有一個
    deviceName: device.name, //需要服務(wù)端 單獨(dú)/批量 注冊到阿里云侨核,
    clientId: device.name, //客戶端自表示Id,64字符內(nèi)撼唾,建議是MAC或SN
    timestamp: timestamp //時(shí)間戳
};

//---------以下部分生成sign---------------------//

var hmac = crypto.createHmac('sha1', device.secret.toString('ascii'));

function signFn(objs) {
    var arr = [];
    var str = '';
    for (const key in objs) {
        if (objs.hasOwnProperty(key)) {
            arr.push(key);
        }
    }
    arr.sort(); //按字母排序
    arr.map(function (d) {
        str += (d + objs[d]); //拼接為:keyvaluekeyvalue
    });
    hmac.update(encodeURI(str)); //添加需要的加密數(shù)據(jù)
    return hmac.digest('hex'); //加密,(hex表示16進(jìn)制)
}
var sign = signFn(obj);

//------以下部分連接mqtt-----------------------------//

var client = mqtt.connect(`mqtt://${obj.productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883`, {
    username: obj.deviceName + "&" + obj.productKey,
    password: sign,
    clientId: `${obj.clientId}|securemode=3,signmethod=hmacsha1,timestamp=${timestamp}|` //TCP直連模式hmacsha1加密
});

client.on('connect', function () {
    client.subscribe(`/sys/${obj.productKey}/${obj.deviceName}/rrpc/request/+`);//+號是通配符,表示消息id
    console.log('連接');
});

client.on('message', function (topic, message) {
    var msg = JSON.parse(message.toString());//  message 是 Buffer
    var msgId = topic.split('/').pop(); //需要從取topic中的消息id
    
    console.log('topic:', topic);
    console.log('消息id:', msgId);
    console.log('消息:',message.toString());
    
        var json=JSON.stringify({
            "act":3,
             "channel":msg.channel,
             "result":0,
             "Sn":12345
        });
        // 發(fā)布,消息id是變化的
        client.publish(`/sys/${obj.productKey}/${obj.deviceName}/rrpc/response/${msgId}`, json);

});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末齿兔,一起剝皮案震驚了整個濱河市撬码,隨后出現(xiàn)的幾起案子仔蝌,更是在濱河造成了極大的恐慌殴瘦,老刑警劉巖健盒,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挡育,死亡現(xiàn)場離奇詭異巴碗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)即寒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門橡淆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人母赵,你說我怎么就攤上這事逸爵。” “怎么了凹嘲?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵师倔,是天一觀的道長。 經(jīng)常有香客問我周蹭,道長趋艘,這世上最難降的妖魔是什么疲恢? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮瓷胧,結(jié)果婚禮上显拳,老公的妹妹穿的比我還像新娘。我一直安慰自己搓萧,他們只是感情好萎攒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著矛绘,像睡著了一般耍休。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上货矮,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天羊精,我揣著相機(jī)與錄音,去河邊找鬼囚玫。 笑死喧锦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抓督。 我是一名探鬼主播燃少,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铃在!你這毒婦竟也來了阵具?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤定铜,失蹤者是張志新(化名)和其女友劉穎阳液,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揣炕,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帘皿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了畸陡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹰溜。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丁恭,靈堂內(nèi)的尸體忽然破棺而出曹动,到底是詐尸還是另有隱情,我是刑警寧澤涩惑,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布仁期,位于F島的核電站,受9級特大地震影響竭恬,放射性物質(zhì)發(fā)生泄漏跛蛋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一痊硕、第九天 我趴在偏房一處隱蔽的房頂上張望赊级。 院中可真熱鬧,春花似錦岔绸、人聲如沸理逊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晋被。三九已至,卻和暖如春刚盈,著一層夾襖步出監(jiān)牢的瞬間羡洛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工藕漱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留欲侮,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓肋联,卻偏偏與公主長得像威蕉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子橄仍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理韧涨,服務(wù)發(fā)現(xiàn),斷路器侮繁,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • Composer Repositories Composer源 Firegento - Magento模塊Comp...
    零一間閱讀 3,960評論 1 66
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議氓奈。它實(shí)...
    香橙柚子閱讀 23,860評論 8 183
  • 好像有好幾年都沒有像今年這樣留意過秋天。 以前工作都是在室內(nèi)鼎天,秋天被關(guān)在窗外舀奶,還沒有來得及感受他的美,一眨眼就過去...
    薇薇安deStage閱讀 322評論 2 2
  • 無法交流是心里的傷 存在變成了負(fù)累 惶恐的流光散滿天際 緘口化為凌亂 街角咖啡屋彌散混響 一如破碎滿地的心 韶華夾...
    營州布衣閱讀 257評論 2 5