VideoSeriesWechatCheckController.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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 Illuminate\Support\Facades\Response;
  9. use Modules\Common\Errors\Errors;
  10. use Modules\Common\Exceptions\CommonBusinessException;
  11. use Modules\Manage\Services\WechatMiniprogramService;
  12. use Modules\Video\Services\WechatCheckSyncService;
  13. class VideoSeriesWechatCheckController extends CatchController
  14. {
  15. use ValidatesRequests;
  16. /**
  17. * 剧集同步到微信
  18. * @param Request $request
  19. */
  20. public function syncWechat(Request $request) {
  21. $this->validate($request, [
  22. 'series_ids' => 'required|array'
  23. ]);
  24. $series_ids = $request->input('series_ids');
  25. $series = DB::table('video_series')
  26. ->join('videos', 'video_series.video_id', 'videos.id')
  27. ->whereIn('video_series.id', $series_ids)
  28. ->where(['video_series.is_enabled' => 1])
  29. ->select('video_series.video_id', 'videos.name', 'video_series.series_sequence',
  30. 'video_series.id', 'video_series.video_key')
  31. ->get();
  32. if(collect($series_ids)->count() != $series->count()) {
  33. CommonBusinessException::throwError(Errors::VIDEO_SERIES_NOT_EXISTS);
  34. }
  35. $appid = WechatMiniprogramService::getDuanjuCheckAppid();
  36. $accessToken = WechatMiniprogramService::getDuanjuCheckAccessToken($appid);
  37. $now = date('Y-m-d H:i:s');
  38. foreach ($series as $item) {
  39. $item->video_url = config('common.qiniu.publicVideoLinkDomain') . DIRECTORY_SEPARATOR . $item->video_key;
  40. $item->media_name = sprintf('%s - 第%s集', $item->name, $item->series_sequence);
  41. $parsedContent = WechatCheckSyncService::pullupload($item, $accessToken);
  42. if(false === $parsedContent || (0 != ($parsedContent['errcode'] ?? 0))) {
  43. CommonBusinessException::throwError(Errors::SYNC_WECHAT_NOT_OK);
  44. }
  45. $taskId = $parsedContent['task_id'];
  46. DB::table('video_series_wechat_check')
  47. ->where(['series_id' => $item->id, 'is_enabled' => 1])
  48. ->update(['is_enabled' => 0, 'updated_at' => $now]);
  49. DB::table('video_series_wechat_check')
  50. ->insert([
  51. 'series_id' => $item->id,
  52. 'sync_task_id' => $taskId, 'appid' => $appid,
  53. 'created_at' => $now, 'updated_at' => $now,
  54. 'video_id' => $item->video_id,
  55. ]);
  56. }
  57. return 'ok';
  58. }
  59. /**
  60. * 获取微信方的剧集播放链接
  61. * @param Request $request
  62. * @return mixed
  63. * @throws \Illuminate\Validation\ValidationException
  64. */
  65. public function medialink(Request $request) {
  66. $this->validate($request, [
  67. 'series_id' => 'required'
  68. ]);
  69. $seriesId = $request->input('series_id');
  70. $redisKey = WechatCheckSyncService::getWechatMediaLinkRedisKey($seriesId);
  71. $link = Redis::get($redisKey);
  72. if($link) {
  73. return $link;
  74. }
  75. $medialinkInfo = WechatCheckSyncService::getMedialinkInfo($seriesId);
  76. if(false === $medialinkInfo) {
  77. CommonBusinessException::throwError(Errors::GET_WECHAT_MEDIA_LINK_ERROR);
  78. }
  79. $link = $medialinkInfo['mp4_url'];
  80. Redis::setex($redisKey, 6000, $link);
  81. return $link;
  82. }
  83. public function listEvidence(Request $request) {
  84. $this->validate($request, [
  85. 'series_id' => 'required'
  86. ]);
  87. $info = DB::table('video_series_wechat_check')
  88. ->where([
  89. 'series_id' => $request->input('series_id'),
  90. 'is_enabled' => 1
  91. ])->orderBy('id', 'desc')
  92. ->select('evidence_material_id_list', 'appid')->first();
  93. if($info) {
  94. $evidence_material_id_lists = \json_decode($info->evidence_material_id_list, true);
  95. $accessToken = WechatMiniprogramService::getDuanjuCheckAccessToken($info->appid);
  96. }
  97. }
  98. public function test(Request $request) {
  99. foreach (['1228789.jpg'] as $i) {
  100. $path = storage_path(uniqid());
  101. file_put_contents($path, file_put_contents(app_path($i)));
  102. return response()->file($path);
  103. }
  104. }
  105. }