应用开启聊天记录查询签名,根据文档获取应用内所有聊天记录2 ,实现如下

$time=time()*1000;
$url="https://leancloud.cn/1.1/rtm/messages/logs";
$sign= md5($time.$appKey).",".$time;
$headers=[
    'X-LC-Id: '.$appId,
    'X-LC-Sign: '.$sign,
    'Content-Type: application/json'
];
list($code,$result)=sendPost($url,$headers,'','GET');
print_r($result); //1
echo "*********************************************************************\n";
$sign= md5($time.$appSecret).",".$time.",master";
$headers=[
    'X-LC-Id: '.$appId,
    'X-LC-Sign: '.$sign,
    'Content-Type: application/json'
];
list($code,$result)=sendPost($url,$headers,'','GET');
print_r($result); //2

结果,在未开启聊天记录查询签名认证下,1,2都可返回数据。在开启的情况下,1,2均提示签名错误,可是根据上述文档2应该正确返回数据。

聊天记录签名是要用Hmac-sha1 算法构造好后以参数的形式传递,如:

$sig = hash_hmac("sha1", "{appId}:{peerId}...", $masterKey);
// GET https://leancloud.cn/1.1/rtm/messages/logs?signature=$sig&peerid=...

你好,这里**聊天记录的签名**您应该不需要开启,这个功能主要是针对早期版本获取聊天记录的权限问题设计的,您获取整个应用的聊天记录提供 master key 或者 master key 做的 sign 即可

我上文提到的,在未开启聊天记录签名下使用appKey即可获取应用内所有聊天记录,这个是不太合理的吧?

这里确实和文档描述不一致,我们会尽快确认修复

经过测试,获取应用内的聊天记录,其签名是计算方式是 计算字符串hmac-sha1 appId:::nonce:timestamp

这个问题我昨天也遇到了,跟技术人员沟通好了,他们修改了一下验证方式,这个接口使用第一楼的代码就可以获取到数据,也就是header设置一下X-LC-Id和X-LC-Sign就可以,不需要其他参数。