抖音小程序

AlbumManageService.php 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <?php
  2. namespace App\Service;
  3. use App\Log;
  4. use App\Models\Album;
  5. use App\Models\Episode;
  6. use App\Models\Material;
  7. use App\Support\DouYinApi;
  8. class AlbumManageService
  9. {
  10. CONST BIND_PAGE = 'pages/subPackages/videoPlayer/index';
  11. public static function createAlbum($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation, $desp
  12. , $tagList, $qualification, $recordInfo, $recordAuditInfo, $episodeInfoList, &$errno) {
  13. try {
  14. $tagList = json_decode($tagList, 1);
  15. $coverList = json_decode($coverList, 1);
  16. # 短剧参数验证
  17. $albumParamsValidStatus = AlbumManageService::albumParamsValid($appId, $title, $seqNum, $coverList, $year, $albumStatus
  18. , $recommendation, $desp, $tagList, $qualification, $errno);
  19. if (!$albumParamsValidStatus) return false;
  20. # 如果备案审核信息不为空,校验备案信息
  21. if (!empty($recordAuditInfo)) {
  22. $recordAuditInfo = json_decode($recordAuditInfo, 1);
  23. $recordAuditInfoParamsValidStatus = AlbumManageService::recordAuditInfoParamsValid($recordAuditInfo, $errno);
  24. if (!$recordAuditInfoParamsValidStatus) return false;
  25. }
  26. # 如何剧集信息不为空,校验剧集信息
  27. if (!empty($episodeInfoList)) {
  28. $episodeInfoList = json_decode($episodeInfoList, 1);
  29. $episodeParamValidStatus = AlbumManageService::episodeParamsValid($episodeInfoList, $errno);
  30. if (!$episodeParamValidStatus) return false;
  31. }
  32. # 调用抖音接口
  33. $responseData = DouYinApi::createAlbum($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation
  34. , $desp, $tagList, $qualification, $recordInfo, $recordAuditInfo);
  35. $albumId = $responseData['album_id'] ?? '';
  36. if (empty($albumId)) {
  37. $errno = 2400; # 调用抖音创建短剧失败
  38. return false;
  39. }
  40. # 调用成功后将数据保存到系统
  41. $res = Album::saveData($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation, $desp, $tagList
  42. , $qualification, $albumId);
  43. if(!$res){
  44. $errno = 500;
  45. return false;
  46. }
  47. # 如果同时设置了剧集列表,则一并提交到抖音
  48. if (!empty($episodeInfoList)) {
  49. $responseData = DouYinApi::editAlbum($appId, $albumId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation
  50. , $desp, $tagList, $qualification, $recordInfo, $recordAuditInfo, $episodeInfoList);
  51. $episodeIdMap = $responseData['episode_id_map'] ?? [];
  52. if(empty($episodeIdMap)) {
  53. $errno = 2401;
  54. return false;
  55. }
  56. // 更新剧集信息
  57. $episodeSaveStatus = Episode::saveData($appId, $albumId, $episodeInfoList, $episodeIdMap);
  58. if(!$episodeSaveStatus) {
  59. $errno = 500;
  60. return false;
  61. }
  62. }
  63. return true;
  64. } catch (\Exception $exception) {
  65. Log::logError('创建短剧异常', [
  66. 'params' => [
  67. 'app_id' => $appId, 'title' => $title, 'seq_num' => $seqNum, 'cover_list' => $coverList, 'year' => $year,
  68. 'album_status' => $albumStatus, 'recommendation' => $recommendation, 'desp' => $desp, 'tag_list' => $tagList,
  69. 'qualification' => $qualification, 'record_info' => $recordInfo, 'record_audit_info' => $recordAuditInfo,
  70. 'episode_info_list' => $episodeInfoList
  71. ],
  72. 'exception' => [
  73. 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'message' => $exception->getMessage(),
  74. 'trace' => $exception->getTraceAsString()
  75. ]
  76. ]);
  77. $errno = 400;
  78. return false;
  79. }
  80. }
  81. public static function albumParamsValid($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation
  82. , $desp, $tagList, $qualification, &$errcode) {
  83. # 验证必要参数是否为空
  84. if(empty($appId) || empty($title) || empty($seqNum) || empty($coverList) || empty($year) || empty($albumStatus)||
  85. empty($recommendation) || empty($desp) || empty($tagList) || empty($qualification)) {
  86. $errcode = 1102; return false;
  87. }
  88. # 验证参数内容
  89. return true;
  90. }
  91. public static function recordAuditInfoParamsValid($recordAuditInfo, &$error) {
  92. if(!isset($recordAuditInfo['record_material'])) {
  93. $error = 1102;
  94. return false;
  95. }
  96. if(isset($recordAuditInfo['broadcast_record_info']) && (!isset($recordAuditInfo['broadcast_record_info']['record_type']) ||
  97. !isset($recordAuditInfo['broadcast_record_info']['broadcast_record_number']))) {
  98. $error = 1102;
  99. return false;
  100. }
  101. if(empty($recordAuditInfo['record_material']['name']) ||
  102. empty($recordAuditInfo['record_material']['duration']) ||
  103. empty($recordAuditInfo['record_material']['seqs_count']) ||
  104. empty($recordAuditInfo['record_material']['production_organisation']) ||
  105. empty($recordAuditInfo['record_material']['director']) ||
  106. empty($recordAuditInfo['record_material']['producer']) ||
  107. empty($recordAuditInfo['record_material']['actor']) ||
  108. empty($recordAuditInfo['record_material']['summary']) ||
  109. empty($recordAuditInfo['record_material']['cost_distribution_uri']) ||
  110. empty($recordAuditInfo['record_material']['assurance_uri']) ||
  111. empty($recordAuditInfo['record_material']['playlet_production_cost'])
  112. ){
  113. $error = 1102;
  114. return false;
  115. }
  116. return true;
  117. }
  118. public static function episodeParamsValid($episodeInfoList, &$errcode) {
  119. foreach($episodeInfoList as $episodeInfo) {
  120. if(empty($episodeInfo['title']) || empty($episodeInfo['seq']) || empty($episodeInfo['cover_list'])
  121. || empty($episodeInfo['open_video_id']) || !is_array($episodeInfo['cover_list'])) {
  122. $errcode = 1102;
  123. return false;
  124. }
  125. }
  126. return true;
  127. }
  128. public static function editAlbum($appId, $albumId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation, $desp
  129. , $tagList, $qualification, $recordInfo, $recordAuditInfo, $episodeInfoList, &$errno) {
  130. $tagList = json_decode($tagList, 1);
  131. $coverList = json_decode($coverList, 1);
  132. # 短剧参数验证
  133. $albumParamsValidStatus = AlbumManageService::albumParamsValid($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation
  134. , $desp, $tagList, $qualification, $errno);
  135. if(!$albumParamsValidStatus) return false;
  136. # 剧集参数验证
  137. $episodeInfoList = json_decode($episodeInfoList, 1);
  138. $episodeParamsValidStatus = AlbumManageService::episodeParamsValid($episodeInfoList, $errno);
  139. if(!$episodeParamsValidStatus) return false;
  140. # 如果备案审核信息不为空,校验备案信息
  141. if (!empty($recordAuditInfo)) {
  142. $recordAuditInfo = json_decode($recordAuditInfo, 1);
  143. $recordAuditInfoParamsValidStatus = AlbumManageService::recordAuditInfoParamsValid($recordAuditInfo, $errno);
  144. if (!$recordAuditInfoParamsValidStatus) return false;
  145. }
  146. # 调用抖音接口
  147. $responseData = DouYinApi::editAlbum($appId, $albumId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation
  148. , $desp, $tagList, $qualification, $recordInfo, $recordAuditInfo, $episodeInfoList);
  149. $albumId = $responseData['album_id'] ?? '';
  150. $version = $responseData['version'] ?? 0;
  151. $episodeIdMap = $responseData['episode_id_map'] ?? [];
  152. if(empty($episodeIdMap)) {
  153. $errno = 2401;
  154. return false;
  155. }
  156. # 调用成功后将数据保存到系统
  157. // 更新短剧信息
  158. $albumSaveRes = Album::saveData($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation, $desp
  159. , $tagList, $qualification, $albumId);
  160. // 更新剧集信息
  161. $episodeSaveStatus = Episode::saveData($appId, $albumId, $episodeInfoList, $episodeIdMap);
  162. if(!$albumStatus || !$episodeSaveStatus){
  163. $errno = 400;
  164. return false;
  165. }
  166. return true;
  167. }
  168. public static function bindPage($appId, $albumId, $episodeIdList, &$errno) {
  169. # 查询剧集基础信息
  170. $episodeInfoList = Episode::getInfoList($appId, $albumId, $episodeIdList);
  171. $path = self::BIND_PAGE;
  172. # 如果要绑定多个剧集
  173. foreach($episodeIdList as $episodeId) {
  174. $episodeInfo = $episodeInfoList->where('episode_id', $episodeId)->first();
  175. $seq = $episodeInfo->seq ?? null;
  176. if(empty($seq)) {
  177. continue;
  178. }
  179. $params = [
  180. ['key' => 'album_id', 'value' => strval($albumId)],
  181. ['key' => 'episode_id', 'value' => strval($episodeId)],
  182. ['key' => 'seq', 'value' => strval($seq)]
  183. ];
  184. $singleSchemaBind = [
  185. 'album_id' => $albumId, 'episode_id' => $episodeId, 'path' => $path, 'params' => $params
  186. ];
  187. $responseData = DouYinApi::bindPage($appId, $singleSchemaBind, 1);
  188. print_r($responseData);
  189. }
  190. }
  191. public static function albumAuth($maAppId, $appIdList, $albumId, $increment, &$error) {
  192. $responseData = DouYinApi::albumAuth($maAppId, $appIdList, $albumId, $increment);
  193. print_r($responseData);
  194. }
  195. public static function albumToExamine($appId, $albumId, &$error) {
  196. $responseData = DouYinApi::albumToExamine($appId, $albumId);
  197. print_r($responseData);
  198. }
  199. public static function albumOnline($appId, $albumId, $operate, $version, $errcode) {
  200. $responseData = DouYinApi::albumOnline($appId, $albumId, $operate, $version);
  201. print_r($responseData);
  202. }
  203. public static function albumFetch($appId, $queryType, $batchQuery, $singleQuery, $detailQuery) {
  204. $responseData = DouYinApi::albumFetch($appId, $queryType, $batchQuery, $singleQuery, $detailQuery);
  205. print_r($responseData);
  206. }
  207. public static function albumList($appId, $keyword, $page, $pageSize) {
  208. list($list, $count) = Album::getList([
  209. 'app_id' => $appId, 'keyword' => $keyword
  210. ], $page, $pageSize);
  211. # 数据格式化
  212. foreach($list as $info) {
  213. # 封面图处理
  214. $coverList = explode(',', $info->cover_list);
  215. # 根据封面id获取封面url
  216. $picInfo = Material::getPicList($appId, $coverList);
  217. $coverInfo = $picInfo->first();
  218. $info->cover_url = $coverInfo->oss_url ?? '';
  219. }
  220. return [$list, $count];
  221. }
  222. public static function albumDetail($albumId) {
  223. }
  224. }