| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684 |
- <?php
- // +----------------------------------------------------------------------
- // | Fanwe 方维直播系统
- // +----------------------------------------------------------------------
- // | Copyright (c) 2011 http://www.fanwe.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Author: shaoyv(172231343@qq.com)
- // +----------------------------------------------------------------------
- class liveModule extends baseModule
- {
- /**
- * 切换付费(主播端)
- */
- public function live_pay(){
- $root = array('status'=>1,'error'=>'');
- $data = array();
- if(!$GLOBALS['user_info']){
- $root['error'] = "用户未登陆,请先登陆.";
- $root['status'] = 0;
- $root['user_login_status'] = 0;//有这个参数: user_login_status = 0 时,表示服务端未登陆、要求登陆,操作
- }else{
- $m_config = load_auto_cache("m_config");//初始化手机端配置
-
- if(!isset($m_config)){
- $root['error'] = "初始化手机端配置错误";
- $root['status'] = 0;
- ajax_return($root);
- }
-
- $user_id = intval($GLOBALS['user_info']['id']);//用户ID
- $room_id = intval($_REQUEST['room_id']);//直播ID 也是room_id
- $live_fee = intval($_REQUEST['live_fee']);//直播收取的费用 (钻石/分钟)
- $pay_type = intval($_REQUEST['live_pay_type']);//收费类型 0按时收费,1按场次收费
- //提档
- $is_mention = intval($_REQUEST['is_mention']);//提档 0不提档 1 提档
- //按时
- $live_pay_max = intval($m_config['live_pay_max']);//付费直播收费最高
- $live_pay_min = intval($m_config['live_pay_min']);//付费直播收费最低
- //按场
- $live_pay_scene_max = intval($m_config['live_pay_scene_max']);//付费直播收费最高
- $live_pay_scene_min = intval($m_config['live_pay_scene_min']);//付费直播收费最低
- if($pay_type ==0 &&(defined('LIVE_PAY')&&LIVE_PAY==0)){
- $root['error'] = "按时付费未开启";
- $root['status'] = 0;
- ajax_return($root);
- }
- if($pay_type == 1 && (defined('LIVE_PAY_SCENE')&&LIVE_PAY_SCENE==0)){
- $root['error'] = "按场付费未开启";
- $root['status'] = 0;
- ajax_return($root);
- }
- if($pay_type==0&&$live_pay_max<$live_fee&&$is_mention==0&&$live_pay_max>0){
- $root['error'] = "按时收费不能高于".$live_pay_max.$m_config['diamonds_name'];
- $root['status'] = 0;
- ajax_return($root);
- }
- if($pay_type==0&&$live_pay_min>$live_fee&&$is_mention==0){
- $root['error'] = "按时收费不能低于".$live_pay_min.$m_config['diamonds_name'];
- $root['status'] = 0;
- ajax_return($root);
- }
-
- if($pay_type==1&&$live_pay_scene_max<$live_fee&&$is_mention==0&&$live_pay_scene_max>0){
- $root['error'] = "按场收费不能高于".$live_pay_scene_max.$m_config['diamonds_name'];
- $root['status'] = 0;
- ajax_return($root);
- }
- if($pay_type==1&&$live_pay_scene_min>$live_fee&&$is_mention==0){
- $root['error'] = "按场收费不能低于".$live_pay_scene_min.$m_config['diamonds_name'];
- $root['status'] = 0;
- ajax_return($root);
- }
-
- //判断付费是否开启
- $pay_info = $this->get_pay_info();
- if($pay_type==0&&intval($pay_info['live_pay'])==0){
- $root['error'] = "按时付费未开启";
- $root['status'] = 0;
- ajax_return($root);
- }
- if($pay_type==1&&intval($pay_info['live_pay_scene'])==0){
- $root['error'] = "按付费未开启";
- $root['status'] = 0;
- ajax_return($root);
- }
-
- fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
- $video_redis = new VideoRedisService();
- $fields = array('group_id','live_fee','live_is_mention','is_live_pay','user_id');
- $video_info = $video_redis->getRow_db($room_id,$fields);
- $live_pay_type = intval($video_info['live_pay_type']);
- //实际付费人数
- if($live_pay_type==0){
- $times = get_gmtime()-60;
- $sql ="select count(*) from ".DB_PREFIX."live_pay_log where video_id =".$room_id." and pay_time_end>=".$times;
- $live_viewer = $GLOBALS['db']->getOne($sql,true,true);
- }else{
- $live_viewer = $GLOBALS['db']->getOne("select count(*) from ".DB_PREFIX."live_pay_log where video_id =".$room_id,true,true);
- }
- $group_id = $video_info['group_id'];
- if(!$room_id){
- $root['error'] = "直播ID不存在";
- $root['status'] = 0;
- ajax_return($root);
- }
- $m_config['live_count_down'] = intval($m_config['live_count_down'])?intval($m_config['live_count_down']):120;
- $live_pay_time = intval(NOW_TIME+$m_config['live_count_down']);
- //加入直播意外终止的问题
- $p_user_id = $video_info['user_id'];
- //获取支付信息
- $sql = "select id,user_id,live_pay_type,live_fee from ".DB_PREFIX."video where user_id = ".$p_user_id." and live_pay_type=".$pay_type." and is_live_pay =1 and is_aborted = 1 and live_in !=3";
- $live_old_info = $GLOBALS['db']->getRow($sql);
- $live_old_id = intval($live_old_info['id']);//被服务器异常终止结束(主要是心跳超时)
- $pay_room_id = 0;
- if($live_old_id>0){
- $pay_room_id = $live_old_id;
- }
- //提档流程
- if($is_mention==1&&$pay_type==0){
- if(intval($video_info['is_live_pay'])==1&&intval($video_info['live_fee'])>0&&intval($video_info['live_fee'])==0){
- $root['status'] = 0;
- ajax_return($root);
- }
- if(intval($m_config['live_pay_fee'])==0){
- $root['status'] = 0;
- $root['error'] = "提档参数不存在";
- ajax_return($root);
- }
- $live_fee = intval($m_config['live_pay_fee']+$video_info['live_fee']);
- //更新付费信息
- $sql = "update ".DB_PREFIX."video set live_is_mention =1,live_fee = ".$live_fee.",live_pay_type = ".$pay_type.",pay_room_id = ".$pay_room_id." where live_pay_type=0 and is_live_pay =1 and live_in =1 and id = ".$room_id." and user_id = ".$user_id;
- }else{
- if((defined('PUBLIC_PAY')&&PUBLIC_PAY==1)&&$m_config['switch_public_pay']==1&&$m_config['public_pay']>0){
- }else{
- if(intval($video_info['is_live_pay'])==1&&intval($video_info['live_fee'])>0){
- $root['status'] = 0;
- ajax_return($root);
- }
- }
- if((defined('PUBLIC_PAY')&&PUBLIC_PAY==1)&&$m_config['switch_public_pay']==1&&$m_config['public_pay']>0){
- $sql = "update ".DB_PREFIX."video set live_fee = '".$live_fee."',public_screen = 0,live_pay_type = '".$pay_type."',is_live_pay =1,live_pay_time = '".$live_pay_time."',pay_room_id = ".$pay_room_id." where is_live_pay =1 and live_in =1 and public_screen=1 and id = ".$room_id." and user_id = ".$user_id;
- $public_screen = $GLOBALS['db']->getOne("SELECT public_screen FROM ".DB_PREFIX."video WHERE user_id=" . $user_id . " and live_in=1");
- }else{
- $sql = "update ".DB_PREFIX."video set live_fee = '".$live_fee."',live_pay_type = '".$pay_type."',is_live_pay =1,live_pay_time = '".$live_pay_time."',pay_room_id = ".$pay_room_id." where is_live_pay =0 and live_in =1 and id = ".$room_id." and user_id = ".$user_id;
- }
- }
- $GLOBALS['db']->query($sql);
- if($GLOBALS['db']->affected_rows()){
- $data['live_fee'] = $live_fee;
- $data['live_viewer']=intval($live_viewer);
- $data['pay_type'] = $pay_type;
- $data['count_down'] = $m_config['live_count_down'];
- if($is_mention){
- $data['count_down'] = 0;
- }
- $root = $data;
- $root['status'] = 1;
- $root['error'] = '';
- sync_video_to_redis($room_id,'*',false);
- if($is_mention==0){
- //=========================================================
- //广播:开始进入收费直播
- //发送广播:收费直播
- fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php');
- $api = createTimAPI();
- $ext = array();
- if($pay_type==1){
- $ext['type'] = 40; //40:按场收费直播(全体推送的,用于通知用户即将进入收费直播)
- }else{
- $ext['type'] = 32; //32:按时收费直播(全体推送的,用于通知用户即将进入收费直播)
- }
- $ext['room_id'] = $room_id;//直播ID 也是room_id;只有与当前房间相同时,收到消息才响应
-
- #构造高级接口所需参数
- $msg_content = array();
- //创建array 所需元素
- $msg_content_elem = array(
- 'MsgType' => 'TIMCustomElem', //自定义类型
- 'MsgContent' => array(
- 'Data' => json_encode($ext),
- )
- );
- array_push($msg_content, $msg_content_elem);
- //32:收费直播
- //$api->group_send_group_msg2($group_id, $msg_content);
- //$api->openim_push($user_id, $msg_content,0);
- $ret = $api->group_send_group_msg2($user_id, $group_id, $msg_content);
- //=========================================================
- if ($ret['ActionStatus'] == 'FAIL' && $ret['ErrorCode'] == 10002){
- //10002 系统错误,请再次尝试或联系技术客服。
- log_err_file(array(__FILE__,__LINE__,__METHOD__,$ret));
- $ret = $api->group_send_group_msg2($user_id, $group_id, $msg_content);
- }
- if ($ret['ActionStatus'] == 'FAIL'){
- $root['error'] = $ret['ErrorInfo'].":".$ret['ErrorCode'];
- }else{
- if($pay_type==1){
- $root['error'] = '已切换为付费直播,'.$live_fee.$m_config['diamonds_name'].'/场';
- }else{
- $root['error'] = '已切换为付费直播,'.$live_fee.$m_config['diamonds_name'].'/分钟';
- }
-
- }
- }else{
- if($pay_type==0&&$is_mention==1){
- $root['error'] = '提档成功,'.$live_fee.$m_config['diamonds_name'].'/分钟';
- }
- }
- }else{
- $root['status'] = 0;
- $root['error'] = '切换失败';
- }
- }
- ajax_return($root);
- }
- /**
- * 扣费(观众端)
- */
- public function live_pay_deduct(){
- $root = array('status'=>1,'error'=>'');
- if(!$GLOBALS['user_info']){
- $root['error'] = "用户未登陆,请先登陆.";
- $root['status'] = 0;
- $root['user_login_status'] = 0;//有这个参数: user_login_status = 0 时,表示服务端未登陆、要求登陆,操作
- }else{
- $user_id = intval($GLOBALS['user_info']['id']);//用户ID
- $room_id = intval($_REQUEST['room_id']);//直播ID 也是room_id
- $is_agree = intval($_REQUEST['is_agree']);//是否同意
-
- if(!$room_id){
- $root['error'] = "直播ID不存在";
- $root['status'] = 0;
- ajax_return($root);
- }
-
- $user_info = $GLOBALS['user_info'];
-
- /*fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php');
- $video_redis = new VideoRedisService();
- $fields = array('id','is_aborted','end_time','live_in','user_id','group_id','live_pay_time','live_pay_type','live_fee','live_is_mention','pay_room_id');
- $video_info = $video_redis->getRow_db($room_id,$fields);*/
-
- $sql = "select id,is_aborted,end_time,live_in,user_id,group_id,live_pay_time,live_pay_type,live_fee,live_is_mention,pay_room_id from ".DB_PREFIX."video where id =".$room_id;
- $video_info = $GLOBALS['db']->getRow($sql);
- //判断直播结束
- if(empty($video_info)){
- $video_info = $GLOBALS['db']->getRow($sql);
- }
- if(intval($video_info['live_in'])==0&&$video_info['end_time']==''&&$video_info['is_aborted']!=1){
- $root['error'] = "直播已结束不存在";
- $root['status'] = 0;
- ajax_return($root);
- }
- //判断付费是否开启
- $pay_info = $this->get_pay_info();
- if($video_info['live_pay_type']==0&&intval($pay_info['live_pay'])==0){
- $root['error'] = "按时付费未开启";
- $root['status'] = 0;
- ajax_return($root);
- }
- if($video_info['live_pay_type']==1&&intval($pay_info['live_pay_scene'])==0){
- $root['error'] = "按场付费未开启";
- $root['status'] = 0;
- ajax_return($root);
- }
-
- //观众在直播间内
- if(0){
- fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoViewerRedisService.php');
- $video_viewer_redis = new VideoViewerRedisService();
- $video_viewer = $video_viewer_redis->existence_viewer_list($room_id,$user_id);
- $in_room = $video_viewer['video_viewer_level_score'];
- }else{
- $in_room = 1;
- }
- if(intval($video_info['live_fee'])!=0&&$in_room&&$video_info['user_id']!=$user_id){
- $data = $this->pay_deduct($video_info,$user_info,$is_agree);
- $root = $data;
- }
- }
- ajax_return($root);
- }
- /**
- * 扣费
- */
- public function pay_deduct($video_info,$user_info,$is_agree){
- $data = array('status'=>1,'error'=>'');
- $user_id = $user_info['id'];
- $room_id = $video_info['id'];
- $new_room_id = 0;
- if(intval($video_info['pay_room_id'])>0){
- $room_id = $video_info['pay_room_id'];
- $new_room_id = $video_info['id'];
- }
-
- //
-
- //扣费开始
- $m_config = load_auto_cache("m_config");//初始化手机端配置
- $m_config['pay_interval'] = 1;//扣费间隔时间 (分)
- //开始扣费剩余时间
- $data['is_live_pay'] = 1;
- $data['live_pay_type'] = intval($video_info['live_pay_type']);
- $data['is_agree'] = $is_agree;
- $data['live_fee'] = $video_info['live_fee'];
-
- if($data['live_pay_type']==0){
- $live_time = $video_info['live_pay_time']-NOW_TIME;
- $live_time = $live_time>0?intval($live_time):0;
- }else{
- $live_time = 0;
- }
- $now_time = NOW_TIME;
- //倒计时结束 and 同意扣费
-
- if(floatval($m_config['uesddiamonds_to_score'])<=0){
- $data = array('status'=>0,'error'=>'uesddiamonds_to_score参数错误');
- return $data;
- }
- //增加:主播印票
- if(floatval($m_config['ticket_to_rate'])<=0){
- $data = array('status'=>0,'error'=>'ticket_to_rate参数错误');
- return $data;
- }
- if($is_agree){//
- $data['on_live_pay'] = 1; //收费中
- $data['count_down'] = 0;
- $total_time = intval($m_config['pay_interval']*60);//本次观看时间
- if((defined('PUBLIC_PAY')&&PUBLIC_PAY==1)&&$m_config['switch_public_pay']==1&&$m_config['public_pay']>0){
- $sql = "select id,pay_time_next,total_time,total_diamonds,pay_type from ".DB_PREFIX."live_pay_log where from_user_id = ".$user_id." and to_user_id = ".$video_info['user_id']." and video_id=".$room_id;
- $live_pay_log_info = $GLOBALS['db']->getRow($sql);
- if(intval($live_pay_log_info['id'])==0){
- $sql = "select id,pay_time_next,total_time,total_diamonds,pay_type from ".DB_PREFIX."live_pay_log_history where from_user_id = ".$user_id." and to_user_id = ".$video_info['user_id']." and video_id=".$room_id;
- $live_pay_log_info = $GLOBALS['db']->getRow($sql);
- }
- }else{
- //获取支付信息
- $sql = "select id,pay_time_next,total_time,total_diamonds from ".DB_PREFIX."live_pay_log where from_user_id = ".$user_id." and to_user_id = ".$video_info['user_id']." and video_id=".$room_id;
- $live_pay_log_info = $GLOBALS['db']->getRow($sql);
- if(intval($live_pay_log_info['id'])==0){
- $sql = "select id,pay_time_next,total_time,total_diamonds from ".DB_PREFIX."live_pay_log_history where from_user_id = ".$user_id." and to_user_id = ".$video_info['user_id']." and video_id=".$room_id;
- $live_pay_log_info = $GLOBALS['db']->getRow($sql);
- }
- }
- //开始扣费的条件
- //一、按时扣费 => 1.未扣费过;2.扣费过 and 达到扣费时间
- //二、按场收费 => 1.未扣费过;
-
- $allow = 0;
- //可扣费 =》 按时扣费 AND 扣费过 AND 达到扣费时间
- if(intval($live_pay_log_info['id'])>0&&$live_pay_log_info['pay_time_next'] <= $now_time&&intval($video_info['live_pay_type'])==0){
- $allow = 1;
- }elseif(intval($live_pay_log_info['id'])==0){
- //可扣费 =》 未扣费过
- $allow = 1;
- }else{
- if((defined('PUBLIC_PAY')&&PUBLIC_PAY==1)&&$m_config['switch_public_pay']==1&&$m_config['public_pay']>0)
- {
- $public_screen = $GLOBALS['db']->getOne("SELECT public_screen FROM ".DB_PREFIX."video WHERE user_id=" . $video_info['user_id']. " and live_in=1");
- if($live_pay_log_info['pay_type']==1&&$public_screen==0&&$video_info['live_pay_type']==1){
- $allow = 1;
- }
- }
- }
- if(intval($video_info['live_in'])==0){
- $root['error'] = "直播已被关闭";
- $root['status'] = 0;
- ajax_return($root);
- }
- if($allow){
- //-----事务开始-----
- $pInTrans = $GLOBALS['db']->StartTrans();
- try
- {
- //扣除观众的钻石,增加经验
- $total_score = intval($video_info['live_fee']*floatval($m_config['uesddiamonds_to_score']));
- if($live_time==0){
- $sql = "update ".DB_PREFIX."user set diamonds = diamonds-".$video_info['live_fee'].",use_diamonds = use_diamonds+".$video_info['live_fee'].", score = score + ".$total_score." where diamonds >= ".$video_info['live_fee']." and id = ".$user_id;
- $GLOBALS['db']->query($sql);
- }
-
-
- if($GLOBALS['db']->affected_rows()||intval($live_time)>0){
- $podcast_user_id = intval($video_info['user_id']);
- if((defined('PUBLIC_PAY')&&PUBLIC_PAY==1)&&$m_config['switch_public_pay']==1&&$m_config['public_pay']>0){
- $public_screen = $GLOBALS['db']->getOne("SELECT public_screen FROM " . DB_PREFIX . "video WHERE user_id=" . $podcast_user_id . " and live_in=1");
- }
- if (intval($public_screen)!= 1) {
- if (defined('CHILD_ROOM') && CHILD_ROOM == 1) {
- fanwe_require(APP_ROOT_PATH . 'mapi/lib/ChildRoom.class.php');
- $child_room = new child_room();
- $parent_id = $child_room->parent_id($room_id);
- if ($room_id != $parent_id) {
- $podcast_user_id = $GLOBALS['db']->getOne("SELECT user_id FROM " . DB_PREFIX . "video WHERE id=" . $parent_id . " and live_in=1");
- $room_id = $parent_id;
- }
- }
- //主播获得的印票
- $total_ticket = round($video_info['live_fee'] * floatval($m_config['ticket_to_rate']), 2);
- if ($total_ticket > 0 && $live_time == 0) {
- $sql = "update " . DB_PREFIX . "user set ticket = ticket + " . $total_ticket . " where id = " . $podcast_user_id;
- $GLOBALS['db']->query($sql);
- //更新主播直播间获得印票
- fanwe_require(APP_ROOT_PATH . 'mapi/lib/redis/VideoContributionRedisService.php');
- $videoCont_redis = new VideoContributionRedisService();
- $videoCont_redis->insert_db($user_id, $podcast_user_id, $room_id, $total_ticket);
- }
- $room_id = $video_info['id'];
- }
- //第一次付费
- if(intval($live_pay_log_info['id'])==0){
- $live_pay_log = array();
- $live_pay_log['total_diamonds'] = $video_info['live_fee'];//钻石(from_user_id减少的钻石)合计
- $live_pay_log['from_user_id'] = $user_id;//观众
- $live_pay_log['to_user_id'] = $video_info['user_id'];//主播
- $live_pay_log['create_time'] = $now_time;//时间
- $live_pay_log['create_date'] = to_date($now_time);//日期字段,按日期归档;
- $live_pay_log['create_ym'] = to_date($now_time,'Ym');//年月 如:201610
- $live_pay_log['create_d'] = to_date($now_time,'d');//日
- $live_pay_log['create_w'] = to_date($now_time,'w');//周
- $live_pay_log['live_fee'] = $video_info['live_fee'];//收取费用(钻石/分钟
- if(intval($live_time)){
- $live_pay_time = $video_info['live_pay_time'] + intval($live_time);
- }else{
- $live_pay_time = $video_info['live_pay_time'];
- }
-
- $live_pay_log['live_pay_time'] = $live_pay_time;//直播间开始收费时间
- $live_pay_log['live_pay_date'] = to_date($live_pay_time);//直播间开始收费 日期字段
- $live_pay_log['video_id'] = $room_id;//直播ID
- $live_pay_log['group_id'] = $video_info['group_id'];//群组ID
- $live_pay_log['pay_time_end'] = $live_pay_time;//最后一次扣款时间
- $live_pay_log['live_pay_type'] = intval($video_info['live_pay_type']);//直播类型
- $live_pay_log['total_ticket'] = $total_ticket;//主播获得的印票
- $live_pay_log['total_score'] = $total_score;//积分(from_user_id可获得的积分)合计
- $live_pay_log['uesddiamonds_to_score'] = intval($m_config['uesddiamonds_to_score']);//观众(from_user_id)获得积分的转换比例
- $live_pay_log['ticket_to_rate'] = intval($m_config['ticket_to_rate']);//主播(to_user_id)获得的印票转换比例
- if($live_time>0){
- $live_pay_log['total_diamonds'] = 0;//钻石(from_user_id减少的钻石)合计
- $live_pay_log['total_ticket'] = 0;//主播获得的印票
- }
- if((defined('PUBLIC_PAY')&&PUBLIC_PAY==1)&&$m_config['switch_public_pay']==1&&$m_config['public_pay']>0)
- {
- if($public_screen==1){
- $live_pay_log['pay_type'] = 1;//是否为公屏收费记录
- }
- }
- if(intval($video_info['live_pay_type'])==0){
- if(intval($live_time)){
- $now_live_time = intval($live_time);
- $live_pay_log['pay_time_next'] = $now_time+$now_live_time;//下次扣款时间
- }else{
- $live_pay_log['pay_time_next'] = $now_time+60*intval($m_config['pay_interval']);//下次扣款时间
- }
- }
- if(intval($live_time)==0)$live_pay_log['total_time'] = 60;//第一次扣费累计时间(from_user_id付费观看的时间)合计
-
- $GLOBALS['db']->autoExecute(DB_PREFIX."live_pay_log", $live_pay_log,"INSERT");
- $count_down = $video_info['live_pay_time']-$now_time>0?$video_info['live_pay_time']-$now_time:0;
- //更新主播扣费人数
- $sql = "update ".DB_PREFIX."video set live_pay_count = live_pay_count + 1 where is_live_pay =1 and id = ".$room_id." and user_id = ".$user_id;
- $GLOBALS['db']->query($sql);
- }else{
-
- $pay_time_end = $live_pay_log_info['pay_time_next'];
- $pay_time_next = $pay_time_end+60;//下次扣款时间
-
- if($now_time-$pay_time_end>=30){
- $pay_time_next = $now_time+60;
- }
- if($video_info['live_is_mention']){
- //提档
- $live_is_mention_time = $now_time;//提档开始时间
- $live_is_mention_pay = $video_info['live_fee'];//提档前扣费
- $sql = "update ".DB_PREFIX."live_pay_log set ticket_to_rate = ".intval($m_config['ticket_to_rate']).",uesddiamonds_to_score = ".intval($m_config['uesddiamonds_to_score']).",total_score = total_score + ".$total_score.", total_ticket = total_ticket + ".$total_ticket.", new_room_id=".$new_room_id.",live_is_mention_time =".$live_is_mention_time.",live_is_mention_pay =".$live_is_mention_pay.",total_diamonds=total_diamonds+".$live_is_mention_pay.",total_time=total_time+".$total_time.", pay_time_end = ".$pay_time_end.",pay_time_next = ".$pay_time_next." where from_user_id = ".$user_id." and to_user_id = ".$video_info['user_id']." and video_id=".$room_id;
- }else{
- $sql = "update ".DB_PREFIX."live_pay_log set ticket_to_rate = ".intval($m_config['ticket_to_rate']).",uesddiamonds_to_score = ".intval($m_config['uesddiamonds_to_score']).",total_score = total_score + ".$total_score.", total_ticket = total_ticket + ".$total_ticket.", new_room_id=".$new_room_id.",total_diamonds=total_diamonds+".$video_info['live_fee'].",total_time=total_time+".$total_time.", pay_time_end = ".$pay_time_end.",pay_time_next = ".$pay_time_next." where from_user_id = ".$user_id." and to_user_id = ".$video_info['user_id']." and video_id=".$room_id;
- }
- $GLOBALS['db']->query($sql);
-
- }
- if($live_time==0){
- //写入用户日志
- $log_data = array();
- $log_data['diamonds'] = intval($video_info['live_fee']);
- $log_data['log_admin_id'] = 0;
- $param['type'] = 6;//类型 0表示充值 1表示提现 2赠送道具 3 兑换印票 4 分享获得印票 5 登录赠送积分 6 观看付费直播
- $log_msg = '观看付费直播间' . $room_id . ',消费' . $video_info['live_fee'] .$m_config['diamonds_name'];
- account_log_com($log_data, $user_id, $log_msg, $param);
- }
-
- //获取用户当前的钻石数量
- $sql = "select diamonds from ".DB_PREFIX."user where id = ".$user_id;
- $diamonds = $GLOBALS['db']->getOne($sql);
- $data['msg'] = "";
- //判断用户是否足够观看5分钟
- if(intval($video_info['live_pay_type'])==0){
- if($diamonds>$video_info['live_fee']*5){
- $data['is_diamonds_low'] = 0;
- $data['is_recharge'] = 0;
- }elseif($diamonds<$video_info['live_fee']){
- $data['is_diamonds_low'] = 1;
- $data['is_recharge'] = 1;
- $data['msg'] = "您当前的".$m_config['diamonds_name']."数量过少,是否前往充值?";
- }else{
- $data['is_diamonds_low'] = 1;
- $data['is_recharge'] = 0;
- $surplus_time = intval($diamonds/$video_info['live_fee']);
- $data['msg'] = "您当前的".$m_config['diamonds_name']."数量过少,剩余观看".$surplus_time."分钟";
- }
- }else{
- fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserFollwRedisService.php');
- $user_follw_redis = new UserFollwRedisService($user_id);
- if(!$user_follw_redis->is_following($video_info['user_id'])){
- if(intval($video_info['pay_room_id'])>0){
- $room_id = $video_info['id'];
- }
- //自动关注主播
- $root = redis_set_follow($user_id,$video_info['user_id'],false,$room_id);
- clear_auto_cache("playback_list",array("user_id"=>$user_id));
- }
-
- }
- }else{
- $data['is_diamonds_low'] = 1;
- $data['is_recharge'] = 1;
- $data['msg'] = "您当前的".$m_config['diamonds_name']."数量过少,是否前往充值?";
- $data['count_down'] = 0;
- }
- //同步信息
- fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
- $user_redis = new UserRedisService();
- $user_infos = $user_redis->getRow_db($user_id,array('id','score','online_time','user_level'));
- user_leverl_syn($user_infos);//更新用户等级
- user_deal_to_reids(array($user_id,$video_info['user_id']));//同步mysql的user信息到redis
- sync_video_to_redis($room_id,'*',false);//将mysql的video数据,同步一份到redis
- //提交事务
- $GLOBALS['db']->Commit($pInTrans);
- }catch(Exception $e){
- //异常回滚
- $root['error'] = $e->getMessage();
- $root['status'] = 0;
-
- $GLOBALS['db']->Rollback($pInTrans);
- }
- //-----事务结束-----
- //获取支付信息
- $sql = "select id,pay_time_next,total_time,total_diamonds from ".DB_PREFIX."live_pay_log where from_user_id = ".$user_id." and to_user_id = ".$video_info['user_id']." and video_id=".$room_id." and total_time>60";
- $live_pay_log_infos = $GLOBALS['db']->getRow($sql);
- if($live_pay_log_infos){
- $total_times = intval($live_pay_log_infos['total_time']-60);//累计观看时间
- }else{
- $total_times = 0;//累计观看时间
- }
- $total_diamonds = $video_info['live_fee']+intval($live_pay_log_info['total_diamonds']);//累计消费钻石
- }else{
- $total_times = intval($live_pay_log_info['total_time']-$total_time);//累计观看时间
- $total_diamonds = intval($live_pay_log_info['total_diamonds']);//累计消费钻石
- }
-
- $data['total_time'] = intval($total_times)<=0?0:intval($total_times);//累计观看时间
- $data['total_diamonds'] = intval($total_diamonds);//累计消费钻石
- }else{
- $data['is_popup'] = 1;
- }
- $data['count_down'] = $live_time;//倒计时
- if($live_time==0){
- $data['on_live_pay'] = 1;//倒计时结束;已经开始收费
- }else{
- $data['on_live_pay'] = 0;//倒计时未结束;未实际收费
- }
- $sql = "select diamonds from ".DB_PREFIX."user where id = ".$user_id;
- $diamonds = $GLOBALS['db']->getOne($sql);
- $data['diamonds'] = intval($diamonds);
- //直播间主播获得的印票和钻石
- $sql = "select ticket from ".DB_PREFIX."user where id = ".$video_info['user_id'];
- $ticket = $GLOBALS['db']->getOne($sql);
- $data['ticket'] = intval($ticket);
- return $data;
- }
- /*
- * 付费直播 消费榜
- */
- public function pay_cont(){
- $root = array('status'=>1,'error'=>'');
- if(!$GLOBALS['user_info']){
- $root['error'] = "用户未登陆,请先登陆.";
- $root['status'] = 0;
- $root['user_login_status'] = 0;//有这个参数: user_login_status = 0 时,表示服务端未登陆、要求登陆,操作
- }else{
-
- $user_id = intval($GLOBALS['user_info']['id']);//用户ID
- $type = intval($_REQUEST['type']);//类型 0消费,1收入
- $page = intval($_REQUEST['p']);//取第几页数据
- $live_pay_type = intval($_REQUEST['live_pay_type']);//付费直播 类型 0按时 1按场
- if(intval(LIVE_PAY_TIME)==0)$live_pay_type = 1;//兼容客户端
-
- if($page==0){
- $page = 1;
- }
-
- $page_size=30;
- $limit = (($page-1)*$page_size).",".$page_size;
-
- $where = " and live_pay_type = ".$live_pay_type;
-
- if($type){
- $sql = "select lp.video_id as room_id,lp.total_time,lp.create_time,lp.total_diamonds,lp.from_user_id as user_id,u.head_image,u.user_level,u.sex,u.nick_name,lp.live_pay_type from ".DB_PREFIX."live_pay_log_history lp left join ".DB_PREFIX."user as u on u.id = lp.from_user_id where lp.total_ticket>0 and lp.to_user_id = ".$user_id.$where." order by lp.create_time desc limit ".$limit ;
- }else{
- //$sql = "select lp.video_id as room_id,lp.total_time,lp.total_diamonds,lp.to_user_id as user_id,u.head_image,u.user_level,u.sex,u.nick_name from ".DB_PREFIX."live_pay_log lp left join ".DB_PREFIX."user as u on u.id = lp.from_user_id where lp.from_user_id = ".$user_id." group by lp.video_id order by lp.total_diamonds limit ".$limit ;
- $sql = "select lp.video_id as room_id,lp.total_time,lp.create_time,lp.total_diamonds,lp.to_user_id as user_id,u.head_image,u.user_level,u.sex,u.nick_name,lp.live_pay_type from ".DB_PREFIX."live_pay_log_history lp left join ".DB_PREFIX."user as u on u.id = lp.to_user_id where lp.total_ticket>0 and lp.from_user_id = ".$user_id.$where." order by lp.create_time desc limit ".$limit ;
- }
- $list = $GLOBALS['db']->getAll($sql,true,true);
- foreach($list as $k=>$v){
- $list[$k]['head_image'] = get_spec_image($v['head_image'],150,150);
- $total_time_format = get_live_time_len($v['total_time']);
- $total_time_format = $total_time_format?$total_time_format:"0分钟";
- $list[$k]['total_time_format'] =$total_time_format;
- if($live_pay_type==1){
- unset($list[$k]['total_time']);
- unset($list[$k]['total_time_format']);
- }
- $list[$k]['start_time'] =to_date($v['create_time']);
- $list[$k]['end_time'] =to_date($v['create_time']);
- $list[$k]['nick_name'] =emoji_decode($v['nick_name']);
- }
-
- $rs_count = count($list);
- if ($page == 1) {
- $root['page'] = array('page' => $page, 'has_next' => 0);
- }else {
- $has_next = ($rs_count > $page * $page_size) ? '1' : '0';
- $root['page'] = array('page' => $page, 'has_next' => $has_next);
- }
-
- $root['data'] = $list;
- }
- ajax_return($root);
- }
-
- public function get_pay_info(){
- //付费开关
- $live_pay_info= $GLOBALS['db']->getAll("SELECT id,class FROM ".DB_PREFIX."plugin WHERE is_effect=1 and type = 1");
- $live_pay = array();
- if($live_pay_info){
- foreach($live_pay_info as $k=>$v){
- $live_pay[$v['class']] = $v['id'];
- }
- }
- return $live_pay;
- }
- }
- ?>
|