上云无忧 > 文档中心 > 环信MQTT消息云服务使用教程 - 消息收发(PHP服务端)
MQTT消息云服务
环信MQTT消息云服务使用教程 - 消息收发(PHP服务端)

文档简介:
本文介绍PHP服务端通过调用环信MQTT消息云REST API接口快速实现消息下发,使用时可参阅REST 发送消息接口介绍。 1. 前提条件: 1.1 获取服务器信息。 调用环信MQTT消息云 REST API接口前,需要获取四个配置信息,包括:应用clientID、应用clientSecret、REST API地址及应用ID。
*此产品及展示信息均由环信官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

本文介绍PHP服务端通过调用环信MQTT消息云REST API接口快速实现消息下发,使用时可参阅REST 发送消息接口介绍

1.1 获取服务器信息

调用环信MQTT消息云 REST API接口前,需要获取四个配置信息,包括:应用clientID应用clientSecretREST API地址应用ID
1、应用clientID:从环信console【应用概览】→【应用详情】→【开发者ID】下 “client ID”获取;
2、应用clientSecret:从环信console【应用概览】→【应用详情】→【开发者ID】下“clientSecret”获取;
3、RSET API地址:从环信console【MQTT】→【服务概览】→【服务配置】下“REST API地址”获取;
4、应用ID:从环信console【MQTT】→【服务概览】→【服务配置】下“AppId”获取;


注:本代码对消息体内容进行GBK转码,可支持语音播报(适用于扬声器播放中文内容),如不需要此场景使用,可根据需求设置转码格式。

 'XXXXXX',
    'client_id' => 'XXXXXX',
    'client_secret' => 'XXXXXX',
    'app_id' => 'XXXXXX',
];

// 实时 token
 $accessToken = get_access_token();

// 固定值,有有效期
//$accessToken = 'YWMtiftbBF7sEeyeASnTGg_ZZCGtXR4YNTAxtZpP1MjdlZbv64ppqWZOEI663pDy48tKAgMAAAF9xoO
lvAWP1ADm__IWx_b4TLJvCb9axcY6cNImjMXJcx1ty7UK-Ked2w';

// 发送消息
$message = [
    'type' => 'tts_dynamic',
    'msgid' => 'c1b5d5f46092d4c01a5f422ae2b9ad41188',
    'txt' => '测试测试'
];
var_dump(send(['861714050059769'], $message));

/**
 * @description: 获取 Token
 * @return {String}
 */
function get_access_token()
{
    global $config;
    $uri = $config['rest_uri'] . '/openapi/rm/app/token';
    $body = [
        'appClientId' => $config['client_id'],
        'appClientSecret' => $config['client_secret'],
    ];
    $headers = [
        'Content-Type' => 'application/json',
    ];
    $ret = json_decode(curl_request($uri, $body, $headers), true);
    return isset($ret['code']) && $ret['code'] == 200 ? $ret['body']['access_token'] : $ret;
}

/**
 * @description: 发送消息
 * @param {array} $topics 要发消息的主题数组
 * @param {mixed} $message 要发送的消息内容
 * @param {String} $deviceID deviceID 用户自定义
 * @return {array}
 */
function send($topics, $message, $deviceID = '12')
{
    global $config, $accessToken;
    $uri = $config['rest_uri'] . '/openapi/v1/rm/chat/publish';
    $body = [
        'topics' => $topics,
        'clientid' => "{$deviceID}@{$config['app_id']}",
        'payload' => base64_encode(iconv("UTF-8", "GBK", json_encode($message, JSON_UNESCAPED_UNICODE))),
        'encoding' => 'base64',
    ];
    
    $headers = [
        'Content-Type' => 'application/json',
        'Authorization' => $accessToken,
    ];
    $ret = json_decode(curl_request($uri, $body, $headers), true);
    return $ret;
}

/**
 * @description: 查看消息
 * @param {String} $messageId 指定的消息ID
 * @return {array}
 */
function show($messageId)
{
    global $config, $accessToken;
    $uri = $config['rest_uri'] . '/openapi/rm/message/message?messageId=' . $messageId;
    $headers = [
        'Content-Type' => 'application/json',
        'Authorization' => $accessToken,
    ];
    $ret = json_decode(curl_request($uri, null, $headers), true);
    if (isset($ret['code']) && $ret['code'] == 200) {
        $ret['body']['message'] = json_decode(iconv('GBK', 'UTF-8', base64_decode($ret['body']['message'])), true);
        return $ret['body'];
    }
    return $ret;
}

function curl_request($url, $data = null, $headers = null)
{
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    // CURLOPT_HEADER => true,             // 将头文件的信息作为数据流输出
    // CURLOPT_NOBODY => false,            // true 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 false 时不会变成 GET。
    // CURLOPT_CUSTOMREQUEST => $request->method,  // 请求方法
	if(!empty($data)){
		curl_setopt($ch, CURLOPT_POST, 1);
        if (is_array($data)) {
            $data = json_encode($data);
        }
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	}
    if(!empty($headers)){
        curl_setopt($ch, CURLOPT_HTTPHEADER, buildHeaders($headers));
    }
	$output = curl_exec($ch);
    // $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    // $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
	curl_close($ch);
	return $output;
}

function buildHeaders($headers)
{{{:playground:message:微信交流群.jpeg?200|}}
    $headersArr = array();
    foreach ($headers as $key => $value) {
        array_push($headersArr, "{$key}: {$value}");
    }
    return $headersArr;
}


  • 如果您在使用MQTT服务中,有任何疑问和建议,欢迎您联系我们。

相似文档
  • 本文介绍Python服务端通过调用环信MQTT消息云 REST API接口快速实现消息下发,使用时可参阅REST 发送消息接口介绍。 1. 前提条件: 1.1 获取服务器信息。 调用环信MQTT消息云 REST API接口前,需要获取四个配置信息,包括:应用clientID、应用clientSecret、REST API地址及应用ID。
  • 在使用MQTT客户端收发消息前,需根据MQTT所支持的开发语言下载对应SDK。 MQTT服务默认支持标准的MQTT 3.1.1和MQTT 5.0协议,理论上能够适配所有的MQTT客户端,但不排除部分MQTT客户端存在细节上的兼容性问题。 针对MQTT的常用开发语言,推荐对应的第三方SDK如下表所示,开发者在集成时需要选择及维护适配的SDK:
  • 环信MQTT消息云提供云端API接口,遵循REST体系结构,服务端应用可以直接调用,与环信MQTT消息云进行消息交互。 获取应用Token:当不通过SDK,直接调用openAPI接口时,需要在头部'Authorization'参数设置, 应用Token,本接口即可获取应用Token。
  • 们在 Github 和Gitee已经提供了完整的 Demo源码,大家可以根据需要自行下载。 话题聊天室:大型在线聊天室,通过环信MQTT实现统计在线人数、发送弹幕、触发点赞、实时更新排行等功能。Android、iOS、Web。 实时图表:实时数据图表,通过环信MQTT实现数据实时传输、多终端数据同步(增长值、在线人数)。Android、iOS、Web。
  • 概述: 本文主要列举使用服务时遇到的常见问题,列举如下: 业务开通: 注册后无法开通MQTT业务? 客户端集成: 哪些开发语言支持集成MQTT客户端? 小程序是否支持集成MQTT客户端? 安卓端如何集成MQTT客户端? iOS端如何集成MQTT客户端? Java端如何集成MQTT客户端? Web端如何集成MQTT客户端?
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部