• 环信-(php)服务器端REST API


    <?php
    namespace HomeController;
    use ThinkController;
     
    /**
     * 环信-服务器端REST API
     * @author    limx <limx@xiaoneimimi.com>
     */
    class HXController extends Controller {
     
        private $client_id='YXA6ef0hcJSyEeWlQg0wFqthDQ';
        private $client_secret='YXA6dd1GuLATzkHcqqTI3OIgLExnOiI';
        private $org_name='ipa361';
        private $app_name='cg';
        private $url = 'https://a1.easemob.com/ipa361/cg/';
     
        /**
         * 初始化参数
         *
         * @param array $options
         * @param $options['client_id']
         * @param $options['client_secret']
         * @param $options['org_name']
         * @param $options['app_name']
         */
        /* public function __construct($options) {
            $this->client_id = isset ( $options ['client_id'] ) ? $options ['client_id'] : '';
            $this->client_secret = isset ( $options ['client_secret'] ) ? $options ['client_secret'] : '';
            $this->org_name = isset ( $options ['org_name'] ) ? $options ['org_name'] : '';
            $this->app_name = isset ( $options ['app_name'] ) ? $options ['app_name'] : '';
            if (! empty ( $this->org_name ) && ! empty ( $this->app_name )) {
                $this->url = 'https://a1.easemob.com/' . $this->org_name . '/' . $this->app_name . '/';
            }
        } */
        /**
         * 开放注册模式
         *
         * @param $options['username'] 用户名
         * @param $options['password'] 密码
         * 设置密码为账号+_ipa做加密运算
         */
        public function openRegister($username) {
            $options['username']=$username;
            //$tripldes =new TripledesModel();
            $tripldes =D("Tripledes");
            $pass= $tripldes->encrypt($username.'_ipa');
     
            $options['password']=$pass;
            //$options['password']=123456;
            $url = $this->url . "users";
            $result = $this->postCurl ( $url, $options, $head = 0 );
            //echo $result ;exit;
            $info = json_decode($result,true);
            //dump($info);
            //echo $info ;exit;
            if(isset($info['entities'])){
                return '1';
            }else{
                return '0';
            }
        }
     
        public function test(){
            $des =D("Tripledes");
     
            echo $ret = $des->encrypt("123") . "
    ";
            echo $des->decrypt($ret) . "
    ";
     
            $info = array(
                'msg'=>'成功',
                'code'=>200,
                'ret'=>$ret,
                'des'=>$des);
            echo json_encode($info);
     
        }
     
        /**
         * 授权注册模式 || 批量注册
         *
         * @param $options['username'] 用户名
         * @param $options['password'] 密码
         *          批量注册传二维数组
         */
        public function accreditRegister($options) {
            $url = $this->url . "users";
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, $options, $header );
            //return $result;
            echo $result;
        }
     
        /**
         * 获取指定用户详情
         *
         * @param $username 用户名
         */
        public function userDetails($username) {
            $url = $this->url . "users/" . $username;
            $access_token = $this->getToken ();
            //print_r($access_token);exit;
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = 'GET' );
     
            $info = json_decode($result,true);
            //print_r($info);
            if(isset($info['entities'])){
                return '1';
            }else{
                return '0';
            }
        }
     
        /**
         * 重置用户密码
         *
         * @param $options['username'] 用户名
         * @param $options['password'] 密码
         * @param $options['newpassword'] 新密码
         */
        public function editPassword($options) {
            $url = $this->url . "users/" . $options ['username'] . "/password";
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, $options, $header, $type = 'PUT');
            return $result;
        }
        /**
         * 删除用户
         *
         * @param $username 用户名
         */
        public function deleteUser($username) {
            $url = $this->url . "users/" . $username;
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = 'DELETE' );
        }
     
        /**
         * 批量删除用户
         * 描述:删除某个app下指定数量的环信账号。上述url可一次删除300个用户,数值可以修改 建议这个数值在100-500之间,不要过大
         *
         * @param $limit="300" 默认为300条
         * @param $ql 删除条件
         *          如ql=order+by+created+desc 按照创建时间来排序(降序)
         */
        public function batchDeleteUser($limit = "300", $ql = '') {
            $url = $this->url . "users?limit=" . $limit;
            if (! empty ( $ql )) {
                $url = $this->url . "users?ql=" . $ql . "&limit=" . $limit;
            }
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = 'DELETE' );
        }
     
        /**
         * 给一个用户添加一个好友
         *
         * @param
         *          $owner_username
         * @param
         *          $friend_username
         */
        public function addFriend($owner_username, $friend_username) {
            $url = $this->url . "users/" . $owner_username . "/contacts/users/" . $friend_username;
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header );
        }
     
        /**
         * 删除好友
         *
         * @param
         *          $owner_username
         * @param
         *          $friend_username
         */
        public function deleteFriend($owner_username, $friend_username) {
            $url = $this->url . "users/" . $owner_username . "/contacts/users/" . $friend_username;
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = "DELETE" );
        }
        /**
         * 查看用户的好友
         *
         * @param
         *          $owner_username
         */
        public function showFriend($owner_username) {
            $url = $this->url . "users/" . $owner_username . "/contacts/users/";
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = "GET" );
        }
        // +----------------------------------------------------------------------
        // | 聊天相关的方法
        // +----------------------------------------------------------------------
        /**
         * 查看用户是否在线
         *
         * @param
         *          $username
         */
        public function isOnline($username) {
            $url = $this->url . "users/" . $username . "/status";
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = "GET" );
            //return $result;
            echo $result;
        }
        /**
         * 发送消息
         *
         * @param string $from_user
         *          发送方用户名
         * @param array $username
         *          array('1','2')
         * @param string $target_type
         *          默认为:users 描述:给一个或者多个用户(users)或者群组发送消息(chatgroups)
         * @param string $content
         * @param array $ext
         *          自定义参数
         */
        function yy_hxSend($from_user = "admin", $username, $content, $target_type = "users", $ext) {
            $option ['target_type'] = $target_type;
            $option ['target'] = $username;
            $params ['type'] = "txt";
            $params ['msg'] = $content;
            $option ['msg'] = $params;
            $option ['from'] = $from_user;
            $option ['ext'] = $ext;
            $url = $this->url . "messages";
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, $option, $header );
            return $result;
        }
        /**
         * 获取app中所有的群组
         */
        public function chatGroups() {
            $url = $this->url . "chatgroups";
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = "GET" );
            return $result;
        }
        /**
         * 创建群组
         *
         * @param $option['groupname'] //群组名称,
         *          此属性为必须的
         * @param $option['desc'] //群组描述,
         *          此属性为必须的
         * @param $option['public'] //是否是公开群,
         *          此属性为必须的 true or false
         * @param $option['approval'] //加入公开群是否需要批准,
         *          没有这个属性的话默认是true, 此属性为可选的
         * @param $option['owner'] //群组的管理员,
         *          此属性为必须的
         * @param $option['members'] //群组成员,此属性为可选的
         */
        public function createGroups($option) {
            $url = $this->url . "chatgroups";
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, $option, $header );
            return $result;
        }
        /**
         * 获取群组详情
         *
         * @param
         *          $group_id
         */
        public function chatGroupsDetails($group_id) {
            $url = $this->url . "chatgroups/" . $group_id;
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = "GET" );
            return $result;
        }
        /**
         * 删除群组
         *
         * @param
         *          $group_id
         */
        public function deleteGroups($group_id) {
            $url = $this->url . "chatgroups/" . $group_id;
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = "DELETE" );
            return $result;
        }
        /**
         * 获取群组成员
         *
         * @param
         *          $group_id
         */
        public function groupsUser($group_id) {
            $url = $this->url . "chatgroups/" . $group_id . "/users";
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = "GET" );
     
            $info = json_decode($result,true);
     
            if(isset($info['data'])){
                return $info['data'];
            }else{
                return '0';
            }
            return $result;
        }
        /**
         * 群组添加成员
         *
         * @param
         *          $group_id
         * @param
         *          $username
         */
        public function addGroupsUser($group_id, $username) {
            $url = $this->url . "chatgroups/" . $group_id . "/users/" . $username;
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = "POST" );
            return $result;
        }
        /**
         * 群组删除成员
         *
         * @param
         *          $group_id
         * @param
         *          $username
         */
        public function delGroupsUser($group_id, $username) {
            $url = $this->url . "chatgroups/" . $group_id . "/users/" . $username;
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = "DELETE" );
            return $result;
        }
        /**
         * 聊天消息记录
         *
         * @param $ql 查询条件如:$ql
         *          = "select+*+where+from='" . $uid . "'+or+to='". $uid ."'+order+by+timestamp+desc&limit=" . $limit . $cursor;
         *          默认为order by timestamp desc
         * @param $cursor 分页参数
         *          默认为空
         * @param $limit 条数
         *          默认20
         */
        public function chatRecord($ql = '', $cursor = '', $limit = 20) {
            $ql = ! empty ( $ql ) ? "ql=" . $ql : "order+by+timestamp+desc";
            $cursor = ! empty ( $cursor ) ? "&cursor=" . $cursor : '';
            $url = $this->url . "chatmessages?" . $ql . "&limit=" . $limit . $cursor;
            $access_token = $this->getToken ();
            $header [] = 'Authorization: Bearer ' . $access_token;
            $result = $this->postCurl ( $url, '', $header, $type = "GET " );
            return $result;
        }
     
        //判断某个字段是否存在
        public function checkField($jsons){
            if($jsons->activated==true){
                print_r('11111');
                return true;
            }else{
                print_r('22222');
                return false;
            }
        }
     
        /**
         * 获取Token
         */
        public function getToken() {
            //print_r($url);exit;
            $option ['grant_type'] = "client_credentials";
            $option ['client_id'] = $this->client_id;
            $option ['client_secret'] = $this->client_secret;
            $url = $this->url . "token";
            $fp = @fopen ( "easemob.txt", 'r' );
            if ($fp) {
                $arr = unserialize ( fgets ( $fp ) );
                if ($arr ['expires_in'] < time ()) {
                    $result = $this->postCurl ( $url, $option, $head = 0 );
                    //$result ['expires_in'] = $result ['expires_in'] + time ();
                    @fwrite ( $fp, serialize ( $result ) );
                    $myArr=json_decode($result, true);
                    $token=$myArr['access_token'];
                    return  $token;
                    fclose ( $fp );
                    exit ();
                }
                return $arr ['access_token'];
                fclose ( $fp );
                exit ();
            }
            $result = $this->postCurl ( $url, $option, $head = 0 );
            $result = json_decode($result);
            $result ['expires_in'] = $result ['expires_in'] + time ();
            $fp = @fopen ( "easemob.txt", 'w' );
            @fwrite ( $fp, serialize ( $result ) );
            return $result ['access_token'];
            fclose ( $fp );
        }
     
        /**
         * CURL Post
         */
        private function postCurl($url, $option, $header = 0, $type = 'POST') {
            $curl = curl_init (); // 启动一个CURL会话
            curl_setopt ( $curl, CURLOPT_URL, $url ); // 要访问的地址
            curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE ); // 对认证证书来源的检查
            curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE ); // 从证书中检查SSL加密算法是否存在
            curl_setopt ( $curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)' ); // 模拟用户使用的浏览器
            if (! empty ( $option )) {
                $options = json_encode ( $option );
                curl_setopt ( $curl, CURLOPT_POSTFIELDS, $options ); // Post提交的数据包
            }
            curl_setopt ( $curl, CURLOPT_TIMEOUT, 30 ); // 设置超时限制防止死循环
            curl_setopt ( $curl, CURLOPT_HTTPHEADER, $header ); // 设置HTTP头
            curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回
            curl_setopt ( $curl, CURLOPT_CUSTOMREQUEST, $type );
            $result = curl_exec ( $curl ); // 执行操作
            //$res = object_array ( json_decode ( $result ) );
            //$res ['status'] = curl_getinfo ( $curl, CURLINFO_HTTP_CODE );
            //pre ( $res );
            curl_close ( $curl ); // 关闭CURL会话
            return $result;
        }
     
        //登录成功后自动检测帐户信息,如果没有创建则创建
        public function autoRegister($username){
            $hasAccount= $this->userDetails($username) ;
            if($hasAccount){
                return '1';
            }else{
     
            }
     
        }
     
        //登录
        public function  login(){
            session_start();
            $sessionid = session_id();//得到sessionid
            //echo $sessionid ;
            //声明一个json数组
            $value=array();
            $username=trim($_REQUEST['username']);
            $password=trim($_REQUEST['password']);
     
            // $DH=$db->get_one("select * from $thistable where  (username='".trim($username)."' or mobile='".trim($username)."' or (email='".trim($username)."' and email_yz=1)) and del=0 ");
     
            $islogin=loginaddpoint($username,$password,$type="");
     
            $user_id = $islogin;
            if($islogin>0){
     
                //数据库获取用户所有信息
                $umodel = M('user','jo2_');
                $U=$umodel -> where("userid='".$user_id."'") -> find();
                //var_dump($U);
                $_SESSION["userid"]=$U["userid"];
                $_SESSION["username"]=$U["username"];
                $_SESSION["usertype"]=$U["type"];
                $_SESSION["sessionid"]=$sessionid;
                $U['face']=$siteurl.$U['face'];
                $U['face_s']=$U['face_s']?$siteurl.$U['face_s']:'';
                $value['sessionid']=$sessionid;
                $value['account'] = $U['username'];
                $value['user_id'] = $U['userid'];
                $value['msg'] = "登陆成功!";
                $value['code'] = "200";
     
                if($_GET[isdz]=="1"){
                    $json=json_encode($U);
                }else{
                    $json=json_encode($value);
                }
                echo $json;
     
            }else if($islogin == -2){
                $value['msg'] = "密码错误!";
                $value['code'] = "101";
                $json=json_encode($value);
                echo $json;
            }else if($islogin == -1){
                $value['msg'] = "用户名和密码不能为空!";
                $value['code'] = "102";
                $json=json_encode($value);
                echo $json;
            }else if($islogin === 0){
                $value['msg'] = "账号不存在!";
                $value['code'] = "103";
                $json=json_encode($value);
                echo $json;
            }
     
        }
    }
  • 相关阅读:
    hiho一下 第115周:网络流一•Ford-Fulkerson算法 (Edmond-Karp,Dinic,SAP)
    hiho一下 第二周&第四周:从Trie树到Trie图
    2016 acm香港网络赛 C题. Classrooms(贪心)
    2016 acm香港网络赛 F题. Crazy Driver(水题)
    2016 acm香港网络赛 B题. Boxes
    系统吞吐量(TPS)、用户并发量、性能测试概念和公式(转发)
    使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示。
    Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析
    Tomcat 系统架构与设计模式,第 1 部分: 工作原理
    Tomcat源码分析
  • 原文地址:https://www.cnblogs.com/lxwphp/p/10871259.html
Copyright © 2020-2023  润新知