VideoSeriesWechatCheckController.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace Modules\Video\Http\Controllers;
  3. use Catch\Base\CatchController;
  4. use Illuminate\Foundation\Validation\ValidatesRequests;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Redis;
  8. use Modules\Common\Errors\Errors;
  9. use Modules\Common\Exceptions\CommonBusinessException;
  10. use Modules\Manage\Services\WechatMiniprogramService;
  11. use Modules\Video\Services\WechatCheckSyncService;
  12. class VideoSeriesWechatCheckController extends CatchController
  13. {
  14. use ValidatesRequests;
  15. /**
  16. * 剧集同步到微信
  17. * @param Request $request
  18. */
  19. public function syncWechat(Request $request) {
  20. $this->validate($request, [
  21. 'series_ids' => 'required|array'
  22. ]);
  23. $series_ids = $request->input('series_ids');
  24. $series = DB::table('video_series')
  25. ->join('videos', 'video_series.video_id', 'videos.id')
  26. ->whereIn('video_series.id', $series_ids)
  27. ->where(['video_series.is_enabled' => 1])
  28. ->select('videos.name', 'video_series.series_sequence','video_series.id', 'video_series.video_key')
  29. ->get();
  30. if(collect($series_ids)->count() != $series->count()) {
  31. CommonBusinessException::throwError(Errors::VIDEO_SERIES_NOT_EXISTS);
  32. }
  33. $appid = WechatMiniprogramService::getDuanjuCheckAppid();
  34. $accessToken = WechatMiniprogramService::getDuanjuCheckAccessToken($appid);
  35. $now = date('Y-m-d H:i:s');
  36. foreach ($series as $item) {
  37. $item->video_url = config('common.qiniu.publicVideoLinkDomain') . DIRECTORY_SEPARATOR . $item->video_key;
  38. $item->media_name = sprintf('%s - 第%s集', $item->name, $item->series_sequence);
  39. $taskId = WechatCheckSyncService::pullupload($item, $accessToken);
  40. DB::table('video_series_wechat_check')
  41. ->where(['series_id' => $item->id, 'is_enabled' => 1])
  42. ->update(['is_enabled' => 0, 'updated_at' => $now]);
  43. DB::table('video_series_wechat_check')
  44. ->insert([
  45. 'series_id' => $item->id,
  46. 'sync_task_id' => $taskId, 'appid' => $appid,
  47. 'created_at' => $now, 'updated_at' => $now
  48. ]);
  49. }
  50. return 'ok';
  51. }
  52. /**
  53. * 获取微信那边的剧集播放链接
  54. * @param Request $request
  55. * @return mixed
  56. * @throws \Illuminate\Validation\ValidationException
  57. */
  58. public function medialink(Request $request) {
  59. $this->validate($request, [
  60. 'series_id' => 'required'
  61. ]);
  62. $seriesId = $request->input('series_id');
  63. $redisKey = WechatCheckSyncService::getWechatMediaLinkRedisKey($seriesId);
  64. $link = Redis::get($redisKey);
  65. if($link) {
  66. return $link;
  67. }
  68. $medialinkInfo = WechatCheckSyncService::getMedialinkInfo($seriesId);
  69. $link = $medialinkInfo['mp4_url'];
  70. Redis::setex($redisKey, 6000, $link);
  71. return $link;
  72. }
  73. }