发布时间:2017年12月15日 17:25:11编辑:admin阅读(2713)评论(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
转载: 白俊遥博客
上一篇: 新手简单发送邮件
8137
5361
5378