将“闲聊么”改造成匿名聊天室

关于闲聊么

之前的文章早已有介绍,详见“闲聊么”给你的网站加上一个聊天框

不过啊,它有一个致命的弱点,必须注册登录才能参与聊天。对于小网站来说,很是鸡肋。一般人看到这么麻烦就放弃参与聊天了。

好在,它提供了一个接入用户体系的API,利用这个API,可以模拟出一个“已登录用户”,以此实现免登录匿名聊天。

接入文档

先仔细研究一下闲聊么的接入文档,这里拿相对简单的移动版接入方式来开刀

要想接入移动版,只需调用以下链接即可:

https://xianliao.me/s/10708?mobile=1&uid={登录用户的ID}&username={登录用户的用户名,需要做URI encode}&avatar={登录用户的头像URL,需要做URI encode}&ts={当前的Linux timestamp}&token={xlm_hash}

其中,ID、用户名、用户名都很好伪造,弄一个数组,然后从中随机抽取即可。

用 PHP 获取 Linux 时间戳也不难,直接使用time()函数就行。

关键点在于xlm_hash的合成。

官方给出的xlm_hash合成方法是这样的:

将字符串 '[网站ID]_[用户ID]_[当前的Linux timestamp]_[SSO密匙]' 用SHA512加密生成

例如:
用户ID为: 1; 现在时刻是: 1481673726; 那么要加密的字符串是:
10708_1_1481673726_TvFfXfTgKJXfoYucFwVqzqU7dwKFnbdL

使用SHA512加密后生成的xlm_hash是:
750825d2ae30419526d47db7bd2f49bd0abdf89f5b2f6591bad5b484e1c9ac56f3a23ac5a521f3eec4e73bfc3aea8d815d7a20964f4eac93dfa44d1e3e975f0e

(注意全为小写)

非常浅显易懂有木有

在 PHP 中,SHA512加密的方法如下:

hash('sha512', '原始字符串')

完整代码

这里随机的用户信息来自第三方 API(https://uinames.com/)用以确保“随机”出来的用户不会产生重复。

为了方面访客在下次打开时还以之前的随机身份参与聊天,可以将生成的用户信息存储到浏览器 COOKIE 中。

完整的代码如下:

<?php
/**
 * 将“闲聊么”改造成匿名聊天室
 * 作者:孟坤博客
 * 原文地址:https://mkblog.cn/1523/
 * !!!转载请务必保留以上信息!!!
 */
 
$web_id = '请在此处填写闲聊么网站 ID';      // 网站ID
$sso_key = '请在此处填写闲聊么网站 SSO_KEY';  // SSO_KEY
 
/***************************************************************/
 
// 检测网站ID以及SSO_KEY是否设置
if(!$web_id || !$sso_key) die('请设置网站ID以及SSO_KEY!');
 
// 获取模拟用户信息
if(isset($_COOKIE['xlm_uid'])) {    // 从 COOKIE 中读取到了用户信息
    $uid = $_COOKIE['xlm_uid'];
    $uname = isset($_COOKIE['xlm_uname'])? $_COOKIE['xlm_uname']: '匿名_'.$uid;
    $upic = isset($_COOKIE['xlm_upic'])? $_COOKIE['xlm_upic']: 'https://unsplash.it/100/100?random';
} else {
    // 获取随机的用户名、性别、头像等信息(利用第三方 API)
    $uinfo = file_get_contents('https://uinames.com/api/?region=england&ext');
    $uinfo = json_decode($uinfo, true);
    $uname = $uinfo['name'];
    $upic = $uinfo['photo'];
    $uid = rand(1, 999999999);  // 随机生成用户ID
    
    // 存储获取的用户信息到 COOKIE 中
    setcookie('xlm_uid', $uid, 0, '/');
    setcookie('xlm_uname', $uname, 0, '/');
    setcookie('xlm_upic', $upic, 0, '/');
} 
 
// 过滤特殊字符
$uid = urlencode(htmlspecialchars($uid));
$uname = urlencode(htmlspecialchars($uname));
$upic = urlencode(htmlspecialchars($upic));
 
// 获取时间戳
$time = time(); 
 
// 合成 Token
$token = $web_id.'_'.$uid.'_'.$time.'_'.$sso_key;
 
// 加密 Token,获得 xlm_hash
$xlm_hash = hash('sha512', $token);
 
// 合成聊天地址
$chat_url = 'https://xianliao.me/s/'.$web_id.'?mobile=1&uid='.$uid.'&username='.$uname.'&avatar='.$upic.'&ts='.$time.'&token='.$xlm_hash;
 
// 重定向至聊天页面地址
header('Location: '.$chat_url); 
die();
 
?>

网站ID和SSO_KEY需要去官网注册获取(官网地址:https://www.xianliao.me

调用方法

将上述代码保存至 PHP 文件中,然后用 iframe 的方法嵌入即可。

例如——

<iframe src="http://你的网站.com/xianliaome.php" height="500" width="100%" frameborder="0"></iframe>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值