php如何开发网易云信消息抄送功能之聊天室消息保存到本地数据库

 PHP   高蒙   阅读(2249)   评论(0)   2016-07-07 17:49:22    网易云信 云信api 网易云信消息抄送 php开发 网易云信api 聊天室消息 


在开发APP时,需要使用到即时通讯功能。这里选择了网易云信。我们要将开发消息抄送功能,并且将聊天室的消息保存到本地的数据库中。其他的比如P2P聊天消息,群组聊天消息,群组操作,好友操作等消息,我这里就不多赘述了。其实,代码都差不多,只要把字段对应上即可。好的,下面我们看看网易云信api消息抄送功能怎么开发并且将聊天室消息保存到本地数据库中。想了解更多的开发功能。在网站中直接搜索[网易云信]关键字,即可找到相应的文章。

第一步:我们要在网易云信的管理后台开通消息推送的功能。

开启的步骤:登录后台 -> 应用 -> 服务管理 -> 服务配置 -> 消息抄送配置 -> 在消息抄送地址的地方填写你的接口地址。

第二步:在接口文件里面编写接收的代码。

通过查看网易云信的手册我们可以发现,它是通过http发送,消息的内容在request body里面。所以,我们这里要抓到请求过来的数据,

然后写入到数据库中。代码如下:

/*
* 云信消息抄送接口
*/
public function receiveMsg()
{
$body = @file_get_contents('php://input');
$data = json_decode($body,true);         // 值得注意 true
//file_put_contents('/debug.txt',$body); // 测试有没有接收到数据,很实用哦
if($data){
    $d['eventType']       = $data['eventType'];
    $d['attach']          = $data['attach'];
    $d['ext']             = $data['ext'];
    $d['fromAccount']     = $data['fromAccount'];
    $d['fromAvator']      = $data['fromAvator'];
    $d['fromClientType']  = $data['fromClientType'];
    $d['fromExt']         = $data['fromExt'];
    $d['fromNick']        = $data['fromNick'];
    $d['msgTimestamp']    = $data['msgTimestamp'];
    $d['msgType']         = $data['msgType'];
    $d['msgidClient']     = $data['msgidClient'];
    $d['resendFlag']      = $data['resendFlag'];
    $d['roleInfoTimetag'] = $data['roleInfoTimetag'];
    $d['roomId']          = $data['roomId'];
    $d['antispam']        = $data['antispam'];
    $info = M('receivemsg')->add($d);
    if($info){
       echo 200;   // 要有返回值 200 没有200 云信会在此的发送 具体看说明文档
    }
}else{
    echo 500;
}
}


上面的方法就可以接收到云信服务器发送给我们的聊天室的消息,我用的是thinkphp,所以加入数据库的操作,与其他的框架有点出入,可以自行修改。

好的。使用php开发网易云信api消息抄送功能并且聊天室消息保存到本地就到此为止了,有兴趣可以接着往下看,肯定有收获。

剖析:

为什么我上面要使用这行代码:$data = json_decode($body,true);

我们来分析下,网易云信服务器给我们返回的都是啥。通过file_put_contents函数我们得到,网易云信服务器给我们发送的json数据。

格式为:

{"attach":"[哈哈][哈哈][哈哈] ","eventType":"4","fromAccount":"liyasong","fromAvator":"","fromClientType":"IOS","fromExt":"","fromNick":"liyasong","msgTimestamp":"1467871787806","msgType":"TEXT","msgidClient":"beb0da49-f78e-4dc5-af14-08ae7d19ad1f","resendFlag":"0","roleInfoTimetag":"1467871784503","roomId":"3542370"}

一、通过json_decode($body)解码之后得到的是stdClass Object对象。

stdClass Object
(
    [attach] => [哈哈][哈哈][哈哈] 
    [eventType] => 4
    [fromAccount] => liyasong
    [fromAvator] => 
    [fromClientType] => IOS
    [fromExt] => 
    [fromNick] => liyasong
    [msgTimestamp] => 1467871787806
    [msgType] => TEXT
    [msgidClient] => beb0da49-f78e-4dc5-af14-08ae7d19ad1f
    [resendFlag] => 0
    [roleInfoTimetag] => 1467871784503
    [roomId] => 3542370
)

