阶段备份提交
Showing
6 changed files
with
114 additions
and
37 deletions
| ... | @@ -13,7 +13,8 @@ class BaseController extends Controller | ... | @@ -13,7 +13,8 @@ class BaseController extends Controller |
| 13 | * 基础变量 | 13 | * 基础变量 |
| 14 | * @var string | 14 | * @var string |
| 15 | */ | 15 | */ |
| 16 | private $domain, $cp_id, $key; | 16 | protected $domain, $cp_id; |
| 17 | private $key; | ||
| 17 | 18 | ||
| 18 | public function __construct() | 19 | public function __construct() |
| 19 | { | 20 | { |
| ... | @@ -44,13 +45,11 @@ class BaseController extends Controller | ... | @@ -44,13 +45,11 @@ class BaseController extends Controller |
| 44 | /** | 45 | /** |
| 45 | * 获取签名和去空的参数 | 46 | * 获取签名和去空的参数 |
| 46 | * @param array $array | 47 | * @param array $array |
| 47 | * @param int $timestamp | ||
| 48 | * @return array | 48 | * @return array |
| 49 | */ | 49 | */ |
| 50 | private function signData(array $array, int $timestamp) | 50 | protected function signData(array $array) |
| 51 | { | 51 | { |
| 52 | $common_params = [ | 52 | $common_params = [ |
| 53 | 'timestamp' => $timestamp, | ||
| 54 | 'cp_id' => $this->cp_id | 53 | 'cp_id' => $this->cp_id |
| 55 | ]; | 54 | ]; |
| 56 | $param_arr = array_merge($common_params,$array); | 55 | $param_arr = array_merge($common_params,$array); |
| ... | @@ -88,8 +87,8 @@ class BaseController extends Controller | ... | @@ -88,8 +87,8 @@ class BaseController extends Controller |
| 88 | } else { | 87 | } else { |
| 89 | $params = $reqData; | 88 | $params = $reqData; |
| 90 | } | 89 | } |
| 91 | $timestamp = time(); | 90 | $params['timestamp'] = time(); |
| 92 | return $this->signData($params,$timestamp); | 91 | return $this->signData($params); |
| 93 | } | 92 | } |
| 94 | 93 | ||
| 95 | /** | 94 | /** |
| ... | @@ -115,18 +114,14 @@ class BaseController extends Controller | ... | @@ -115,18 +114,14 @@ class BaseController extends Controller |
| 115 | $response = $client->request('POST', $url, ['json' => $data]); | 114 | $response = $client->request('POST', $url, ['json' => $data]); |
| 116 | break; | 115 | break; |
| 117 | } | 116 | } |
| 118 | $data = json_decode($response->getBody()->getContents(), true); | 117 | $respArr = json_decode($response->getBody()->getContents(), true); |
| 119 | Log::channel('api')->info(__METHOD__, $data); | 118 | Log::channel('api')->info(__METHOD__, $respArr); |
| 120 | if (200 !== $data['code']) { | 119 | if (200 !== $respArr['code']) { |
| 121 | return Response::error(-1,$data['msg'] ?? '操作失败'); | 120 | return Response::error(-1,$respArr['msg'] ?? '操作失败'); |
| 122 | } else { | 121 | } else { |
| 123 | $response_path = 'Icms/'.$uri; | 122 | $response_file = database_path('icms/' . $uri . '.resp'); |
| 124 | if (! is_dir($response_path)) { | 123 | file_put_contents($response_file, var_export($respArr['data'],true)); |
| 125 | @mkdir($response_path,'0777'); | 124 | return Response::success($respArr['data']); |
| 126 | } | ||
| 127 | $response_file = database_path($response_path.'.resp'); | ||
| 128 | file_put_contents($response_file, var_export($data['data'],true)); | ||
| 129 | return Response::success($data['data']); | ||
| 130 | } | 125 | } |
| 131 | } catch (\Exception $e) { | 126 | } catch (\Exception $e) { |
| 132 | Log::channel('api')->error(__METHOD__, ['msg'=>$e->getMessage()]); | 127 | Log::channel('api')->error(__METHOD__, ['msg'=>$e->getMessage()]); | ... | ... |
| ... | @@ -2,6 +2,8 @@ | ... | @@ -2,6 +2,8 @@ |
| 2 | 2 | ||
| 3 | namespace App\Http\Controllers\Icms; | 3 | namespace App\Http\Controllers\Icms; |
| 4 | 4 | ||
| 5 | use App\Helper\Response; | ||
| 6 | use App\Jobs\HandleAlbumStatus; | ||
| 5 | use Illuminate\Http\Request; | 7 | use Illuminate\Http\Request; |
| 6 | 8 | ||
| 7 | class WorkController extends BaseController | 9 | class WorkController extends BaseController |
| ... | @@ -28,7 +30,7 @@ class WorkController extends BaseController | ... | @@ -28,7 +30,7 @@ class WorkController extends BaseController |
| 28 | public function submitTme(Request $request) | 30 | public function submitTme(Request $request) |
| 29 | { | 31 | { |
| 30 | //todo:参数验证 | 32 | //todo:参数验证 |
| 31 | return $this->doApi('save-album'); | 33 | return $this->doApi('submit-tme'); |
| 32 | } | 34 | } |
| 33 | 35 | ||
| 34 | /** | 36 | /** |
| ... | @@ -137,4 +139,28 @@ class WorkController extends BaseController | ... | @@ -137,4 +139,28 @@ class WorkController extends BaseController |
| 137 | //todo:参数验证 | 139 | //todo:参数验证 |
| 138 | return $this->doApi('sign-subject'); | 140 | return $this->doApi('sign-subject'); |
| 139 | } | 141 | } |
| 142 | |||
| 143 | /** | ||
| 144 | * 异步通知专辑上架信息(队列处理) | ||
| 145 | * @param Request $request | ||
| 146 | * @return \Illuminate\Http\JsonResponse | ||
| 147 | */ | ||
| 148 | public function albumStatus(Request $request) | ||
| 149 | { | ||
| 150 | $callData = $request->only(['album_id','tme_album_id','album_status','song_id','timestamp']); | ||
| 151 | $callSign = $request->post('sign'); | ||
| 152 | $callCpId = $request->post('cp_id'); | ||
| 153 | if ($callCpId !== $this->cp_id) { | ||
| 154 | return Response::error(40001,'没有请求权限!'); | ||
| 155 | } | ||
| 156 | //验签 | ||
| 157 | $signData = $this->signData($callData); | ||
| 158 | if ($callSign !== $signData['sign']) { | ||
| 159 | return Response::error(40003,'签名鉴权未通过!'); | ||
| 160 | } | ||
| 161 | |||
| 162 | //入队批量处理业务(暂时只保存请求数据) | ||
| 163 | HandleAlbumStatus::dispatch($callData)->onQueue('handle-album-status'); | ||
| 164 | return response()->json(['code' => 200,'data' => true,'message' => 'OK']); | ||
| 165 | } | ||
| 140 | } | 166 | } | ... | ... |
app/Jobs/HandleAlbumStatus.php
0 → 100644
| 1 | <?php | ||
| 2 | |||
| 3 | namespace App\Jobs; | ||
| 4 | |||
| 5 | use Illuminate\Bus\Queueable; | ||
| 6 | use Illuminate\Contracts\Queue\ShouldQueue; | ||
| 7 | use Illuminate\Foundation\Bus\Dispatchable; | ||
| 8 | use Illuminate\Queue\InteractsWithQueue; | ||
| 9 | use Illuminate\Queue\SerializesModels; | ||
| 10 | |||
| 11 | class HandleAlbumStatus implements ShouldQueue | ||
| 12 | { | ||
| 13 | use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; | ||
| 14 | |||
| 15 | private $callData = []; | ||
| 16 | |||
| 17 | /** | ||
| 18 | * Create a new job instance. | ||
| 19 | * @param array $callData | ||
| 20 | * @return void | ||
| 21 | */ | ||
| 22 | public function __construct(array $callData) | ||
| 23 | { | ||
| 24 | $this->callData = $callData; | ||
| 25 | } | ||
| 26 | |||
| 27 | /** | ||
| 28 | * Execute the job. | ||
| 29 | * | ||
| 30 | * @return void | ||
| 31 | */ | ||
| 32 | public function handle() | ||
| 33 | { | ||
| 34 | //php artisan queue:work --queue=handle-album-status --tries=3 --sleep=3 | ||
| 35 | |||
| 36 | $response_file = database_path('icms/album-status.notify'); | ||
| 37 | file_put_contents($response_file, | ||
| 38 | '======接收回调数据在'.date('Y-m-n H:i:s').'======'. PHP_EOL | ||
| 39 | .var_export($this->callData,true). PHP_EOL,FILE_APPEND); | ||
| 40 | } | ||
| 41 | |||
| 42 | /** | ||
| 43 | * @param null $exception | ||
| 44 | */ | ||
| 45 | public function fail($exception = null) | ||
| 46 | { | ||
| 47 | //todo: Artisan创建任务失败记录表 | ||
| 48 | } | ||
| 49 | } |
| 1 | <?php | 1 | <?php |
| 2 | return [ | 2 | return [ |
| 3 | 'id' => '', | 3 | 'id' => 37968, |
| 4 | 'album_name' => '海葵测试专辑01',//专辑名 | 4 | 'album_name' => '海葵测试专辑01',//专辑名 |
| 5 | 'tran_name' => '测试专辑01',//翻译名称 | 5 | 'tran_name' => '测试专辑01',//翻译名称 |
| 6 | 'album_cover' => 'https://legal-test-1305250541.cos.ap-shanghai.myqcloud.com/logo/logo.png?q-sign-algorithm=sha1&q-ak=AKIDCT_ihvi7dCVjXklSUcitkOuvzUm-40NrZw0Aljp7XOLd1XZwU4LzHqizS4WQSR8B&q-sign-time=1639989345;1639992945&q-key-time=1639989345;1639992945&q-header-list=host&q-url-param-list=&q-signature=ddbebf368aee6b4f413002a4b27c93e045b5261d&x-cos-security-token=DQxyuKoPLh59NX7U7UbmtVcdPz7iAaha854bb74d0a2ea2a0939bc0227b133da6X5zte-0TxXocfdG-GF2HIRZ3HU0iYAtmnH7EHo3ELSGGJozkOhTPe5L0e1SZh6Rjxi90Q8-e-3dQJ-GzCSyu-NJnMFjfB5rMYKxYcLAE1YCCF_Yu8S64oy6o-O9TP2HbM6ZwqPdcI8JnYpcuRys9M3Of8w4bAr87K6ghv3wjpwDVcNCAC-jp8Wu_JQjRK6tb',//专辑封面url | 6 | 'album_cover' => 'https://legal-test-1305250541.cos.ap-shanghai.myqcloud.com/logo/logo.png?q-sign-algorithm=sha1&q-ak=AKIDCT_ihvi7dCVjXklSUcitkOuvzUm-40NrZw0Aljp7XOLd1XZwU4LzHqizS4WQSR8B&q-sign-time=1639989345;1639992945&q-key-time=1639989345;1639992945&q-header-list=host&q-url-param-list=&q-signature=ddbebf368aee6b4f413002a4b27c93e045b5261d&x-cos-security-token=DQxyuKoPLh59NX7U7UbmtVcdPz7iAaha854bb74d0a2ea2a0939bc0227b133da6X5zte-0TxXocfdG-GF2HIRZ3HU0iYAtmnH7EHo3ELSGGJozkOhTPe5L0e1SZh6Rjxi90Q8-e-3dQJ-GzCSyu-NJnMFjfB5rMYKxYcLAE1YCCF_Yu8S64oy6o-O9TP2HbM6ZwqPdcI8JnYpcuRys9M3Of8w4bAr87K6ghv3wjpwDVcNCAC-jp8Wu_JQjRK6tb',//专辑封面url |
| ... | @@ -8,7 +8,7 @@ return [ | ... | @@ -8,7 +8,7 @@ return [ |
| 8 | 'album_type' => 17,//专辑类型ID int | 8 | 'album_type' => 17,//专辑类型ID int |
| 9 | 'region' => 18,//地区 int 17: "港台"; 18: "内地"; 19: "日韩"; 20: "欧美"; 21: "其他"; 22: "东南亚"; 23: "未知"; | 9 | 'region' => 18,//地区 int 17: "港台"; 18: "内地"; 19: "日韩"; 20: "欧美"; 21: "其他"; 22: "东南亚"; 23: "未知"; |
| 10 | 'language' => '0,1',//语言 string,多种语言逗号分割 | 10 | 'language' => '0,1',//语言 string,多种语言逗号分割 |
| 11 | 'album_genre' => '1|2',//专辑流派 string 单竖杠分割 | 11 | 'album_genre' => 'Children\'s|Country',//专辑流派 string 单竖杠分割 |
| 12 | 'album_upc' => '',//专辑UPC | 12 | 'album_upc' => '',//专辑UPC |
| 13 | 'version' => '1.0',//专辑版本 | 13 | 'version' => '1.0',//专辑版本 |
| 14 | 'brand_company' => '',//外显厂牌公司 | 14 | 'brand_company' => '',//外显厂牌公司 |
| ... | @@ -24,7 +24,7 @@ return [ | ... | @@ -24,7 +24,7 @@ return [ |
| 24 | 'signsubject_id' => 1,//签约主体ID | 24 | 'signsubject_id' => 1,//签约主体ID |
| 25 | 'song_list' => [ | 25 | 'song_list' => [ |
| 26 | [ | 26 | [ |
| 27 | 'id' => 0, | 27 | 'id' => 100, |
| 28 | 'external_id' => '',//外部歌曲ID - 海葵歌曲ID? | 28 | 'external_id' => '',//外部歌曲ID - 海葵歌曲ID? |
| 29 | 'name' => '想',//歌曲名 | 29 | 'name' => '想',//歌曲名 |
| 30 | 'subtitle' => '',//副标题 | 30 | 'subtitle' => '',//副标题 | ... | ... |
| ... | @@ -13,21 +13,27 @@ use Illuminate\Support\Facades\Route; | ... | @@ -13,21 +13,27 @@ use Illuminate\Support\Facades\Route; |
| 13 | | | 13 | | |
| 14 | */ | 14 | */ |
| 15 | 15 | ||
| 16 | Route::group(['middleware'=>'throttle:100,1'], function (){ | 16 | Route::group(['middleware'=>'throttle:60,1'], function (){ |
| 17 | Route::get('/',function(){ | 17 | Route::get('/',function(){ |
| 18 | return 'Welcome To ICMS !!'; | 18 | return 'Welcome To ICMS !!'; |
| 19 | }); | 19 | }); |
| 20 | 20 | ||
| 21 | Route::post('album-list','WorkController@albumList'); //专辑列表 | 21 | /** |
| 22 | Route::post('submit-tme','WorkController@submitTme'); //专辑上线 | 22 | * 主动请求 |
| 23 | Route::post('get-album','WorkController@getAlbum'); //获取专辑详情 | 23 | */ |
| 24 | // Route::post('del-album','WorkController@delAlbum'); //删除专辑草稿 | 24 | Route::post('album-list','WorkController@albumList'); //专辑列表 |
| 25 | Route::post('create-shower','WorkController@createShower'); //艺人创建 | 25 | Route::post('submit-tme','WorkController@submitTme'); //专辑上线 |
| 26 | Route::post('shower-list','WorkController@showerList'); //艺人查询 | 26 | Route::post('get-album','WorkController@getAlbum'); //获取专辑详情 |
| 27 | Route::post('get-leaders','WorkController@getLeaders'); //查询候选负责人 | 27 | Route::post('create-shower','WorkController@createShower'); //艺人创建 |
| 28 | Route::post('check-repeat','WorkController@checkRepeat'); //作品重复检测 | 28 | Route::post('shower-list','WorkController@showerList'); //艺人查询 |
| 29 | Route::post('original-company','WorkController@originalCompany'); //原始版权公司列表 | 29 | Route::post('get-leaders','WorkController@getLeaders'); //查询候选负责人 |
| 30 | Route::post('work-file','WorkController@workFile'); //作品录入文件上传 | 30 | Route::post('check-repeat','WorkController@checkRepeat'); //作品重复检测 |
| 31 | Route::post('sign-subject','WorkController@signSubject'); //获取授权主体列表 | 31 | Route::post('original-company','WorkController@originalCompany'); //原始版权公司列表 |
| 32 | Route::post('work-file','WorkController@workFile'); //作品录入文件上传 | ||
| 33 | Route::post('sign-subject','WorkController@signSubject'); //获取授权主体列表 | ||
| 32 | 34 | ||
| 33 | }); | 35 | /** |
| 36 | * 回调通知接收 | ||
| 37 | */ | ||
| 38 | Route::post('notify-album-status','WorkController@albumStatus'); | ||
| 39 | }); | ... | ... |
-
Please register or sign in to post a comment