LivevideoController.class.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. /**
  3. * lionfish 商城系统
  4. *
  5. * ==========================================================================
  6. * @link http://www.liofis.com/
  7. * @copyright Copyright (c) 2015 liofis.com.
  8. * @license http://www.liofis.com/license.html License
  9. * ==========================================================================
  10. * 小程序直播模块
  11. * @author J_da
  12. *
  13. */
  14. namespace Home\Controller;
  15. class LivevideoController extends CommonController {
  16. private $re_access_token;
  17. protected function _initialize()
  18. {
  19. parent::_initialize();
  20. $weixin_config = array();
  21. $weixin_config['appid'] = D('Home/Front')->get_config_by_name('wepro_appid');
  22. $weixin_config['appscert'] = D('Home/Front')->get_config_by_name('wepro_appsecret');
  23. $jssdk = new \Lib\Weixin\Jssdk( $weixin_config['appid'], $weixin_config['appscert']);
  24. $this->re_access_token = $jssdk->getweAccessToken();
  25. }
  26. /**
  27. * 获取房间列表
  28. * "start" => 0, // 为起始页
  29. * "limit" => 10 // 为每页多少个 最大100
  30. * 接口500次/天
  31. * @return [type] [description]
  32. */
  33. public function get_roominfo()
  34. {
  35. $gpc = I('request.');
  36. $page = intval($gpc['page'], 1);
  37. $showTabbar = false;
  38. $tabbar_out_type = D('Home/Front')->get_config_by_name('tabbar_out_type');
  39. if($tabbar_out_type==7) $showTabbar = true;
  40. // 是否开启Redis
  41. $open_redis_server = D('Home/Front')->get_config_by_name('open_redis_server');
  42. if(!empty($open_redis_server) && $open_redis_server == 1)
  43. {
  44. if(!class_exists('Redis')){
  45. echo json_encode( array('code' => 1, msg=>"Redis未安装", 'showTabbar'=>$showTabbar) );
  46. die();
  47. }
  48. $redis = D('Seller/Redisorder')->get_redis_object_do();
  49. $day_time = strtotime( date('Y-m-d'.' 00:00:00') );
  50. $inc_key = "_inc_livevideo_".$day_time;
  51. $livevideo_server = $redis->get($inc_key);
  52. $res = $this->_write_file($livevideo_server, 1);
  53. }else{
  54. $day_time = strtotime( date('Y-m-d'.' 00:00:00') );
  55. $livevideo_server = S('_inc_livevideo_'.$day_time);
  56. $res = $this->_write_file($livevideo_server, 0);
  57. }
  58. $list = array();
  59. if($res) {
  60. $room_info = $res->room_info;
  61. if(count($room_info) > $page*10) {
  62. $list = array_slice($room_info, ($page-1)*10, 10);
  63. } else {
  64. $list = array_slice($room_info, ($page-1)*10);
  65. }
  66. }
  67. if($list)
  68. {
  69. foreach ($list as $key => &$val) {
  70. $val->start_time = date('Y-m-d H:i', $val->start_time);
  71. $val->end_time = date('Y-m-d H:i', $val->end_time);
  72. }
  73. echo json_encode( array('code' => 0, 'data'=>$list, 'showTabbar'=>$showTabbar) );
  74. die();
  75. } else{
  76. echo json_encode( array('code' => 1, 'showTabbar'=>$showTabbar) );
  77. die();
  78. }
  79. }
  80. private function _write_file($livevideo_server, $is_redis)
  81. {
  82. $day_time = strtotime( date('Y-m-d'.' 00:00:00') );
  83. if($is_redis==1){
  84. $redis = D('Seller/Redisorder')->get_redis_object_do();
  85. $inc_key = "_inc_livevideo_".$day_time;
  86. }
  87. if( empty($livevideo_server) )
  88. {
  89. $res = D('Livevideo')->get_wx_roomInfo($this->re_access_token);
  90. if($res) {
  91. $is_redis==1 ? $redis->set($inc_key, $res) : S($inc_key, $res);
  92. }
  93. return $res;
  94. }else{
  95. $expire_time = $livevideo_server->expire_time ? $livevideo_server->expire_time : 0;
  96. if( time() - $expire_time > 300 || !$expire_time ) {
  97. $res = D('Livevideo')->get_wx_roomInfo($this->re_access_token);
  98. if($res) {
  99. $is_redis==1 ? $redis->set($inc_key, $res) : S($inc_key, $res);
  100. }
  101. return $res;
  102. } else {
  103. $total = $livevideo_server->total;
  104. $page = $livevideo_server->page;
  105. if($total>$page*50) {
  106. $page += 1;
  107. $resPage = D('Livevideo')->get_wx_roomInfo($this->re_access_token, $page);
  108. $res = (object) array('page' => $page);
  109. $res->expire_time = time();
  110. $res->room_info = array_merge($livevideo_server->room_info, $resPage->room_info);
  111. $is_redis==1 ? $redis->set($inc_key, $res) : S($inc_key, $res);
  112. return $res;
  113. }
  114. return $livevideo_server;
  115. }
  116. }
  117. }
  118. }