Commit f20c1efe f20c1efe7ecb2583d97de19a398cb3d94c0a6cb8 by mengfan.xie

release

1 parent b1859c80
...@@ -49,4 +49,12 @@ class CacheKeyTools ...@@ -49,4 +49,12 @@ class CacheKeyTools
49 { 49 {
50 return config('cache.key')['districts']; 50 return config('cache.key')['districts'];
51 } 51 }
52
53 /**
54 * @return mixed
55 */
56 public static function tmeAccessToken()
57 {
58 return config('cache.key')['tme_access_token'];
59 }
52 } 60 }
......
...@@ -2,9 +2,12 @@ ...@@ -2,9 +2,12 @@
2 2
3 namespace App\Http\Controllers\Release; 3 namespace App\Http\Controllers\Release;
4 4
5 use App\Helper\CacheKeyTools;
5 use App\Helper\Response; 6 use App\Helper\Response;
6 use App\Http\Controllers\Controller; 7 use App\Http\Controllers\Controller;
8 use App\Models\Legal\Channel;
7 use GuzzleHttp\Client; 9 use GuzzleHttp\Client;
10 use Illuminate\Support\Facades\Cache;
8 use Illuminate\Support\Facades\Log; 11 use Illuminate\Support\Facades\Log;
9 12
10 class BaseController extends Controller 13 class BaseController extends Controller
...@@ -36,10 +39,12 @@ class BaseController extends Controller ...@@ -36,10 +39,12 @@ class BaseController extends Controller
36 39
37 $respArr = json_decode($response->getBody()->getContents(), true); 40 $respArr = json_decode($response->getBody()->getContents(), true);
38 Log::channel('api')->info(__METHOD__, $respArr); 41 Log::channel('api')->info(__METHOD__, $respArr);
39 if (200 !== $respArr['code']) { 42 if (0 !== (int)$respArr['code']) {
40 return null; 43 return null;
41 } else { 44 } else {
42 return $respArr['data']; 45 $res = $respArr['data'];
46 Cache::put(CacheKeyTools::tmeAccessToken(), $res['accessToken'], ($res['expire'] ?? 900) - 100); // 加入缓存
47 return $res['accessToken'];
43 } 48 }
44 } catch (\Exception $e) { 49 } catch (\Exception $e) {
45 Log::channel('api')->error(__METHOD__, ['msg'=>$e->getMessage()]); 50 Log::channel('api')->error(__METHOD__, ['msg'=>$e->getMessage()]);
...@@ -75,35 +80,35 @@ class BaseController extends Controller ...@@ -75,35 +80,35 @@ class BaseController extends Controller
75 * @param bool $isLocal 80 * @param bool $isLocal
76 * @return array 81 * @return array
77 */ 82 */
78 private function requestData(string $uri, array $reqData, bool $isLocal = true) 83 private function parseData(string $uri, array $reqData, bool $isLocal = true)
79 { 84 {
85 if (!$accessToken = Cache::get(CacheKeyTools::tmeAccessToken())) {
86 $accessToken = $this->getToken();
87 }
80 if ($isLocal) { 88 if ($isLocal) {
81 $data_file = database_path('Release/'.$uri.'.query.php'); 89 $data_file = database_path('Release/'.last(explode("/",$uri)).'.query.php');
82 $params = include("$data_file"); 90 $params = include("$data_file");
91 $params['tmeBrandId'] = 105737;
83 } else { 92 } else {
84 $params = $reqData; 93 $params = $reqData;
85 } 94 }
86 $heaers['appId'] = $this->appId; 95 $heaers['appId'] = $this->appId;
87 $heaers['accessToken'] = $this->appId; 96 $heaers['accessToken'] = $accessToken;
88 $heaers['timestamp'] = (string)date('YmdHis'); 97 $heaers['timestamp'] = (string)date('YmdHis');
89 $heaers['signMethod'] = 'md5';
90 $heaers['sign'] = 'md5';
91 $heaers['traceId'] = 'md5'; 98 $heaers['traceId'] = 'md5';
99
92 return $this->signData($params); 100 return $this->signData($params);
93 } 101 }
94 102
95 /** 103 /**
96 * 请求接口 104 * 请求接口
97 * @param string $uri
98 * @param string $method
99 * @param array $reqData
100 * @return \Illuminate\Http\JsonResponse|mixed
101 * @throws \GuzzleHttp\Exception\GuzzleException 105 * @throws \GuzzleHttp\Exception\GuzzleException
102 */ 106 */
103 protected function doApi(string $uri, array $reqData = [], string $method = 'POST') 107 protected function doApi(string $uri, array $reqData = [], string $method = 'POST')
104 { 108 {
105 $url = rtrim($this->domain,'/').'/'.$uri; 109 $this->getSign();
106 $data = $this->requestData($uri, $reqData); 110 $url = rtrim($this->domain,'/').'/'.ltrim($uri,'/');
111 $data = $this->parseData($uri, $reqData);
107 try { 112 try {
108 $client = new Client(['verify'=>false]); //实体公钥['verify'=>'/path/to/public.pem'] 113 $client = new Client(['verify'=>false]); //实体公钥['verify'=>'/path/to/public.pem']
109 switch (strtoupper($method)) { 114 switch (strtoupper($method)) {
...@@ -117,7 +122,7 @@ class BaseController extends Controller ...@@ -117,7 +122,7 @@ class BaseController extends Controller
117 } 122 }
118 $respArr = json_decode($response->getBody()->getContents(), true); 123 $respArr = json_decode($response->getBody()->getContents(), true);
119 Log::channel('api')->info(__METHOD__, $respArr); 124 Log::channel('api')->info(__METHOD__, $respArr);
120 if (200 !== $respArr['code']) { 125 if (0 !== (int)$respArr['code']) {
121 return Response::error(-1,$respArr['msg'] ?? '操作失败'); 126 return Response::error(-1,$respArr['msg'] ?? '操作失败');
122 } else { 127 } else {
123 $response_file = database_path('release/' . $uri . '.resp'); 128 $response_file = database_path('release/' . $uri . '.resp');
...@@ -131,6 +136,70 @@ class BaseController extends Controller ...@@ -131,6 +136,70 @@ class BaseController extends Controller
131 } 136 }
132 137
133 138
139 /**
140 * 获取签名和去空的参数
141 * @param array $array
142 * @return array
143 */
144 protected function getSign()
145 {
146 $accessToken = $this->getToken();
147 if (!$accessToken = Cache::get(CacheKeyTools::tmeAccessToken())) {
148 $accessToken = $this->getToken();
149 }
150 // if ($isLocal) {
151 // $data_file = database_path('Release/'.last(explode("/",$uri)).'.query.php');
152 // $params = include("$data_file");
153 // } else {
154 // $params = $reqData;
155 // }
156 $heaers['appId'] = $this->appId;
157 $heaers['accessToken'] = $accessToken;
158 $heaers['timestamp'] = (string)date('YmdHis');
159 $heaers['traceId'] = 'md5';
160
161 $common_params = [
162 "batchId" => "8934234012312323235",
163 "phone" => "130****0815",
164 "templateId" => "M000198",
165 "bizType"=> 1,
166 "templateVariable"=> [
167 "titleMap"=> ["k"=>"v"],
168 "contentMap"=> ["k"=>"v"],
169 ],
170 "waterId"=> "8934234012312323234",
171 "platformType"=>"musician",
172 "tenant"=>"musician",
173 "accountId"=>6793497
174 ];
175 $common_params = array_merge($common_params,$heaers);
176 ksort($common_params);
177 $params = '';
178 foreach ($common_params as $k=>$v)
179 {
180 if ('' === $v || null === $v || [] === $v) {
181 continue;
182 }
183 if (is_array($v)) {
184 $params .= $k . json_encode($this->handleSubArrayNumber($v));
185 } else {
186 $params .= $k . $v;
187 }
188 }
189 $result = $this->str_to_utf8('appSecret' .$this->appSecret. $params);
190 echo '拼装好的utf8字符串:'.$result;
191
192 $result = md5($result);
193 echo '摘要后的sign结果(16位):' . substr(md5($result), 8, 16);
194 dd($result);
195 return $result;
196 }
197
198 function str_to_utf8($str = '') {
199 $current_encode = mb_detect_encoding($str, array("ASCII","GB2312","GBK",'BIG5','UTF-8'));
200 $encoded_str = mb_convert_encoding($str, 'UTF-8', $current_encode);
201 return $encoded_str;
202 }
134 203
135 /** 204 /**
136 * 签名需要,递归处理子数组中Int型数字转换成字符串 205 * 签名需要,递归处理子数组中Int型数字转换成字符串
......
...@@ -3,22 +3,62 @@ ...@@ -3,22 +3,62 @@
3 namespace App\Http\Controllers\Release; 3 namespace App\Http\Controllers\Release;
4 4
5 use App\Helper\Response; 5 use App\Helper\Response;
6 use App\Jobs\HandleAlbumStatus;
7 use Illuminate\Http\Request; 6 use Illuminate\Http\Request;
8 7
8
9 class WorkController extends BaseController 9 class WorkController extends BaseController
10 { 10 {
11 /** 11 /**
12 * 专辑列表 12 * 上传文件
13 * @param Request $request 13 * @param Request $request
14 * @return \Illuminate\Http\JsonResponse|mixed
15 * @throws \GuzzleHttp\Exception\GuzzleException
16 */ 14 */
17 public function albumList(Request $request) 15 public function Upload(Request $request)
18 { 16 {
19 //todo:参数验证
20 // dd(basename($request->getRequestUri())); 17 // dd(basename($request->getRequestUri()));
21 return $this->doApi('album-list'); 18 return $this->doApi('content/upload',$request->all());
19 }
20
21 /**
22 * @param Request $request
23 */
24 public function albumOnline(Request $request)
25 {
26 return $this->doApi('content/commitContent',$request->all());
27 }
28
29 /**
30 * @param Request $request
31 */
32 public function singerQuery(Request $request)
33 {
34 return $this->doApi('content/searchSinger',$request->all());
35 }
36
37 /**
38 * @param Request $request
39 */
40 public function singerCreate(Request $request)
41 {
42 return $this->doApi('content/createSinger',$request->all());
22 } 43 }
23 44
45 /**
46 * @param Request $request
47 */
48 public function originalCompanyQuery(Request $request)
49 {
50 return $this->doApi('content/queryOriginalCopyrightCompanyList',$request->all());
51 }
52
53 /**
54 * @param Request $request
55 */
56 public function releasedAlbumQuery(Request $request)
57 {
58 return $this->doApi('content/queryComitResult',$request->all());
59 }
60
61
62
63
24 } 64 }
......
...@@ -114,6 +114,7 @@ return [ ...@@ -114,6 +114,7 @@ return [
114 'bills_confirm' => 'serial:#serial_no#', 114 'bills_confirm' => 'serial:#serial_no#',
115 'bills_settle_no' => 'bills:settle:no', 115 'bills_settle_no' => 'bills:settle:no',
116 'districts' => 'districts', 116 'districts' => 'districts',
117 'tme_access_token' => 'tme_access_token'
117 ] 118 ]
118 119
119 ]; 120 ];
......
1 <?php
2 return [
3 'originalCompayName' => '海葵测试艺人02',//艺人名
4 ];
1 <?php
2 return [
3 'singer_name' => '海葵测试艺人02',//艺人名
4 'trans_name' => '测试艺人02',//艺人翻译名
5 'area' => 1,//艺人活跃地区 int 0 港台; 1 内地; 2 日韩; 3 欧美; 4 其他; 5 东南亚; 6 未知;
6 'type' => 0,//艺人类型 int 0: 男; 1: 女; 2: 组合; 3: 虚拟; 4: 其他;
7 'singer_desc' => '海葵测试艺人02-简介',//艺人简介
8 'singer_photo_list' => [
9 ['name'=>'图片1','url'=>'https://legal-test-1305250541.cos.ap-shanghai.myqcloud.com/avatar/1.jpg?q-sign-algorithm=sha1&q-ak=AKID5jPFknzXggeaZJa8BRSrJkUsmdR_jI_q3wDmCrNYqVqDmWslGZr2V5keF5OAMWz8&q-sign-time=1640333074;1640336674&q-key-time=1640333074;1640336674&q-header-list=host&q-url-param-list=&q-signature=cf30ec91b4b7cd0fbd98b3df8f39500d717af342&x-cos-security-token=FH5uhvOyDD26khjUB4X1GT4jZ12zRJQa1eda327b05ff3fe0c6029e2d4f8ed12fmWdBhvHtbIE0A3NvbXiGS6-dT2KJd2Wo0yCAdHwnVJ44W2rB5r91rC-fXY9PYmEP9_4D342k8G97U93zHbXzoJJVSayH8WgwCeFDPKBc_SxBOV5dLzf04EYkhBbqWSKwKnWR5TwGx2zuuf4ho8uNQnQLTDvbsPUC29zCbvnam0i_y5fcyKz9URQeasyhgRxr']
10 ]//艺人图片
11 ];
...\ No newline at end of file ...\ No newline at end of file
1 <?php
2 return [
3 'albumId' => 123,//专辑ID
4 ];
1 <?php
2 return [
3 'originalCompayName' => '一寸光年',//艺人名
4 ];
1 <?php
2 return [
3 'singerName' => '王',//艺人名
4 ];
1 <?php
2 return [
3 'url' => '海葵测试艺人02',
4 'type' => 0, //文件类型: 0:图片 1:授权文件 2:音频 3:歌词 4:视频
5 'fileName' => '文件名称',
6 'md5'=>''
7 ];
...@@ -21,12 +21,15 @@ Route::get('/',function(){ ...@@ -21,12 +21,15 @@ Route::get('/',function(){
21 */ 21 */
22 Route::group(['middleware'=>'throttle:60,1','prefix'=> 'tme'], function (){ 22 Route::group(['middleware'=>'throttle:60,1','prefix'=> 'tme'], function (){
23 23
24 Route::post('album-list','WorkController@albumList'); //搜索歌手接口 24 // 提交发行接口
25 Route::post('submit-tme','WorkController@submitTme'); //上传接口 25 Route::post('upload','WorkController@Upload'); //上传接口
26 Route::post('sign-subject','WorkController@signSubject'); //查询原始版权方接口 26 Route::post('album_online','WorkController@albumOnline'); //提交发行接口
27 Route::post('get-album','WorkController@getAlbum'); //提交发行接口
28 Route::post('create-shower','WorkController@createShower'); //查询发行的歌曲tmeId列表接口
29 27
28 Route::post('singer_query','WorkController@singerQuery'); //搜索歌手接口
29 Route::post('singer_create','WorkController@singerCreate'); //创建歌手接口
30 Route::post('original_company_query','WorkController@originalCompanyQuery'); //查询原始版权方接口
30 31
32 // 发行后接口
33 Route::post('released_album_query','WorkController@releasedAlbumQuery'); //查询发行的歌曲tmeId列表接口
31 34
32 }); 35 });
......