【分享】分享一个环信PHP 服务端方法封装类

问题描述

本帖最后由 hblzg123 于 2015-3-18 19:54 编辑 来源:http://www.shidaiwang.net/article/243 '', //你的信息 'client_secret' => '',//你的信息 'org_name' => '' ,//你的信息 'app_name' => '' ,//你的信息 );$e = new Easemob($options); $groupInfo = array( 'groupname' => 'leeef', 'desc' => 'leeff', // 'owner' => 'sy1'); $result = $e->getUserGroups('80983543'); //$result = $e->getGroupList(); //$result = $e->getGroupDetial("1423734662380237"); echo ""; print_r($result); /* * --------------强调说明------------- * 参数 数字int 最好填 String 如groupId 1423734662380237 ,传参时传getGroupDetial("1423734662380237"); */ class Easemob{ private $host = 'https://a1.easemob.com'; private $client_id ; private $client_secret; private $org_name; private $app_name ; private $token=''; /* * ------------------------ * 公共方法 开始 * ------------------------ */ /** * 初始化参数 * * @param array $options * @param $options * @param $options * @param $options * @param $options */ public function __construct($options) { $this->client_id = $options ; $this->client_secret = $options ; $this->org_name = $options ; $this->app_name = $options ; } private function request($api_name, $data, $method='POST') { //$data = array("name" => "Hagrid", "age" => "36"); if(isset($data)){ $data_string = json_encode($data); } $ch = curl_init($this->host . "/$this->org_name/$this->app_name/".$api_name); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); if(strtoupper($method)!='GET'){ curl_setopt($ch, CURLOPT_POSTFIELDS,$data_string); } curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE ); // 对认证证书来源的检查 curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE ); // 从证书中检查SSL加密算法是否存在 curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)' ); // 模拟用户使用的浏览器 curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', //'Accept: application/json', 'Authorization: Bearer '.$this->getToken() // 'Content-Length: ' . strlen($data_string) ) ); $result = curl_exec($ch); $result = json_decode($result, true); curl_close($ch); return $result; } /* * 取得TOKEN */ public function getToken($reGet=false) { if(!$this->token || $reGet == true){ $path = "/$this->org_name/$this->app_name/token"; $data = array( 'grant_type' => 'client_credentials', 'client_id' => $this->client_id, 'client_secret' => $this->client_secret ); $data_string = json_encode($data); $ch = curl_init($this->host . $path); curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt ($ch, CURLOPT_POSTFIELDS,$data_string); curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE ); // 对认证证书来源的检查 curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE ); // 从证书中检查SSL加密算法是否存在 curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)' ); // 模拟用户使用的浏览器 curl_setopt ($ch, CURLOPT_RETURNTRANSFER,true); curl_setopt ($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json')); $result = curl_exec($ch); $result_arr = json_decode($result, true); if(isset($result_arr)){ echo $result;exit; }else{ $this->token = $result_arr; } return $this->token; }else{ return $this->token; } } /* * ------------------------ * 公共方法 结束 * ------------------------ */ /* * ------------------------------------ * 群组方法 开始 * ------------------------------------ */ /* * 获取app中所有的群组 */ public function getGroupList() { $result = $this->request('chatgroups', '','GET'); return $result; } /* * 获取一个或者多个群组的详情 * $groupList mix String or Array * demo: $groupList = array('1423734662380237', '1423734662380238) */ public function getGroupDetial($groupList) { if(gettype($groupList) == 'array'){ $group_list = implode(',', $groupList); }else{ $group_list = $groupList; } $result = $this->request('chatgroups'.'/'.$group_list, '','GET'); return $result; } /* * * $groupInfo Array 群信息参数如下; "groupname":"testrestgrp12", //群组名称, 此属性为必须的 "desc":"server create group", //群组描述, 此属性为必须的 "public":true, //是否是公开群, 此属性为必须的 "maxusers":300, //群组成员最大数(包括群主), 值为数值类型,默认值200,此属性为可选的 "approval":true, //加入公开群是否需要批准, 没有这个属性的话默认是true(不需要群主批准,直接加入), 此属性为可选的 "owner":"jma1", //群组的管理员, 此属性为必须的 "members": //群组成员,此属性为可选的,但是如果加了此项,数组元素至少一个(注:群主jma1不需要写入到members里面) * demo: * $groupInfo = array( 'groupname' => 'leee', 'desc' => 'leeff', 'owner' => 'sy1' ); */ public function createGroup($groupInfo) { $groupInfo = isset($groupInfo) ? $groupInfo : true; //默认公开 $groupInfo = isset($groupInfo) ? $groupInfo : false;//默认需要审核 $result = $this->request('chatgroups', $groupInfo, 'POST'); return $result; } /* * 更新群组信息 * @param $groupId int 群组id 必填 * $param $groupInfo array 群组信息 必填 * 参数说明: * $groupInfo = array( "groupname":"testrestgrp12", //群组名称 可选 "description":"update groupinfo", //群组描述 可选 "maxusers":300, //群组成员最大数(包括群主), 值为数值类型 可选 ) */ public function updateGroup($groupId, $groupInfo=array()) { $result = $this->request('chatgroups'.'/'.$groupId, $groupInfo ,'PUT'); return $result; } /* * 群组删除 * @param $groupId 必填 群组ID Stirng */ public function deleteGroup($groupId){ $result = $this->request('chatgroups'.'/'.$groupId,'', 'DELETE'); return $result; } /* * 获取群组用户 * @param $groupId 必填 群组ID Stirng */ public function getGroupUsers($groupId){ $result = $this->request('chatgroups'.'/'.$groupId.'/users','', 'GET'); return $result; } /* * 群组批量加人 * @param $groupId 必填 群组ID Stirng * @param $users 必填 用户名 mix(String,array) */ public function addGroupUsers($groupId, $users) { if(gettype($users) != 'array'){ $users[] = $users; } $data = $users; $result = $this->request('chatgroups'.'/'.$groupId.'/users', $data, 'POST'); return $result; } /* * 群组减人:从群中移除某个成员。 * @param $groupId 群组id 必填 String * @param $user 用户名 必填 String */ public function deleteGroupUser($groupId, $user) { $result = $this->request('chatgroups'.'/'.$groupId.'/users/'.$user, '', 'DELETE'); return $result; } /* * 获取一个用户参与的所有群组 * $user String 用户名 必填 */ public function getUserGroups($user){ $result = $this->request('users/'.$user.'/joined_chatgroups', '', 'GET'); return $result; } /* * ------------------------------------ * 群组方法 结束 * ------------------------------------ */}

