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

mengkun 36.9K 80

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

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

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

好了,下面切入正题……

关于闲聊么

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

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

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

接入文档

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

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

HTML
  1. 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加密的方法如下:

PHP
  1. hash('sha512', '原始字符串')
复制 文本 高亮

完整代码

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

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

完整的代码如下:

PHP
  1. <?php
  2. /**
  3. * 将“闲聊么”改造成匿名聊天室
  4. * 作者:孟坤博客
  5. * 原文地址:https://mkblog.cn/1523/
  6. * !!!转载请务必保留以上信息!!!
  7. */
  8.  
  9. $web_id = '请在此处填写闲聊么网站 ID'; // 网站ID
  10. $sso_key = '请在此处填写闲聊么网站 SSO_KEY'; // SSO_KEY
  11.  
  12. /***************************************************************/
  13.  
  14. // 检测网站ID以及SSO_KEY是否设置
  15. if(!$web_id || !$sso_key) die('请设置网站ID以及SSO_KEY!');
  16.  
  17. // 获取模拟用户信息
  18. if(isset($_COOKIE['xlm_uid'])) { // 从 COOKIE 中读取到了用户信息
  19. $uid = $_COOKIE['xlm_uid'];
  20. $uname = isset($_COOKIE['xlm_uname'])? $_COOKIE['xlm_uname']: '匿名_'.$uid;
  21. $upic = isset($_COOKIE['xlm_upic'])? $_COOKIE['xlm_upic']: 'https://unsplash.it/100/100?random';
  22. } else {
  23. // 获取随机的用户名、性别、头像等信息(利用第三方 API)
  24. $uinfo = file_get_contents('https://uinames.com/api/?region=england&ext');
  25. $uinfo = json_decode($uinfo, true);
  26. $uname = $uinfo['name'];
  27. $upic = $uinfo['photo'];
  28. $uid = rand(1, 999999999); // 随机生成用户ID
  29. // 存储获取的用户信息到 COOKIE 中
  30. setcookie('xlm_uid', $uid, 0, '/');
  31. setcookie('xlm_uname', $uname, 0, '/');
  32. setcookie('xlm_upic', $upic, 0, '/');
  33. }
  34.  
  35. // 过滤特殊字符
  36. $uid = urlencode(htmlspecialchars($uid));
  37. $uname = urlencode(htmlspecialchars($uname));
  38. $upic = urlencode(htmlspecialchars($upic));
  39.  
  40. // 获取时间戳
  41. $time = time();
  42.  
  43. // 合成 Token
  44. $token = $web_id.'_'.$uid.'_'.$time.'_'.$sso_key;
  45.  
  46. // 加密 Token,获得 xlm_hash
  47. $xlm_hash = hash('sha512', $token);
  48.  
  49. // 合成聊天地址
  50. $chat_url = 'https://xianliao.me/s/'.$web_id.'?mobile=1&uid='.$uid.'&username='.$uname.'&avatar='.$upic.'&ts='.$time.'&token='.$xlm_hash;
  51.  
  52. // 重定向至聊天页面地址
  53. header('Location: '.$chat_url);
  54. die();
  55.  
  56. ?>
复制 文本 高亮

调用方法

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

例如——

HTML
  1. <iframe src="http://你的网站.com/xianliaome.php" height="500" width="100%" frameborder="0"></iframe>
运行 复制 文本 高亮

常见问题

如何去广告

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

如何创建房间

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

在线演示

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

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

文末彩蛋

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

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

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

HTML
  1. <style>
  2. #feedAv, .section-service-w {
  3. width: 0!important;
  4. height: 0!important;
  5. overflow: hidden!important;
  6. position: fixed!important;
  7. left: -9999999px!important;
  8. top: -9999999px!important;
  9. }
  10. </style>
运行 复制 文本 高亮

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

