发布时间:2017年12月15日 17:25:11编辑:admin阅读(2180)评论(0)
一直想弄个自己的网站,记录一下自己那些年写过的代码,撸码的时光(虽然才三年),刚接触软件开发的时候完全不知道是做什么,而我又能做什么,
每次遇到问题都是百度,强大的百度不断的搜索,终会看到大牛把自己的经验写出来供菜鸟学习,借鉴
大牛们,感谢
今天说说即时聊天的,手机QQ,微信聊天额....他们很屌。
自己也做过app的即时聊天,大学写的是java,但是很失败,学的不是很精,为了生存转php了。php的道路也还很长要走
app的聊天我以后再贴,用的是APiCloud开发,也是rongcloud的
又说了一堆废话,别打。。。。这就上代码
首先先注册融云账号,我们要用到
融云注册地址:点这里
注册之后申请应用,提交审核,审核通过之后就可以用了
开发环境,开发阶段,不解释
然后是配置
config.php
<?php return array( 'TMPL_ACTION_ERROR' => THINK_PATH . 'Tpl/dispatch_jump.tpl', // 默认错误跳转对应的模板文件 'TMPL_ACTION_SUCCESS' => THINK_PATH . 'Tpl/dispatch_jump.tpl', // 默认成功跳转对应的模板文件 //***********************************试图设置************************************** 'TMPL_PARSE_STRING' => array( // 添加输出替换 '__UPLOAD__' => __ROOT__.'/Uploads', //'__PUBLIC__' => __ROOT__.'/APP/Pchome/View/'.C('DEFAULT_THEME__MANAGE'), '__PUBLIC__' => __ROOT__.'/Application/Api/View/'.C('DEFAULT_THEME__MANAGE'), //'__PUBLIC__' => __ROOT__.'/Application/Pchome/View/', ), //***********************************模板设置************************************** 'TMPL_L_DELIM' => '{', // 模板引擎普通标签开始标记 'TMPL_R_DELIM' => '}', // 模板引擎普通标签结束标记 'TMPL_FILE_DEPR'=>'_', // 试图文件链接方式 'DEFAULT_MODULE' => 'Api', //默认模块 //***********************************URL设置************************************** 'MODULE_ALLOW_LIST' => array('Api'), //允许访问列表 //***********************************网站名字设置******************************************** 'project_name'=>'苏博客',//网站名称 'RONG_IS_DEV' => true,//是否是在开发中 'RONG_DEV_APP_KEY' => 'bmdehs6pb15ps', //融云开发环境下的key 仅供测试使用 'RONG_DEV_APP_SECRET' => 'kGIzmv6yQhbt', //融云开发环境下的SECRET 仅供测试使用 'RONG_PRO_APP_KEY' => '', //融云生产环境下的key 'RONG_PRO_APP_SECRET' => '', //融云生产环境下的SECRET 'ALIOSS_CONFIG' => array( 'KEY_ID' => '', // 阿里云oss key_id 'KEY_SECRET' => '', // 阿里云oss key_secret 'END_POINT' => '', // 阿里云oss endpoint 'BUCKET' => '' // bucken 名称 ), );
ALIOSS_CONFIG 有些头像问题做判断,防止头像获取不到
RongController.class.php 控制器
读数据库数据,获取用的链接融云聊天的 token
<?php namespace Api\Controller; use Think\Controller; Class RongController extends Controller{ /** * 融云用户1 */ public function user1(){ $user_data=M('web_users')->field('id,username,avatar')->find(1); $_SESSION['user']=array( 'id'=>$user_data['id'], 'username'=>$user_data['username'], 'avatar'=>$user_data['avatar'] ); // 获取融云key $rong_key_secret=get_rong_key_secret(); $assign=array( 'uid'=>$user_data['id'], // 用户id 'avatar'=>$user_data['avatar'],// 头像 'username'=>$user_data['username'],// 用户名 'rong_key'=>$rong_key_secret['key'],// 融云key 'rong_token'=>get_rongcloud_token($user_data['id'])//获取融云token ); $this->assign($assign); $this->display(); } /** * 融云用户2 */ public function user2(){ $user_data=M('web_users')->field('id,username,avatar')->find(2); $_SESSION['user']=array( 'id'=>$user_data['id'], 'username'=>$user_data['username'], 'avatar'=>$user_data['avatar'] ); // 获取融云key $rong_key_secret=get_rong_key_secret(); $assign=array( 'uid'=>$user_data['id'], // 用户id 'avatar'=>$user_data['avatar'],// 头像 'username'=>$user_data['username'],// 用户名 'rong_key'=>$rong_key_secret['key'],// 融云key 'rong_token'=>get_rongcloud_token($user_data['id'])//获取融云token ); $this->assign($assign); $this->display(); } /** * 传递一个、或者多个用户id * 获取用户头像用户名;用来组合成好友列表 */ public function get_user_info(){ $uids=I('post.uids'); // 组合where数组条件 $map=array( 'id'=>array('in',$uids) ); $data=M('web_users') ->field('id,username,avatar') ->where($map) ->select(); ajax_return($data,'获取用户数据成功',0); } } ?>
公共模块 function.php
<?php /** * 根据配置项获取对应的key和secret * @return array key和secret */ function get_rong_key_secret(){ // 判断是需要开发环境还是生产环境的key if (C('RONG_IS_DEV')) { $key=C('RONG_DEV_APP_KEY'); $secret=C('RONG_DEV_APP_SECRET'); }else{ $key=C('RONG_PRO_APP_KEY'); $secret=C('RONG_PRO_APP_SECRET'); } $data=array( 'key'=>$key, 'secret'=>$secret ); return $data; } /** * 获取融云token * @param integer $uid 用户id * @return integer token */ function get_rongcloud_token($uid){ // 从数据库中获取token $user_data=M('web_users')->field('rong_token,username,avatar')->getById($uid); // 如果有token就返回 if ($user_data['rong_token']) { return $user_data['rong_token']; } // 获取用户昵称和头像 // 用户不存在 if (empty($user_data)) { return false; } // 获取头像url格式 $avatar=get_url($user_data['avatar']); // 获取key和secret $key_secret=get_rong_key_secret(); // 实例化融云 $rong_cloud=new \Org\Xb\RongCloud($key_secret['key'],$key_secret['secret']); // 获取token $token_json=$rong_cloud->getToken($uid,$user_data['username'],$avatar); $token_array=json_decode($token_json,true); // 获取token失败 if ($token_array['code']!=200) { return false; } $token=$token_array['token']; // 修改数据库 $result=M('web_users')->where('id='.$uid)->save(array('rong_token'=>$token)); if ($result) { return $token; }else{ return false; } } /** * 获取完整网络连接 * @param string $path 文件路径 * @return string http连接 */ function get_url($path){ // 如果是空;返回空 if (empty($path)) { return ''; } // 如果已经有http直接返回 if (strpos($path, 'http://')!==false) { return $path; } // 判断是否使用了oss $alioss=C('ALIOSS_CONFIG'); if (empty($alioss['KEY_ID'])) { return 'http://'.$_SERVER['HTTP_HOST'].$path; }else{ return 'http://'.$alioss['BUCKET'].'.'.$alioss['END_POINT'].$path; } } /** * 返回iso、Android、ajax的json格式数据 * @param array $data 需要发送到前端的数据 * @param string $error_message 成功或者错误的提示语 * @param integer $error_code 状态码: 0:成功 1:失败 * @return string json格式的数据 */ function ajax_return($data='',$error_message='成功',$error_code=1){ $all_data=array( 'error_code'=>$error_code, 'error_message'=>$error_message, ); if ($data!=='') { $all_data['data']=$data; // app 禁止使用和为了统一字段做的判断 $reserved_words=array('id','title','price','product_title','product_id','product_category','product_number'); foreach ($reserved_words as $k => $v) { if (array_key_exists($v, $data)) { echo 'app不允许使用【'.$v.'】这个键名 —— 此提示是function.php 中的ajax_return函数返回的'; die; } } } // 如果是ajax或者app访问;则返回json数据 pc访问直接p出来 echo json_encode($all_data); exit(0); }
主要服务器端就这些,然后是前端,
前端就不一一贴出不来了,我比较懒(要贴的太多了),我会提供源码下载的
体验地址 1 和 2 互相聊天,(没那么美观,强迫症的话急屎你)
聊天体验地址:admin1
聊天体验地址:admin2
转载: 白俊遥博客
上一篇: 新手简单发送邮件
5871
3843
3766