Commit 3cfddac0 3cfddac0a812cb1677fd1b0d6064ebb566dd8b96 by lemon

Merge branch 'release'

2 parents 1aac1163 a083421d
......@@ -13,3 +13,4 @@ npm-debug.log
yarn-error.log
/.idea
/.vscode
/database/release/*.resp
......
......@@ -49,4 +49,12 @@ class CacheKeyTools
{
return config('cache.key')['districts'];
}
/**
* @return mixed
*/
public static function tmeAccessToken()
{
return config('cache.key')['tme_access_token'];
}
}
......
......@@ -12,7 +12,7 @@ class CosHelper
protected $client;
protected $bucket;
public function __construct()
public function __construct($bucket = null)
{
$secretId = env('COS_SECRET_ID'); //"云 API 密钥 SecretId";
$secretKey = env('COS_SECRET_KEY'); //"云 API 密钥 SecretKey";
......@@ -26,7 +26,7 @@ class CosHelper
'secretKey' => $secretKey)));
$this->client = $cosClient;
$this->bucket = env('COS_BUCKET');
$this->bucket = $bucket ?? env('COS_BUCKET');
}
/**
......
......@@ -17,11 +17,12 @@ class Response
* @param array $data
* @return \Illuminate\Http\JsonResponse
*/
public static function success($data = [])
public static function success($data = [], string $msg = '请求成功')
{
return response()->json([
'code' => ErrorCode::SERVER_OK,
'data' => $data instanceof LengthAwarePaginator ? self::paginator($data) : $data
'data' => $data instanceof LengthAwarePaginator ? self::paginator($data) : $data,
'msg' => $msg
]);
}
......@@ -30,11 +31,12 @@ class Response
* @param int $code
* @return mixed
*/
public static function error($code = ErrorCode::SERVER_ERROR, string $msg = '')
public static function error($code = ErrorCode::SERVER_ERROR, string $msg = '',$data = [])
{
return response()->json([
'code' => $code,
'msg' => $msg ?: (ErrorCode::$messages[$code] ?? ErrorCode::$messages[ErrorCode::SERVER_ERROR])
'msg' => $msg ?: (ErrorCode::$messages[$code] ?? ErrorCode::$messages[ErrorCode::SERVER_ERROR]),
'data' => $data
]);
}
......
<?php
namespace App\Http\Controllers\Musician;
use App\Http\Controllers\Controller;
use App\Http\Requests\Musician\MusicianWithdrawBillConfirmRequest;
use App\Http\Requests\Musician\MusicianWithdrawReceiptByNameRequest;
use App\Http\Requests\Musician\MusicianWithdrawReceiptByNoRequest;
use App\Http\Requests\Musician\MusicianWithdrawReceiptRequest;
use App\Http\Requests\Musician\MusicianWithdrawStatusRequest;
use App\Services\IssueService;
use App\Services\MusicianWithdrawService;
use App\Services\WithdrawService;
/**
* Class IssueController
* @package App\Http\Controllers\Musician
*/
class IssueController extends Controller
{
/**
* @var
*/
private $issueService;
/**
* @param IssueService $issueService
*/
public function __construct(IssueService $issueService)
{
$this->issueService = $issueService;
}
/**
* @return \Illuminate\Http\JsonResponse
*/
public function index()
{
return $this->issueService->forward();
}
/**
* 版权方
* @return \Illuminate\Http\JsonResponse
*/
public function subCompany()
{
return $this->issueService->subCompany();
}
}
<?php
namespace App\Http\Controllers\Release;
use App\Helper\CacheKeyTools;
use App\Helper\Response;
use App\Http\Controllers\Controller;
use GuzzleHttp\Client;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
class BaseController extends Controller
{
/**
* 基础变量
* @var string
*/
protected $domain, $appId;
private $appSecret;
protected $client;
public function __construct()
{
$this->domain = env('TME_DOMAIN','https://openapi-sit.tencentmusic.com');
$this->appId = env('TME_APPID','47820741');
$this->appSecret = env('TME_APPSECRET','nPWFDDHKYCP4bUzoq9zyaJQx4ltQqMSs');
$this->client = new Client(['verify'=>false]);
}
/**获取accessToken
*/
function getToken()
{
$url = rtrim($this->domain,'/').'/oauth2/token';
$data = ['appId'=>$this->appId,'appSecret'=>$this->appSecret];
try {
$response = $this->client->request('POST', $url, ['json' => $data]);
$respArr = json_decode($response->getBody()->getContents(), true);
Log::channel('api')->info(__METHOD__, $respArr);
if (0 !== (int)$respArr['code']) {
return null;
} else {
$res = $respArr['data'];
Cache::put(CacheKeyTools::tmeAccessToken(), $res['accessToken'], ($res['expire'] ?? 900) - 100); // 加入缓存
return $res['accessToken'];
}
} catch (\Exception $e) {
Log::channel('api')->error(__METHOD__, ['msg'=>$e->getMessage()]);
return null;
}
}
/**
* 重组请求数据,返回headers
* @return array
*/
private function parseHeaders(array $params)
{
if (!$accessToken = Cache::get(CacheKeyTools::tmeAccessToken())) {
$accessToken = $this->getToken();
}
$heaers['appId'] = $this->appId;
$heaers['accessToken'] = $accessToken;
$heaers['timestamp'] = (string)date('YmdHis');
$heaers['traceId'] = 'hk_'.(string)time();
$heaers['signMethod'] = 'md5';
$heaers['sign'] = $this->getSign($heaers,$params);
return $heaers;
}
/**
* 请求接口
* @throws \GuzzleHttp\Exception\GuzzleException
*/
protected function doApi(string $uri, array $reqData = [], string $method = 'POST', bool $isLocal = false)
{
$url = rtrim($this->domain,'/').'/'.ltrim($uri,'/');
try {
if ($isLocal) {
$data_file = database_path('Release/'.last(explode("/",$uri)).'.query.php');
$params = include("$data_file");
} else {
$params = $reqData;
}
$params['tmeBrandId'] = $params['tmeBrandId'] ?? 8888888;
Log::channel('api')->info(__METHOD__, $params);
// var_dump(json_encode($params,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); //请求参数
$headers = $this->parseHeaders($params);
switch (strtoupper($method)) {
case 'GET':
$response = $this->client->request('GET', $url, ['query' => $params,'headers'=>$headers]);
break;
case 'POST':
default:
$response = $this->client->request('POST', $url, ['json' => $params,'headers'=>$headers]);
break;
}
$respArr = json_decode($response->getBody()->getContents(), true);
Log::channel('api')->info(__METHOD__, $respArr);
if ($respArr['code'] == '0'){
return [(int)$respArr['code'],$respArr['message'] ?? '操作失败',$respArr['data'] ?? []];
} else {
return [(int)$respArr['code'],$respArr['message'] ?? '操作失败',[$respArr['traceId']]];
}
} catch (\Exception $e) {
Log::channel('api')->error(__METHOD__, ['msg'=>$e->getMessage()]);
return [-1,'接口请求失败',[]];
}
}
/**
* 获取签名和去空的参数
* @param array $array
*/
protected function getSign($heaers,$params)
{
$common_params = array_merge($params,$heaers);
ksort($common_params);
$params = '';
foreach ($common_params as $k=>$v)
{
if ('' === $v || null === $v || [] === $v) {
continue;
}
if (is_array($v)) {
$params .= $k . json_encode($this->handleSubArrayNumber($v), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
} else {
$params .= $k . $v;
}
}
// Log::channel('api')->info($params);
return strtoupper(md5($this->appSecret . $params . $this->appSecret));
}
/**
* 签名需要,递归处理子数组中Int型数字转换成字符串
* @param array $array
* @return array
*/
private function handleSubArrayNumber(array $array)
{
foreach ($array as $k=>$v) {
if (is_array($v)) {
// ksort($v);
$array[$k] = $this->handleSubArrayNumber($v);
} else {
$array = array_filter($array, function ($item) {
if ($item === '' || $item === null) {
return false;
} else {
return true;
}
});
}
}
return $array;
}
}
<?php
namespace App\Http\Controllers\Release;
use App\Helper\Response;
use Illuminate\Http\Request;
class WorkController extends BaseController
{
/**
* 上传文件
* @param Request $request
*/
public function Upload(Request $request)
{
// dd(basename($request->getRequestUri()));
list($code,$msg,$data) = $this->doApi('/invests/content/upload',$request->all());
if ($code === 0) {
return Response::success($data);
} else {
return Response::error($code,$msg,$data);
}
}
/** 提交专辑
* @param Request $request
*/
public function albumOnline(Request $request)
{
list($code,$msg,$data) = $this->doApi('/invests/content/commitContent',$request->all());
if ($code === 0) {
return Response::success($data);
} else {
return Response::error($code,$msg,$data);
}
}
/**搜索歌手
* @param Request $request
*/
public function searchSinger(Request $request)
{
list($code,$msg,$data) = $this->doApi('/invests/content/searchSinger',$request->all());
if ($code === 0) {
return Response::success($data);
} else {
return Response::error($code,$msg,$data);
}
}
/** //创建艺人,直接机器审核
* @param Request $request
*/
public function createSinger(Request $request)
{
//修改上传的图片url
$singer_param = $request->all();
$file_name = trim(head(explode('?',$singer_param['singerPic']))); //去掉签名
$param = [
'type' =>'0',
'fileUrl' =>$singer_param['singerPic'] ?? '',
'fileName' =>last(explode('/',$file_name)) ?? '艺人头像.jpg',
];
list($code,$msg,$data) = $this->doApi('/invests/content/upload',$param);
$pic_url = $data['fileUrl'] ?? '';
if($pic_url){
$singer_param['singerPic'] = $pic_url;
list($code,$msg,$data) = $this->doApi('/invests/content/createSinger',$singer_param);
if ($code === 0) {
return Response::success(array_merge($data,['singer_pic'=>$pic_url]));
} else {
return Response::error($code,$msg,$data);
}
}
return Response::error($code,$msg,$data);
}
/**该接口目前没有使用,艺人创建失败继续提交,不需要修改
* @param Request $request
*/
public function modifySinger(Request $request)
{
list($code,$msg,$data) = $this->doApi('/invests/content/modifySinger',$request->all());
if ($code === 0) {
return Response::success($data);
} else {
return Response::error($code,$msg,$data);
}
}
/** 原始版权方
* @param Request $request
*/
public function originalCompanyQuery(Request $request)
{
list($code,$msg,$data) = $this->doApi('/invests/content/queryOriginalCopyrightCompanyList',$request->all());
if ($code === 0) {
return Response::success($data);
} else {
return Response::error($code,$msg,$data);
}
}
/**查询发行的歌曲id接口
* @param Request $request
*/
public function queryComitResult(Request $request)
{
list($code,$msg,$data) = $this->doApi('/invests/content/queryComitResult',$request->all());
if ($code === 0) {
return Response::success($data);
} else {
return Response::error($code,$msg,$data);
}
}
}
......@@ -3,6 +3,7 @@
namespace App\Http;
use App\Http\Middleware\AuthIdentifier;
use Fruitcake\Cors\HandleCors;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
......@@ -17,7 +18,7 @@ class Kernel extends HttpKernel
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Fruitcake\Cors\HandleCors::class,
HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
......
......@@ -6,7 +6,9 @@ use App\Helper\AesEncrypt;
use App\Helper\ErrorCode;
use App\Helper\Identifier;
use App\Helper\Response;
use App\Helper\Snowflake;
use App\Models\Legal\Stakeholder;
use App\Models\Musician\AppCompany;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
......@@ -30,6 +32,9 @@ class AuthIdentifier
*/
public function handle(Request $request, Closure $next)
{
//增加额外属性
$request->attributes->add(['request_id' => Snowflake::gen(),]);
$prefix = current(explode('/', $request->path()));
if (!in_array($prefix, $this->auth)) goto AUTH;
......@@ -55,8 +60,8 @@ class AuthIdentifier
if (empty($stakeholder_ids)) return Response::error(ErrorCode::MATCH_IDENTIFIER_FAIL);
$request->attributes->add([
'identifier' => $identifier,
'stakeholder_ids' => $stakeholder_ids,
'identifier' => $identifier,
'stakeholder_ids' => $stakeholder_ids,
]);
AUTH:
......
......@@ -12,6 +12,6 @@ class VerifyCsrfToken extends Middleware
* @var array
*/
protected $except = [
//
// '*'
];
}
......
......@@ -33,7 +33,7 @@ class Stakeholder extends BaseModel
case 1:
//个人
$stakeholder= Stakeholder::query()->join('stakeholder_detail as sd', 'stakeholders.id', '=', 'sd.stakeholder_id')
->where(['stakeholders.card_no'=>$identifier->identifier])->pluck('stakeholders.id')->toArray();
->where(['stakeholders.card_no'=>$identifier->identifier, 'type'=>1])->pluck('stakeholders.id')->toArray();
break;
case 2:
$stakeholder = Stakeholder::query()->where(['type' => 2, 'credit_code' => $identifier->identifier])->pluck('id')->toArray();
......
<?php
namespace App\Models\Musician;
use App\Models\BaseModel;
use Illuminate\Database\Eloquent\Factories\HasFactory;
/**
* Class AppCompany
* @package App\Models\Musician
*/
class AppCompany extends BaseModel
{
use HasFactory;
/**
* @var string
*/
protected $connection = 'musician';
/**
* @var string
*/
protected $table = 'app_company';
}
......@@ -38,7 +38,8 @@ class RouteServiceProvider extends ServiceProvider
$this->configureRateLimiting();
$this->routes(function () {
//需授权
//音乐人
Route::prefix('api')
->middleware('api')
->namespace($this->namespace . '\Musician')
......@@ -54,6 +55,11 @@ class RouteServiceProvider extends ServiceProvider
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
//发行接口 - 对接生态平台
Route::prefix('release')
->namespace($this->namespace . '\Release')
->group(base_path('routes/release.php'));
});
}
......
<?php
namespace App\Services;
use App\Helper\AesEncrypt;
use App\Helper\ErrorCode;
use App\Helper\Response;
use App\Models\Legal\Stakeholder;
use App\Models\Legal\Subject;
use Illuminate\Support\Facades\Log;
/**
* Class IssueService
* @package App\Services
*/
class IssueService extends Service
{
/**
* 转发
* @return \Illuminate\Http\JsonResponse
*/
public function forward()
{
$client = new \GuzzleHttp\Client([
'base_uri' => env('resource_url'),
'timeout' => 3.0,
]);
try {
$params['data'] = $this->request->all();
$params['ext'] = [
'user_id' => $this->identifier->company_id,
'operator' => $this->identifier->user_id,
'stakeholder_ids' => $this->stakeholder_ids,
];
$data = ['params' => AesEncrypt::encrypt(json_encode($params))];
$response = $client->post($this->request->getRequestUri(), [
'json' => $data,
]);
$respArr = json_decode($response->getBody()->getContents(), true);
$respArr['msg'] = $respArr['message'];
unset($respArr['message']);
Log::info(__METHOD__.':请求返回体', ['respArr'=>$respArr, 'data'=>$data, 'uri'=>$client->post($this->request->getRequestUri())]);
return response()->json($respArr, 200);
} catch (\Throwable $throwable) {
return Response::error(ErrorCode::SERVER_ERROR, $throwable->getMessage());
}
}
/**
* 版权方
* @return \Illuminate\Http\JsonResponse
*/
public function subCompany()
{
$company_ids = Stakeholder::query()->whereIn('id', $this->stakeholder_ids)->pluck('company_id')->toArray();
$subject = Subject::query()->whereIn('company_id', $company_ids)->get(['no as value', 'name']);
return Response::success($subject);
}
}
......@@ -2,6 +2,7 @@
namespace App\Services;
use App\Helper\Snowflake;
use Carbon\Carbon;
use Illuminate\Http\Request;
......@@ -12,6 +13,16 @@ use Illuminate\Http\Request;
class Service
{
/**
* @var Request
*/
protected $request;
/**
* @var mixed
*/
protected $user_id;
/**
* @var mixed
*/
protected $identifier;
......
This diff could not be displayed because it is too large.
......@@ -114,6 +114,7 @@ return [
'bills_confirm' => 'serial:#serial_no#',
'bills_settle_no' => 'bills:settle:no',
'districts' => 'districts',
'tme_access_token' => 'tme_access_token'
]
];
......
......@@ -4,31 +4,57 @@ return [
/*
|--------------------------------------------------------------------------
| Cross-Origin Resource Sharing (CORS) Configuration
| Laravel CORS Options
|--------------------------------------------------------------------------
|
| Here you may configure your settings for cross-origin resource sharing
| or "CORS". This determines what cross-origin operations may execute
| in web browsers. You are free to adjust these settings as needed.
| The allowed_methods and allowed_headers options are case-insensitive.
|
| To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
| You don't need to provide both allowed_origins and allowed_origins_patterns.
| If one of the strings passed matches, it is considered a valid origin.
|
| If ['*'] is provided to allowed_methods, allowed_origins or allowed_headers
| all methods / origins / headers are allowed.
|
*/
'paths' => ['api/*', 'sanctum/csrf-cookie'],
/*
* You can enable CORS for 1 or multiple paths.
* Example: ['api/*']
*/
'paths' => ['api/*', 'release/*'],
/*
* Matches the request method. `['*']` allows all methods.
*/
'allowed_methods' => ['*'],
/*
* Matches the request origin. `['*']` allows all origins. Wildcards can be used, eg `*.mydomain.com`
*/
'allowed_origins' => ['*'],
/*
* Patterns that can be used with `preg_match` to match the origin.
*/
'allowed_origins_patterns' => [],
/*
* Sets the Access-Control-Allow-Headers response header. `['*']` allows all headers.
*/
'allowed_headers' => ['*'],
/*
* Sets the Access-Control-Expose-Headers response header with these headers.
*/
'exposed_headers' => [],
/*
* Sets the Access-Control-Max-Age response header when > 0.
*/
'max_age' => 0,
/*
* Sets the Access-Control-Allow-Credentials header.
*/
'supports_credentials' => false,
];
......
......@@ -113,7 +113,13 @@ return [
'driver' => 'daily',
'path' => storage_path('logs/laravel-api.log'),
'level' => env('LOG_LEVEL', 'debug'),
]
],
'issue' => [
'driver' => 'daily',
'path' => storage_path('logs/issue/issue.log'),
'level' => env('LOG_LEVEL', 'debug'),
],
],
];
......
<?php
//注1:空值不能填null,会造成签名错误,填空字符串
//注2:int格式为空时,key不传,不能填默认值0
return
[
'cmsAlbumId'=>'379',
// 'albumId'=>75266,
'albumName'=>'测试专辑9',
'version'=>'0',
'translationName'=>'',
'albumPic'=>'/operations/imgs/cos_8f4730c6-88c0-4d94-a6fc-6695dfef134eimg.jpg',
'albumPicName'=>'封面.jpg',
'albumSingers'=>[
[
'centralSingerId'=>16357449,
'orderIndex'=>0,
'singerName'=>'赵聪'
],
[
'centralSingerId'=>186470,
'singerName'=>'王琪',
'orderIndex'=>1
]
],
'albumType'=>'0',
'albumArea'=>'5',
'language'=>'0',
'albumUpc'=>'',
'brandIdOut'=>10086,
'brandShowName'=>'外显公司',
'brandId'=>105737,
'brandName'=>'冰曲文化',
'issuedTime'=>'2023-02-11 18:00:00',
'onlineTime'=>'2023-02-11 18:00:00',
'introduction'=>'专辑简介',
'genreList'=>[
[
'firstGenre'=>'2',
'secondGenre'=>'201'
]
],
'firstGenre'=>'2',
'secondGenre'=>'201',
'authFiles'=>[
[
'materialName'=>'pdf.pdf', //物料名称
'materialUrl'=>'/operations/imgs/cos_ea2db81e-bbc0-4cbe-bc53-5fe375b19827pdf.pdf', //物料播放地址
'materialPlayUrl'=>'/operations/imgs/cos_ea2db81e-bbc0-4cbe-bc53-5fe375b19827pdf.pdf', //物料播放地址
'materialType'=>'1', //物料类型
'fileType'=>'1', //物料类型 fileType
'fileMD5'=>strtoupper(md5('/operations/imgs/cos_ea2db81e-bbc0-4cbe-bc53-5fe375b19827pdf.pdf')), //物料类型
]
],
'tracks'=>[
[
'cmsTrackId'=>'123',
'trackName'=>'新歌',
'version'=>'',
'trackTitle'=>'新歌', // 副标题
'translationName'=>'',
'centralSingerId'=>16357449,
'centralSingerName'=>'赵聪',
'trackSingers'=>[
[
'centralSingerId'=>16357449,
'singerName'=>'赵聪',
'orderIndex'=>0
],
[
'centralSingerId'=>186470,
'singerName'=>'王琪',
'orderIndex'=>1
]
],
'cdNo'=>'0',
'language'=>'0',
'firstGenre'=>'2',
'secondGenre'=>'201',
'trackExtend'=>[
'lyricsText'=>'张三',
'lyricsIds'=>[
[
'centralSingerId'=>1,
'singerName'=>'张三'
]
],
'composingText'=>'张三|王五',
'composingIds'=>[],
'arrangementText'=>'',
'arrangementIds'=>[],
'producerText'=>'',
'producerIds'=>[]
],
'genreList'=>[
[
'firstGenre'=>'2',
'secondGenre'=>'201'
]
],
'trackRepresent'=>[
'materialUrl'=>'111',
'materialName'=>'授权书',
'materialType'=>'1',
'materialPlayUrl'=>'23444',
'fileMD5'=>'12346789000888',
'fileType'=>'1'
],
'recordingCopyright'=>[
'originalCopyrightId'=>5874,
'originalCopyrightName'=>'武汉海酝文化有限公司',
'copyrightStartTime'=>'2022-05-01 00:00:00',
'copyrightEndTime'=>'2023-05-01 00:00:00',
'authArea'=>'5',
'authAreaList'=>['5'],
'authForm'=>'3',
'authRelationship'=>'1',
'firstPeriod'=>'2022-05-17 00:00:00',
'lyricsShare'=>100,
'lyricsRightsFlag'=>'1',
'wyyCopyrightEndTime'=>'',
'copyrightStatus'=>'',
'copyrightFileList'=>[
[
'materialName'=>'pdf.pdf',
'materialUrl'=>'/operations/imgs/cos_ea2db81e-bbc0-4cbe-bc53-5fe375b19827pdf.pdf',
'materialType'=>'1',
'materialPlayUrl'=>'/operations/imgs/cos_ea2db81e-bbc0-4cbe-bc53-5fe375b19827pdf.pdf',
'fileType'=>'1',
'fileMD5'=>strtoupper(md5('/operations/imgs/cos_ea2db81e-bbc0-4cbe-bc53-5fe375b19827pdf.pdf'))
]
],
'originalContractNo'=>'',
'contractNo'=>'',
],
'lyricsCopyright'=>[
[
'originalCopyrightId'=>5874,
'originalCopyrightName'=>'武汉海酝文化有限公司',
'copyrightStartTime'=>'2022-05-01 00:00:00',
'copyrightEndTime'=>'2023-05-01 00:00:00',
'authArea'=>'5',
'authAreaList'=>['5'],
'authForm'=>'3',
'authRelationship'=>'1',
'firstPeriod'=>'',
'lyricsShare'=>100,
'lyricsRightsFlag'=>'1',
'wyyCopyrightEndTime'=>'',
'copyrightStatus'=>'',
'copyrightFileList'=>[
[
'materialName'=>'pdf.pdf',
'materialUrl'=>'/operations/imgs/cos_ea2db81e-bbc0-4cbe-bc53-5fe375b19827pdf.pdf',
'materialType'=>'1',
'materialPlayUrl'=>'/operations/imgs/cos_ea2db81e-bbc0-4cbe-bc53-5fe375b19827pdf.pdf',
'fileType'=>'1',
'fileMD5'=>'123009988'
]
],
'canCover'=>1,
'originalContractNo'=>'',
'contractNo'=>'',
'canCoverConditions'=>1
]
],
'composingCopyright'=>[
[
'originalCopyrightId'=>5874,
'originalCopyrightName'=>'武汉海酝文化有限公司',
'copyrightStartTime'=>'2022-05-01 00:00:00',
'copyrightEndTime'=>'2023-05-01 00:00:00',
'authArea'=>'5',
'authAreaList'=>['5'],
'authForm'=>'3',
'authRelationship'=>'1',
'firstPeriod'=>'',
'lyricsShare'=>100,
'lyricsRightsFlag'=>'1',
'wyyCopyrightEndTime'=>'',
'copyrightStatus'=>'',
'copyrightFileList'=>[
[
'materialName'=>'pdf.pdf',
'materialUrl'=>'/operations/imgs/cos_ea2db81e-bbc0-4cbe-bc53-5fe375b19827pdf.pdf',
'materialType'=>'1',
'materialPlayUrl'=>'/operations/imgs/cos_ea2db81e-bbc0-4cbe-bc53-5fe375b19827pdf.pdf',
'fileType'=>'1',
'fileMD5'=>'123009988'
]
],
'canCover'=>1,
'originalContractNo'=>'',
'contractNo'=>'',
'canCoverConditions'=>1
]
],
'instruments'=>[],
'isrc'=>'',
'iswc'=>'',
'issuedTime'=>'2023-02-11 18:00:00',
'onlineTime'=>'2023-02-11 18:00:00',
'adFlag'=>1,
'lyric'=>'----歌词内容---',
'haveLyric'=>1,
'lyricHead'=>'歌词头内容',
'dynamicLyricsFlag'=>'0',
'payPattern'=>'2',
'payMode'=>'2',
'orderIndex'=>0,
]
]
];
<?php
return [
'singerName' =>'柚火梓XP',//艺人名'
// 'singerName' =>'柚木梓SR',//艺人名R
'brandId' =>123456,
'brandName' =>'测试公司',
// 'singerPic' => 'https://tupian.qqw21.com/article/UploadPic/2019-10/2019101520442288760.jpg',
'singerPic' => 'https://uploadfile.huiyi8.com/up/4e/ed/95/4eed95bc3f7daa8f55c71cd73abe2f8e.png',
'singerDesc' =>'歌手描述1',
'singerType' =>1, //0男,1女,2组合,3其他,4影视,5虚拟,6综艺,7团体
'singerRole' =>[
0,1,2
], //0歌手,1音乐人,2DJ,3声优,4曲艺家,5主播,6UGC,7演奏家,8指挥家,9作词,10作曲,11编曲,12制作人,13演员,14主持人,15其他,16混音师,17歌唱家,18乐团,19录音,20母带,21吉他,22贝斯,23键盘/合成器,24鼓,25小提琴,26大提琴
'area' =>'1', //0港台,1内地,2日韩,3欧美,4其他,5东南亚,6未知
'translateName' =>'',
'creator' =>'11'
];
<?php
return [
'singerId' =>15836187,
'singerName' =>'柚木梓XP',//艺人名'
'brandId' =>1223,
'brandName' =>'测试公司',
'singerPic' =>'https://tupian.qqw21.com/article/UploadPic/2019-10/2019101520442288760.jpg',
'singerDesc' =>'我改变下我的描述',
'singerType' =>0, //0男,1女,2组合,3其他,4影视,5虚拟,6综艺,7团体
'singerRole' =>[
0,1,2
], //0歌手,1音乐人,2DJ,3声优,4曲艺家,5主播,6UGC,7演奏家,8指挥家,9作词,10作曲,11编曲,12制作人,13演员,14主持人,15其他,16混音师,17歌唱家,18乐团,19录音,20母带,21吉他,22贝斯,23键盘/合成器,24鼓,25小提琴,26大提琴
'area' =>'1', //0港台,1内地,2日韩,3欧美,4其他,5东南亚,6未知
'translateName' =>'',
'creator' =>'11'
];
<?php
return [
'albumId' => 396758,//专辑ID
'tmeBrandId' =>1049035
];
<?php
return [
'originalCompanyName' => '',//艺人名
];
<?php
return [
// 'singerName' => '柚木梓XP',//艺人名
'singerName' => '王心凌',//艺人名
];
<?php
return [
'fileUrl' => 'https://legal-1305250541.cos.ap-shanghai.myqcloud.com/material_test/tme/pdf.pdf?q-sign-algorithm=sha1&q-ak=AKIDsWu1tUr7JI1TlqgFXaNt87pFOGtFK8gx&q-sign-time=1652769055%3B1652812315&q-key-time=1652769055%3B1652812315&q-header-list=&q-url-param-list=&q-signature=06f94750474880cb5ae8d8a2728791a30639863e',
'type' => '1', //文件类型: 0:图片 1:授权文件 2:音频 3:歌词 4:视频
'fileName' => 'pdf.pdf',
];
# 图1 material_test/tme/img.jpg
# 文件2 material_test/tme/pdf.pdf
# 音频 material_test/tme/audio.wav
# txt material_test/tme/lyric.txt
# MP4 material_test/tme/video.mp4
......@@ -50,7 +50,17 @@ Route::group([], function (){
});
//发行
Route::group(["prefix"=>"issue"], function (){
Route::post('/album/subCompany', 'IssueController@subCompany');
Route::post('{uri}', 'IssueController@index')->where(['uri'=>'.*+']);
});
//api-v2
Route::group(["prefix"=>"v2", "namespace"=>"V2"], function (){
Route::get('musician_song', 'MusicianSongController@list');
});
......
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::get('/',function(){
return 'Welcome To Release Api !!!';
});
/**
* Tme接口
*/
Route::group(['middleware'=>'throttle:60,1','prefix'=> 'tme'], function (){
// 提交发行接口
Route::post('upload','WorkController@Upload'); //上传接口
Route::post('album_online','WorkController@albumOnline'); //提交发行接口
Route::post('singer_query','WorkController@searchSinger'); //搜索歌手接口
Route::post('singer_create','WorkController@createSinger'); //创建歌手接口
Route::post('singer_modify','WorkController@modifySinger'); //修改歌手接口
Route::post('original_company_query','WorkController@originalCompanyQuery'); //查询原始版权方接口
// 发行后接口
Route::post('issue_album_query','WorkController@queryComitResult'); //查询发行的歌曲tmeId列表接口
});