AlipayDisposeService.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace service;
  12. use think\Log;
  13. use think\Request;
  14. use think\Url;
  15. use behavior\wechat\PaymentBehavior;
  16. use service\HookService;
  17. use service\SystemConfigService;
  18. use OSS\OssClient;
  19. use OSS\Core\OssException;
  20. use OSS\Model\RefererConfig;
  21. use OSS\Model\CorsConfig;
  22. use OSS\Model\CorsRule;
  23. use AlibabaCloud\Client\AlibabaCloud;
  24. use AlibabaCloud\Client\Exception\ClientException;
  25. use AlibabaCloud\Client\Exception\ServerException;
  26. class AlipayDisposeService
  27. {
  28. protected static $AccessKeyId=''; //阿里云AccessKeyId
  29. protected static $accessKeySecret=''; //阿里云AccessKeySecret
  30. /**
  31. * 初始化
  32. */
  33. final static function init()
  34. {
  35. self::$AccessKeyId=SystemConfigService::get('accessKeyId');//阿里云AccessKeyId
  36. self::$accessKeySecret=SystemConfigService::get('accessKeySecret');//阿里云AccessKeySecret
  37. if(self::$AccessKeyId=='' || self::$accessKeySecret=='')return exception('阿里云AccessKeyId或阿里云AccessKeySecret没有配置');
  38. }
  39. //对象存储OSS
  40. /**
  41. * 创建存储空间
  42. * @param string $endpoint
  43. * @param string $bucket
  44. * @param int $jurisdiction 1:私有 2:公共读 3:公共读写
  45. * @param int $type 1:标准储存 2:低频访问储存 3:归档储存
  46. */
  47. public static function ossDispose($endpoint='',$bucket='',$jurisdiction= 1,$type=1)
  48. {
  49. self::init();
  50. try {
  51. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  52. //检测存储空间是否存在
  53. $res = $ossClient->doesBucketExist($bucket);
  54. if($res) return false;
  55. switch ($type){
  56. case 1:
  57. $storage= OssClient::OSS_STORAGE_STANDARD;
  58. break;
  59. case 2:
  60. $storage= OssClient::OSS_STORAGE_IA;
  61. break;
  62. case 3:
  63. $storage= OssClient::OSS_STORAGE_ARCHIVE;
  64. break;
  65. }
  66. // 设置存储空间的存储类型为低频访问类型,默认是标准类型。
  67. $options = array(
  68. OssClient::OSS_STORAGE => $storage
  69. );
  70. switch ($jurisdiction){
  71. case 1:
  72. $jurisdictions= OssClient::OSS_ACL_TYPE_PRIVATE;
  73. break;
  74. case 2:
  75. $jurisdictions= OssClient::OSS_ACL_TYPE_PUBLIC_READ;
  76. break;
  77. case 3:
  78. $jurisdictions= OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE;
  79. break;
  80. }
  81. // 设置存储空间的权限为公共读,默认是私有读写。
  82. $res=$ossClient->createBucket($bucket, $jurisdictions, $options);
  83. } catch (OssException $e) {
  84. return $e->getMessage();
  85. }
  86. return $res;
  87. }
  88. /**
  89. * 列举存储空间
  90. * @param string $endpoint
  91. */
  92. public static function ossBucketList($endpoint)
  93. {
  94. self::init();
  95. try{
  96. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  97. $bucketListInfo = $ossClient->listBuckets();
  98. } catch(OssException $e) {
  99. return $e->getMessage();
  100. }
  101. $bucketList = $bucketListInfo->getBucketList();
  102. return $bucketList;
  103. }
  104. /**
  105. * 删除存储空间
  106. * @param string $endpoint
  107. * @param string $bucket
  108. */
  109. public static function deleteBucket($endpoint='',$bucket='')
  110. {
  111. self::init();
  112. try {
  113. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  114. $res = $ossClient->deleteBucket($bucket);
  115. } catch (OssException $e) {
  116. return $e->getMessage();
  117. }
  118. return $res;
  119. }
  120. /**
  121. *判断存储空间是否存在
  122. * @param string $endpoint
  123. * @param string $bucket
  124. */
  125. public static function doesBucketExist($endpoint='',$bucket='')
  126. {
  127. self::init();
  128. try {
  129. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  130. $res = $ossClient->doesBucketExist($bucket);
  131. } catch (OssException $e) {
  132. return $e->getMessage();
  133. }
  134. return $res;
  135. }
  136. /**
  137. * 设置防盗链
  138. * @param string $endpoint
  139. * @param string $bucket
  140. */
  141. public static function bucketReferer($endpoint='',$bucket='')
  142. {
  143. self::init();
  144. $refererConfig = new RefererConfig();
  145. // 设置允许空Referer。
  146. $refererConfig->setAllowEmptyReferer(true);
  147. // 添加Referer白名单。Referer参数支持通配符星号(*)和问号(?)。
  148. //$refererConfig->addReferer("www.aliiyun.com");
  149. //$refererConfig->addReferer("www.aliiyuncs.com");
  150. try{
  151. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  152. $res=$ossClient->putBucketReferer($bucket, $refererConfig);
  153. } catch(OssException $e) {
  154. return $e->getMessage();
  155. }
  156. return $res;
  157. }
  158. /**跨域规则设置
  159. * @throws OssException
  160. * @param string $endpoint
  161. * @param string $bucket
  162. */
  163. public static function putBucketCors($endpoint='',$bucket='')
  164. {
  165. $corsConfig = new CorsConfig();
  166. $rule = new CorsRule();
  167. // AllowedHeaders和ExposeHeaders不支持通配符。
  168. $rule->addAllowedHeader("*");
  169. // AllowedOlowedMethods最多支持一个星号(*)通配符。星号(*)表示允许所有的域来源或者操作。
  170. $rule->addAllowedOrigin("*");
  171. $rule->addAllowedMethod("GET");
  172. $rule->addAllowedMethod("POST");
  173. $rule->addAllowedMethod("PUT");
  174. $rule->addAllowedMethod("DELETE");
  175. $rule->addAllowedMethod("HEAD");
  176. $rule->setMaxAgeSeconds(600);
  177. // 每个存储空间最多允许10条规则。
  178. $corsConfig->addRule($rule);
  179. self::init();
  180. try{
  181. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  182. // 已存在的规则将被覆盖。
  183. $res=$ossClient->putBucketCors($bucket, $corsConfig);
  184. } catch(OssException $e) {
  185. return $e->getMessage();
  186. }
  187. return $res;
  188. }
  189. /**获取跨域规则
  190. * @throws OssException
  191. * @param string $endpoint
  192. * @param string $bucket
  193. */
  194. public static function getCrossDomainRules($endpoint='',$bucket='')
  195. {
  196. self::init();
  197. $corsConfig = null;
  198. try{
  199. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  200. $corsConfig = $ossClient->getBucketCors($bucket);
  201. } catch(OssException $e) {
  202. printf(__FUNCTION__ . ": FAILED\n");
  203. printf($e->getMessage() . "\n");
  204. return;
  205. }
  206. print(__FUNCTION__ . ": OK" . "\n");
  207. print($corsConfig->serializeToXml() . "\n");
  208. }
  209. /**
  210. * 获取存储空间的地域
  211. * @param string $endpoint
  212. * @param string $bucket
  213. */
  214. public static function ossRegion($endpoint='',$bucket=''){
  215. self::init();
  216. try {
  217. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  218. $Regions = $ossClient->getBucketLocation($bucket);
  219. } catch (OssException $e) {
  220. return $e->getMessage();
  221. }
  222. return $Regions;
  223. }
  224. /**
  225. * 获取存储空间元信息
  226. * @param string $endpoint
  227. * @param string $bucket
  228. */
  229. public static function ossMetas($endpoint='',$bucket=''){
  230. self::init();
  231. try {
  232. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  233. $Metas = $ossClient->getBucketMeta($bucket);
  234. } catch (OssException $e) {
  235. return $e->getMessage();
  236. }
  237. return $Metas['oss-requestheaders'];
  238. }
  239. /**获取文件元信息
  240. * @param string $endpoint
  241. * @param string $bucket
  242. * @param string $ObjectName
  243. */
  244. public static function getFileMetaInformation($endpoint='',$bucket='',$ObjectName='')
  245. {
  246. self::init();
  247. try {
  248. $ossClient = new OssClient(self::$AccessKeyId, self::$accessKeySecret, $endpoint);
  249. // 获取文件的全部元信息。
  250. $objectMeta = $ossClient->getObjectMeta($bucket, $ObjectName);
  251. return $objectMeta;
  252. } catch (OssException $e) {
  253. return $e->getMessage();
  254. }
  255. }
  256. //视频直播配置
  257. /**
  258. * 添加直播域名
  259. * @param string $domainName
  260. * @param string $type
  261. */
  262. public static function addLiveDomain($data)
  263. {
  264. self::init();
  265. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  266. ->regionId($data['region'])
  267. ->asDefaultClient();
  268. try {
  269. $result = AlibabaCloud::rpc()
  270. ->product('live')
  271. ->version('2016-11-01')
  272. ->action('AddLiveDomain')
  273. ->method('POST')
  274. ->host('live.aliyuncs.com')
  275. ->options([
  276. 'query' => [
  277. 'RegionId' => $data['region'],
  278. 'LiveDomainType' => $data['live_domain_type'],
  279. 'DomainName' => $data['domain_name'],
  280. 'Region' => $data['region'],
  281. 'Scope' => $data['scope'],
  282. ],
  283. ])
  284. ->request();
  285. return $result->toArray();
  286. } catch (ClientException $e) {
  287. return $e->getErrorMessage() . PHP_EOL;
  288. } catch (ServerException $e) {
  289. return $e->getErrorMessage() . PHP_EOL;
  290. }
  291. }
  292. /**删除已添加的直播域名
  293. * @param $domainName
  294. */
  295. public static function deleteLiveDomains($domainName='',$regionId='')
  296. {
  297. self::init();
  298. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  299. ->regionId($regionId)
  300. ->asDefaultClient();
  301. try {
  302. $result = AlibabaCloud::rpc()
  303. ->product('live')
  304. ->version('2016-11-01')
  305. ->action('DeleteLiveDomain')
  306. ->method('POST')
  307. ->host('live.aliyuncs.com')
  308. ->options([
  309. 'query' => [
  310. 'RegionId' => $regionId,
  311. 'DomainName' => $domainName,
  312. ],
  313. ])
  314. ->request();
  315. return $result->toArray();
  316. } catch (ClientException $e) {
  317. return $e->getErrorMessage() . PHP_EOL;
  318. } catch (ServerException $e) {
  319. return $e->getErrorMessage() . PHP_EOL;
  320. }
  321. }
  322. /**查询直播域名配置信息
  323. * @param string $domainName
  324. * @param string $regionId
  325. */
  326. public static function describeLiveDomainDetails($domainName='',$regionId='')
  327. {
  328. self::init();
  329. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  330. ->regionId($regionId)
  331. ->asDefaultClient();
  332. try {
  333. $result = AlibabaCloud::rpc()
  334. ->product('live')
  335. ->version('2016-11-01')
  336. ->action('DescribeLiveDomainDetail')
  337. ->method('POST')
  338. ->host('live.aliyuncs.com')
  339. ->options([
  340. 'query' => [
  341. 'RegionId' => $regionId,
  342. 'DomainName' => $domainName,
  343. ],
  344. ])
  345. ->request();
  346. return $result->toArray();
  347. } catch (ClientException $e) {
  348. return $e->getErrorMessage() . PHP_EOL;
  349. } catch (ServerException $e) {
  350. return $e->getErrorMessage() . PHP_EOL;
  351. }
  352. }
  353. /**域名停用
  354. * @param string $domainName
  355. * @param string $regionId
  356. */
  357. public static function stopLiveDomains($domainName='',$regionId='')
  358. {
  359. self::init();
  360. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  361. ->regionId($regionId)
  362. ->asDefaultClient();
  363. try {
  364. $result = AlibabaCloud::rpc()
  365. ->product('live')
  366. ->version('2016-11-01')
  367. ->action('StopLiveDomain')
  368. ->method('POST')
  369. ->host('live.aliyuncs.com')
  370. ->options([
  371. 'query' => [
  372. 'RegionId' => $regionId,
  373. 'DomainName'=>$domainName,
  374. ],
  375. ])
  376. ->request();
  377. return $result->toArray();
  378. } catch (ClientException $e) {
  379. return $e->getErrorMessage() . PHP_EOL;
  380. } catch (ServerException $e) {
  381. return $e->getErrorMessage() . PHP_EOL;
  382. }
  383. }
  384. /**域名启用
  385. * @param string $domainName
  386. * @param string $regionId
  387. */
  388. public static function startLiveDomains($domainName='',$regionId='')
  389. {
  390. self::init();
  391. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  392. ->regionId($regionId)
  393. ->asDefaultClient();
  394. try {
  395. $result = AlibabaCloud::rpc()
  396. ->product('live')
  397. ->version('2016-11-01')
  398. ->action('StartLiveDomain')
  399. ->method('POST')
  400. ->host('live.aliyuncs.com')
  401. ->options([
  402. 'query' => [
  403. 'RegionId' => $regionId,
  404. 'DomainName'=>$domainName,
  405. ],
  406. ])
  407. ->request();
  408. return $result->toArray();
  409. } catch (ClientException $e) {
  410. return $e->getErrorMessage() . PHP_EOL;
  411. } catch (ServerException $e) {
  412. return $e->getErrorMessage() . PHP_EOL;
  413. }
  414. }
  415. /**添加直播域名播流域名和推流域名的映射关系配置
  416. * @param string $PullDomain 播流域名
  417. * @param string $PushDomain 推流域名
  418. * @param string $regionId
  419. */
  420. public static function addLiveDomainMappings($PullDomain='',$PushDomain='',$regionId='')
  421. {
  422. self::init();
  423. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  424. ->regionId($regionId)
  425. ->asDefaultClient();
  426. try {
  427. $result = AlibabaCloud::rpc()
  428. ->product('live')
  429. ->version('2016-11-01')
  430. ->action('AddLiveDomainMapping')
  431. ->method('POST')
  432. ->host('live.aliyuncs.com')
  433. ->options([
  434. 'query' => [
  435. 'RegionId' => $regionId,
  436. 'PullDomain'=>$PullDomain,
  437. 'PushDomain'=>$PushDomain,
  438. ],
  439. ])
  440. ->request();
  441. return $result->toArray();
  442. } catch (ClientException $e) {
  443. return $e->getErrorMessage() . PHP_EOL;
  444. } catch (ServerException $e) {
  445. return $e->getErrorMessage() . PHP_EOL;
  446. }
  447. }
  448. /**删除直播域名播流域名和推流域名的映射关系配置
  449. * @param string $PullDomain 播流域名
  450. * @param string $PushDomain 推流域名
  451. * @param string $regionId
  452. */
  453. public static function deleteLiveDomainMappings($PullDomain='',$PushDomain='',$regionId='')
  454. {
  455. self::init();
  456. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  457. ->regionId($regionId)
  458. ->asDefaultClient();
  459. try {
  460. $result = AlibabaCloud::rpc()
  461. ->product('live')
  462. ->version('2016-11-01')
  463. ->action('DeleteLiveDomainMapping')
  464. ->method('POST')
  465. ->host('live.aliyuncs.com')
  466. ->options([
  467. 'query' => [
  468. 'RegionId' => $regionId,
  469. 'PullDomain'=>$PullDomain,
  470. 'PushDomain'=>$PushDomain,
  471. ],
  472. ])
  473. ->request();
  474. return $result->toArray();
  475. } catch (ClientException $e) {
  476. return $e->getErrorMessage() . PHP_EOL;
  477. } catch (ServerException $e) {
  478. return $e->getErrorMessage() . PHP_EOL;
  479. }
  480. }
  481. /**设置推流回调配置
  482. * @param string $domainName
  483. * @param string $regionId
  484. * @param string $NotifyUrl
  485. */
  486. public static function setLiveStreamsNotifyUrlConfigs($domainName='',$regionId='')
  487. {
  488. self::init();
  489. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  490. ->regionId($regionId)
  491. ->asDefaultClient();
  492. $site_url=SystemConfigService::get('site_url');
  493. try {
  494. $result = AlibabaCloud::rpc()
  495. ->product('live')
  496. ->version('2016-11-01')
  497. ->action('SetLiveStreamsNotifyUrlConfig')
  498. ->method('POST')
  499. ->host('live.aliyuncs.com')
  500. ->options([
  501. 'query' => [
  502. 'RegionId' => $regionId,
  503. 'DomainName'=>$domainName,
  504. 'NotifyUrl'=>$site_url.'/live/index/serve',
  505. ],
  506. ])
  507. ->request();
  508. return $result->toArray();
  509. } catch (ClientException $e) {
  510. return $e->getErrorMessage() . PHP_EOL;
  511. } catch (ServerException $e) {
  512. return $e->getErrorMessage() . PHP_EOL;
  513. }
  514. }
  515. /**查看推流回调配置
  516. * @param string $domainName
  517. * @param string $regionId
  518. * @param string $NotifyUrl
  519. */
  520. public static function describeLiveStreamsNotifyUrlConfig($domainName='',$regionId='')
  521. {
  522. self::init();
  523. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  524. ->regionId($regionId)
  525. ->asDefaultClient();
  526. try {
  527. $result = AlibabaCloud::rpc()
  528. ->product('live')
  529. ->version('2016-11-01')
  530. ->action('DescribeLiveStreamsNotifyUrlConfig')
  531. ->method('POST')
  532. ->host('live.aliyuncs.com')
  533. ->options([
  534. 'query' => [
  535. 'RegionId' => $regionId,
  536. 'DomainName'=>$domainName,
  537. ],
  538. ])
  539. ->request();
  540. return $result->toArray();
  541. } catch (ClientException $e) {
  542. return $e->getErrorMessage() . PHP_EOL;
  543. } catch (ServerException $e) {
  544. return $e->getErrorMessage() . PHP_EOL;
  545. }
  546. }
  547. /**删除推流回调配置
  548. * @param string $domainName
  549. * @param string $regionId
  550. */
  551. public static function deleteLiveStreamsNotifyUrlConfigs($domainName='',$regionId='')
  552. {
  553. self::init();
  554. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  555. ->regionId($regionId)
  556. ->asDefaultClient();
  557. try {
  558. $result = AlibabaCloud::rpc()
  559. ->product('live')
  560. ->version('2016-11-01')
  561. ->action('DeleteLiveStreamsNotifyUrlConfig')
  562. ->method('POST')
  563. ->host('live.aliyuncs.com')
  564. ->options([
  565. 'query' => [
  566. 'RegionId' => $regionId,
  567. 'DomainName'=>$domainName,
  568. ],
  569. ])
  570. ->request();
  571. return $result->toArray();
  572. } catch (ClientException $e) {
  573. return $e->getErrorMessage() . PHP_EOL;
  574. } catch (ServerException $e) {
  575. return $e->getErrorMessage() . PHP_EOL;
  576. }
  577. }
  578. /**调用AddLiveAppRecordConfig配置APP录制,输出内容保存到OSS中
  579. * @param string $domainName
  580. * @param string $regionId
  581. * @param string $StreamName
  582. * @param string $AppName
  583. * @param string $OssBucket
  584. * @param string $OssEndpoint
  585. * @param string $format 视频格式
  586. * @param string $duration 录制时长
  587. */
  588. public static function addLiveAppRecordConfigs($domainName='',$regionId='',$AppName='',$StreamName='',$OssBucket='',$OssEndpoint='',$format='',$duration='')
  589. {
  590. self::init();
  591. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  592. ->regionId($regionId)
  593. ->asDefaultClient();
  594. if($format=='m3u8'){
  595. $query=[
  596. 'RegionId' => $regionId,
  597. 'StreamName' => $StreamName,
  598. 'AppName' => $AppName,
  599. 'DomainName' => $domainName,
  600. 'OssBucket' => $OssBucket,
  601. 'OssEndpoint' => $OssEndpoint,
  602. 'RecordFormat.1.Format' => "m3u8",
  603. 'RecordFormat.1.OssObjectPrefix' => "record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}",
  604. 'RecordFormat.1.SliceOssObjectPrefix' => "record/{AppName}/{StreamName}/{UnixTimestamp}_{Sequence}",
  605. 'RecordFormat.1.CycleDuration' => bcmul($duration,60,0),
  606. ];
  607. }else if($format=='mp4'){
  608. $query=[
  609. 'RegionId' => $regionId,
  610. 'StreamName' => $StreamName,
  611. 'AppName' => $AppName,
  612. 'DomainName' => $domainName,
  613. 'OssBucket' => $OssBucket,
  614. 'OssEndpoint' => $OssEndpoint,
  615. 'RecordFormat.1.Format' => "mp4",
  616. 'RecordFormat.1.OssObjectPrefix' => "record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}",
  617. 'RecordFormat.1.CycleDuration' => bcmul($duration,60,0),
  618. ];
  619. }else{
  620. $query=[
  621. 'RegionId' => $regionId,
  622. 'StreamName' => $StreamName,
  623. 'AppName' => $AppName,
  624. 'DomainName' => $domainName,
  625. 'OssBucket' => $OssBucket,
  626. 'OssEndpoint' => $OssEndpoint,
  627. 'RecordFormat.1.Format' => "flv",
  628. 'RecordFormat.1.OssObjectPrefix' => "record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}",
  629. 'RecordFormat.1.CycleDuration' => bcmul($duration,60,0),
  630. ];
  631. }
  632. try {
  633. $result = AlibabaCloud::rpc()
  634. ->product('live')
  635. ->version('2016-11-01')
  636. ->action('AddLiveAppRecordConfig')
  637. ->method('POST')
  638. ->host('live.aliyuncs.com')
  639. ->options([
  640. 'query' => $query,
  641. ])
  642. ->request();
  643. return $result->toArray();
  644. } catch (ClientException $e) {
  645. return $e->getErrorMessage() . PHP_EOL;
  646. } catch (ServerException $e) {
  647. return $e->getErrorMessage() . PHP_EOL;
  648. }
  649. }
  650. /**解除录制配置
  651. * @param string $domainName
  652. * @param string $regionId
  653. * @param string $AppName
  654. * @param string $StreamName
  655. */
  656. public static function deleteLiveAppRecordConfigs($domainName='',$regionId='',$AppName='',$StreamName='')
  657. {
  658. self::init();
  659. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  660. ->regionId($regionId)
  661. ->asDefaultClient();
  662. try {
  663. $result = AlibabaCloud::rpc()
  664. ->product('live')
  665. ->version('2016-11-01')
  666. ->action('DeleteLiveAppRecordConfig')
  667. ->method('POST')
  668. ->host('live.aliyuncs.com')
  669. ->options([
  670. 'query' => [
  671. 'RegionId' => $regionId,
  672. 'AppName' => $AppName,
  673. 'DomainName' => $domainName,
  674. 'StreamName' => $StreamName,
  675. ],
  676. ])
  677. ->request();
  678. return $result->toArray();
  679. } catch (ClientException $e) {
  680. return $e->getErrorMessage() . PHP_EOL;
  681. } catch (ServerException $e) {
  682. return $e->getErrorMessage() . PHP_EOL;
  683. }
  684. }
  685. /**配置域名
  686. * @param string $domainName
  687. * @param string $regionId
  688. */
  689. public static function batchSetLiveDomainConfigs($domainName='',$regionId='')
  690. {
  691. self::init();
  692. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  693. ->regionId($regionId)
  694. ->asDefaultClient();
  695. $site_url=SystemConfigService::get('site_url');
  696. $url=parse_url($site_url)['host'];
  697. try {
  698. $result = AlibabaCloud::rpc()
  699. ->product('live')
  700. ->version('2016-11-01')
  701. ->action('BatchSetLiveDomainConfigs')
  702. ->method('POST')
  703. ->host('live.aliyuncs.com')
  704. ->options([
  705. 'query' => [
  706. 'RegionId' => $regionId,
  707. 'DomainNames' => $domainName,
  708. 'Functions' => "[{'functionArgs':[{'argName':'key','argValue':'Access-Control-Allow-Origin'},{'argName':'value','argValue':'*'}],'functionName':'set_resp_header'},
  709. {'functionArgs':[{'argName':'refer_domain_allow_list','argValue':'$url'},{'argName':'allow_empty','argValue':'on'}],'functionName':'referer_white_list_set'}
  710. ]",
  711. ],
  712. ])
  713. ->request();
  714. return $result->toArray();
  715. } catch (ClientException $e) {
  716. return $e->getErrorMessage() . PHP_EOL;
  717. } catch (ServerException $e) {
  718. return $e->getErrorMessage() . PHP_EOL;
  719. }
  720. }
  721. /**查询直播域名配置key
  722. * @param string $domainName
  723. * @param string $regionId
  724. */
  725. public static function describeLiveDomainConfigs($domainName='',$regionId='')
  726. {
  727. self::init();
  728. AlibabaCloud::accessKeyClient(self::$AccessKeyId, self::$accessKeySecret)
  729. ->regionId($regionId)
  730. ->asDefaultClient();
  731. try {
  732. $result = AlibabaCloud::rpc()
  733. ->product('live')
  734. ->version('2016-11-01')
  735. ->action('DescribeLiveDomainConfigs')
  736. ->method('POST')
  737. ->host('live.aliyuncs.com')
  738. ->options([
  739. 'query' => [
  740. 'RegionId' => $regionId,
  741. 'DomainName' => $domainName,
  742. 'FunctionNames'=>'aliauth'
  743. ],
  744. ])
  745. ->request();
  746. return $result->toArray();
  747. } catch (ClientException $e) {
  748. return $e->getErrorMessage() . PHP_EOL;
  749. } catch (ServerException $e) {
  750. return $e->getErrorMessage() . PHP_EOL;
  751. }
  752. }
  753. }