时间: 2024-08-31 14:30:11

【分享】分享一个环信PHP 服务端方法封装类的相关文章

SDK2.2.1在应用推出时想stop 环信后台服务时会发生ANR.

问题描述 在试图stop环信后台服务时,抱错:08-10 22:29:24.261: W/ContextImpl(23097): Implicit intents with startService are not safe: Intent { act=com.EmChatService } android.content.ContextWrapper.stopService:538 com.nut.teamradar.TeamRadarApplication.onTerminate:68 co

请教一个环信有关Rest的问题:token有效期需要我们自己来判断吗?Token的有效期是多长时间?

问题描述 如题:请教一个环信有关Rest的问题:token有效期需要我们自己来判断吗?Token的有效期是多长时间? 解决方案 解决方案二:获取token的时候,服务器会把token字符串和有效期(expires_in)一起返回给您,token默认有效期为7天,您可以在获取到Token后再自己服务器做一个缓存,快到期后重新获取.有效期验证可以用当前时间戳减去获取到token的时间戳与token有效期进行对比(答案出自imgeek).解决方案三:回答很专业哦.受益匪浅!解决方案四:你取得token

一个环信应用可以注册多个推送证书吗

问题描述 本帖最后由 独孤求败 于 2015-2-27 14:39 编辑 一个环信应用可以注册多个推送证书吗? 解决方案 可以注册多个推送证书.

Winform 调用WCF客户端,所有服务端方法在运行的时候均找不到(编译没有问题)

  今天在开发过程中遇到了一个很恶心的问题,就是Form窗体ShowDialog的时候,直接报出下面的错误: 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ************** System.MissingMethodException: 找不到方法:"XXX.XXX.DataObject.SPI.DataObjectColumn[] XXX.XXX.WCFClient.WCFService.ServiceClient

环信后台服务被停止后无法收到消息的问题

问题描述 经测试,环信Android版的后台服务被金山清理**.360手机卫士等软件清理后,无法自动重启,从而导致无法接受到消息. 不知道这个问题有没有人有相应的解决方案,如何避免后台服务被清理或者说在后台服务被停止后能够及时重启 解决方案 这个第三方的清理会把服务清除,服务不存在就无法通信,根据不同的手机只能尽量去保证不被杀死,可以加一个守护进程

android 3.1.2,我去当前的conversation中去获取一条消息,报了一个环信的错,有点不明白是什么意思

问题描述 我通过一个msgId,通过conversation.getMessage(String msgId,boolean true)去获取会话中的这条消息,然后环信包里报了一个错误,不知道这是什么情况才引起的,麻烦帮忙看一下.java.lang.NullPointerException: Attempt to invoke virtual method 'long com.hyphenate.chat.adapter.message.EMAMessage.timeStamp()' on a

两个版本共用一个环信IM环境

问题描述 我们的APP有两个版本,老师版和学生版,那么问题是,推送证书要分别上传么?用户体系可以共用么?是不是要在环信后台要创建两个应用啊? 解决方案 可以共用体系.如果要两个APP实现通信的话,只要appkey一致就可以了.

用Ruby封装了一个环信 Rest API 的客户端

问题描述 目前只有常用的几个接口,其他接口会陆续加入.开源地址: https://github.com/RobotJiang/ruby-for-huanxin Gem地址:https://rubygems.org/gems/huanxin 欢迎贡献代码. 解决方案 非常赞啊解决方案二:支持解决方案三:支持,非常不错,点赞点赞

浏览器直接请求ashx一次,为什么向服务端方法走了两次

问题描述 在IE浏览器下是好的,google,火狐都会出现问题,请问大神是什么问题? 解决方案 解决方案二:,我奔着答案来着解决方案三:这是.页面代码的问题吧?解决方案四:首先你要确定,使用一个http调试器来确定,(各)浏览器到底是提交了两次还是一次?我说了很多次:不用调试器,提问题时贴不出调试器的画面,那就等于自己不动手找问题.等着别人来瞎猜.解决方案五:具体还是要看你的前台ajax的访问逻辑