后记

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

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

  1. 萌新
    萌新 Lv 1

    dalao,闲聊么加入了挖矿后台,敢问有清除的方法么

  2. 牧羊
    牧羊 Lv 1

    博主,可以转载吗?会指名出处

  3. AKai
    AKai Lv 1

    学到了

  4. Lanny
    Lanny Lv 1

    测试下昵称

  5. 我们都爱Eason
    我们都爱Eason Lv 1

    支持

  6. mengkun
    mengkun 站长

    闲聊么当前已改版,但上述代码并未失效。

  7. 鹏翔
    鹏翔 Lv 1

    为嘛我还是得登录

  8. 1355471563
    1355471563 Lv 1
    Source Code
    1. printf("HELLO WORLLD");
    复制 文本 高亮


  9. 房东的猫
    房东的猫 Lv 1

    为什么我像你这么弄 那个房间不知道怎么创建。我找遍了都没有找到怎么创建。

  10. 明月清风
    明月清风 Lv 4

    不错,这东西可以用来讨论博客文章。哈哈哈!

  11. Fenn
    Fenn Lv 1

    根据你的方法,我把插件改了一下,也不用注册用户,还可以。感谢,另外,我把贵站已经添加友联。 查看图片

  12. 皮皮豪icon
    皮皮豪icon Lv 1

    彩蛋代码加在哪

  13. 宇峰
    宇峰 Lv 1

    请问为什么有广告?这个广告怎么去除呢?你的在线演示没有广告吧,麻烦告知一下

  14. 橙子VIP视频
    橙子VIP视频 Lv 1

    博主,你的电影站主题被人扒了!

  15. 小坤坤
    小坤坤 Lv 1

    小坤坤毕业了?

  16. SONG
    SONG Lv 1

    博主,你的影视源码还出售吗?

  17. kissrain
    kissrain Lv 1

    请问怎么分不同的聊天室?

    • mengkun
      mengkun 站长

      @kissrain在聊天窗口里登录你自己的管理账号,然后前台会有管理面板可以设置

  18. 官仁博客
    官仁博客 Lv 1

    添加并安装了代码,修改好了ID和KEY之后,发现也是必须要登录才能发言~~奇怪很~~测试的地址是zcool.ml
    查看图片

    • mengkun
      mengkun 站长

      @官仁博客ssokey前面的“请”字是什么鬼?

      • 官仁博客
        官仁博客 Lv 1

        @mengkun~~哈 ,你一说才发现,之前检查好几遍都没注意~~。。那个打开的时候怎么有广告呢,我看你上面这个演示的没有广告

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

        @官仁博客我虽然没有请字,但网页显示php文件没法显示怎么办呐

  19. 猕猴
    猕猴 Lv 1

    爸爸为你感到骄傲 加油!

  20. I am i
    I am i Lv 1

    彩蛋很精彩

  21. 完美者
    完美者 Lv 5

    还差个功能

  22. 野人摊的分享
    野人摊的分享 Lv 2

    彩蛋在那里?为啥我没看到,难道彩蛋又有别意?

  23. 小白-白
    小白-白 Lv 2

    大一狗瑟瑟发抖

  24. 紫霄
    紫霄 Lv 1

    老孟,我刚毕业不久,你有出路么,俺跟你一起。/akaka

    • mengkun
      mengkun 站长

      @紫霄一起去天桥底下贴膜么

  25. 滔少
    滔少 Lv 1

    查看图片 如图 双引号在的

  26. 滔少
    滔少 Lv 1

    想知道为啥插进去后一片空白..设置好了的

    • mengkun
      mengkun 站长

      @滔少你的 xianliaome.php 文件中有错误。检查一下是不是设置 ID 和 KEY 的时候不小心把两边的英文引号给删了

  27. 陈鑫威博客
    陈鑫威博客 Lv 1

    彩蛋不错。

  28. 飞鱼
    飞鱼 Lv 1

    大佬有qq群嘛,我想进去学习学习

    • mengkun
      mengkun 站长

      @飞鱼QQ群当前仅针对博客付费用户开放。如购买主题即可加入主题交流群……

  29. cir
    cir Lv 1

    等你更新,,,,,

    • mengkun
      mengkun 站长

      @cir“我一定会回来的”勉强

  30. 龙笑天
    龙笑天 Lv 3

    你这彩蛋很6!