5.png

二、通过json_decode($body,true)解码得到的结果为数组。

Array
(
    [attach] => [哈哈][哈哈][哈哈] 
    [eventType] => 4
    [fromAccount] => liyasong
    [fromAvator] => 
    [fromClientType] => IOS
    [fromExt] => 
    [fromNick] => liyasong
    [msgTimestamp] => 1467871787806
    [msgType] => TEXT
    [msgidClient] => beb0da49-f78e-4dc5-af14-08ae7d19ad1f
    [resendFlag] => 0
    [roleInfoTimetag] => 1467871784503
    [roomId] => 3542370
)

6.png

我们要将得到的聊天室消息保存到本地数据库,所以得到数组是最好的处理的。通过得到的数据,我们将值对应的写入到我们的数据库中即可。

拓展:

json_decode

PHP json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量。
语法
mixed json_decode ($json [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
参数
json_string: 待解码的 JSON 字符串,必须是 UTF-8 编码数据
assoc:       当该参数为 TRUE 时,将返回数组,FALSE 时返回对象。
depth:       整数类型的参数,它指定递归深度
options:     二进制掩码,目前只支持 JSON_BIGINT_AS_STRING 。

数据表

CREATE TABLE `receivemsg` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `eventType` varchar(4) DEFAULT '4' COMMENT '值为4,表示是聊天室消息',
  `attach` tinytext COMMENT '消息内容',
  `ext` tinytext COMMENT '第三方扩展字段, 格式不限,长度限制4096,字符串类型',
  `fromAccount` varchar(10) DEFAULT '' COMMENT '消息发送者的账号',
  `fromAvator` varchar(100) DEFAULT '' COMMENT '发送者的头像',
  `fromClientType` varchar(10) DEFAULT '' COMMENT '客户端类型: AOS、IOS、PC、WINPHONE、WEB、REST',
  `fromExt` varchar(255) DEFAULT '' COMMENT '发送者身份的扩展字段,开发者可以自定义',
  `fromNick` varchar(40) DEFAULT '' COMMENT '发送方昵称',
  `msgTimestamp` varchar(15) DEFAULT '' COMMENT '消息发送的时间戳',
  `msgType` varchar(15) DEFAULT '',
  `msgidClient` varchar(40) DEFAULT '' COMMENT '客户端生成的消息id',
  `resendFlag` tinyint(2) DEFAULT '0' COMMENT '重发标记:0不是重发, 1是重发',
  `roleInfoTimetag` varchar(15) DEFAULT '' COMMENT '消息发送者用户名片的最后更新时间,可转为Long型数据',
  `roomId` int(10) DEFAULT NULL COMMENT '消息所属的聊天室id,可转为Long型数据',
  `antispam` varchar(6) DEFAULT '' COMMENT '标识是否被反垃圾,仅在被反垃圾时才有此字段,可转为Boolean类型数据',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8 COMMENT='聊天室消息表';





相关文章



我要评论


站长昵称:(*)

输入内容:


评论列表


高蒙

男,程序猿一枚

 

人生要是没有理想, 那跟一条咸鱼有什么分别。


关于我

  http://www.shuchengxian.com

高蒙个人博客是以PHP技术为主的程序员个人博客。博客主要发布php开发中遇到的问题以及解决办法,同时个人博客也分享网站模板素材,jquery插件等方面素材。


站点声明:相关侵权、举报、投诉及建议等,请发E-mail:936594075#qq.com(#替换成@)。

Copyright © 2018, www.shuchengxian.com, All rights reserved. 个人博客皖公网安备 34152302000022号 皖ICP备15015490号

关键词:个人博客,PHP博客,PHP博客程序,高蒙博客,高蒙个人博客,php程序员博客,程序员个人博客