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

mengkun 35.7K 80

论文初稿总算完成了,趁着这个当儿更新一波~[aru_40]

这次停更的时间好像确实长了点,以至于评论区都出现了暴躁老哥[aru_27]

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

[aru_55]好了,下面切入正题……

关于闲聊么

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

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

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

接入文档

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

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

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合成方法是这样的[aru_129]:

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

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

使用SHA512加密后生成的xlm_hash是:
750825d2ae30419526d47db7bd2f49bd0abdf89f5b2f6591bad5b484e1c9ac56f3a23ac5a521f3eec4e73bfc3aea8d815d7a20964f4eac93dfa44d1e3e975f0e
(注意全为小写)

非常浅显易懂有木有[aru_160]

在 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();

?>

调用方法

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

例如——

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

常见问题

如何去广告

闲聊么后台 > 网站管理 > 盈利面板 > 暂停盈利功能。

如何创建房间

先在页面中引入官方原版的闲聊么代码,也就是需要登录账号使用的那个。登录你自己的管理账号,然后在闲聊么后台 > 网站管理 > 管理设定 将你的账号设为管理员账号,就可以在前台使用禁言、创建房间等功能了。

在线演示

可以前往孟坤工具箱留言板体验或直接在下方测试~[aru_31]

(一起来愉快地聊天吧~)

文末彩蛋

最近友言宣布关停评论框服务,现在畅言是一家独大了,然后就……给评论框里强制加上了广告[aru_40]

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

下面教大家一招去除评论广告,无需99开会员![aru_36]请叫我雷锋~

<style>
#feedAv, .section-service-w {
    width: 0!important;
    height: 0!important;
    overflow: hidden!important;
    position: fixed!important;
    left: -9999999px!important;
    top: -9999999px!important;
}
</style>

*注:以上方法不保证长期有效……

后记

博主今年毕业,现在各种毕业手续论文啥的真的忙不过来[aru_72]……博客以及其它网站项目还会继续继续继续保持停更或缓慢更新,最迟六月底恢复正常。还请谅解一哈[aru_63]

发表评论 取消回复
表情 图片 链接 代码

  1. 时光本无罪
    时光本无罪 Lv 1

    闲聊么 彻底S了,已弃用

  2. 蟹老板
    蟹老板 Lv 1

    评论区怎么做的

  3. RYlo
    RYlo Lv 1

    为什么我安装站长的代码设置后,整个主页变成了空白?(标题闲聊么,使用wordpress5.4)
    已经改回去了(幸好备了份[aru_1])

  4. 魔盒君
    魔盒君 Lv 1

    闲聊么好像不能用了,不知道老哥有没有新的解决办法

  5. 时光本无罪
    时光本无罪 Lv 1

    貌似挂了

  6. 爱上云
    爱上云 Lv 1

    哈哈哈哈广告太难了 JS代码会被浏览器屏蔽HTML代码会被站长屏蔽

  7. Dianr
    Dianr Lv 1

    学习了[aru_1]

  8.  小萌
     小萌 Lv 1

    请问有谁知道,用上面的代码跑出来的,只有一个随机用户(管理员身份的),是我哪里弄漏了吗[aru_12]

  9. GS
    GS Lv 1

    我的聊天室里面的用户名全是乱码!例如%C4%E4%C3%FB_93170166

  10. 傻屌
    傻屌 Lv 1

    已经八月底了,很期待你的干货,却迟迟不见

  11. 萌新
    萌新 Lv 1

    大佬 手机版的 怎么更改 我纯正的小白

  12. ax
    ax Lv 1

    楼主我的配置后打开是空白页

  13. ---- ん ☆物ミ
    ---- ん ☆物ミ Lv 1

    大佬, 查看图片 我的引入方式为<iframe src="http://自己网站/xianliao/xianliaome.php" height="500" width="100%" frameborder="1"></iframe> 也改了php: 查看图片 但是还是这样是怎么回事呢? 查看图片

    • mengkun
      mengkun 站长

      @---- ん ☆物ミ仔细检查下是否少复制了代码
      还不行的话把服务器的 显示 PHP 详细错误 打开,就知道哪里有问题了,不知道怎么打开详细错误可以百度搜索

  14. ---- ん ☆物ミ
    ---- ん ☆物ミ Lv 1

    查看图片
    请问大佬只放入这个代码吗?不需要在HTMl里加其他东西了?

  15. 投光灯
    投光灯 Lv 1

    畅言是越来越恶心了。

  16. 9999
    9999 Lv 1

    你好啊

  17. stonex
    stonex Lv 1

    萌新请教下,怎么把电脑端的 改成 匿名聊天呢? 谢谢

    • mengkun
      mengkun 站长

      @stonex先动手试

      • stonex
        stonex Lv 1

        @mengkun手机我弄好了,就想改成电脑短的,测试了,网站打不开,所以就来请教呢,我不懂网站代码,闲聊是百度知道的

    • ---- ん ☆物ミ
      ---- ん ☆物ミ Lv 1

      @stonex能教教我手机端怎么实现匿名吗?[aru_15]

      •  小萌
         小萌 Lv 1

        @---- ん ☆物ミ同求,我也是试了[aru_15],但是我只有随机一个用户,就是管理员的,尴尬

  18. 极乐博客
    极乐博客 Lv 1

    学习了,很受教!(正常打字,提示我回复太快......[aru_2])

  19. 极乐博客
    极乐博客 Lv 1

    学习了,很受教!

  20. 8566666666577
    8566666666577 Lv 2

    查看图片
    请问一下大佬这一块是怎么实现的呢? headroom也没看明白?

  21. L
    L Lv 1

    膜拜大佬[aru_3]

  22. Page
    Page Lv 1

    没有看懂,咋改头像?[aru_2]

  23. 罗小黑
    罗小黑 Lv 1

    打开聊天框是空白,什么也没有,这是什么情况

  24. 266277
    266277 Lv 4

    先在页面中引入官方原版的闲聊么代码,咋整捏没搞[aru_34]懂

  25. 266277
    266277 Lv 4

    博主帮我撤回我说的那句话

  26. 266277
    266277 Lv 4

    对于打广告管理有权限操作吗

分享