WechatCheckSyncService.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace Modules\Video\Services;
  3. use GuzzleHttp\Client;
  4. use Illuminate\Support\Facades\DB;
  5. use Modules\Common\Errors\Errors;
  6. use Modules\Common\Exceptions\CommonBusinessException;
  7. use Modules\Manage\Services\WechatMiniprogramService;
  8. class WechatCheckSyncService
  9. {
  10. /**
  11. * 拉取上传
  12. * @param $item 剧集信息
  13. * @param $accessToken 小程序accessToken
  14. * @return string task_id
  15. * @throws \GuzzleHttp\Exception\GuzzleException
  16. */
  17. public static function pullupload($item, $accessToken) {
  18. $client = new Client(['timeout' => 3]);
  19. $httpResult = $client->post('https://api.weixin.qq.com/wxa/sec/vod/pullupload?access_token='.$accessToken, [
  20. 'media_name' => $item->media_name,
  21. 'media_url' => $item->video_url
  22. ]);
  23. $httpStatus = $httpResult->getStatusCode();
  24. if(200 != $httpStatus) {
  25. CommonBusinessException::throwError(Errors::REQUEST_HTTP_STATUS_ERROR);
  26. }
  27. $httpContent = $httpResult->getBody()->getContents();
  28. $parsedContent = \json_decode($httpContent, true);
  29. if(0 != ($parsedContent['errcode'] ?? 0)) {
  30. myLog('WechatCheckSync')->error('拉取上传异常', [
  31. 'series_id' => $item->id,
  32. 'errMsg' => $httpContent
  33. ]);
  34. CommonBusinessException::throwError(Errors::REQUEST_HTTP_STATUS_ERROR);
  35. }
  36. return $parsedContent['task_id'];
  37. }
  38. /**
  39. * 获取微信短剧剧集的播放链接信息
  40. * @param $seriesId
  41. * @return mixed
  42. * @throws \GuzzleHttp\Exception\GuzzleException
  43. */
  44. public static function getMedialinkInfo($seriesId) {
  45. $syncInfo = DB::table('video_series_wechat_check')
  46. ->where([
  47. 'series_id'=> $seriesId,
  48. 'sync_status' => 3,
  49. 'is_enabled' => 1,
  50. ])->first();
  51. if(!$syncInfo || !$syncInfo->media_id) {
  52. CommonBusinessException::throwError(Errors::SYNC_WECHAT_NOT_OK);
  53. }
  54. $mediaId = $syncInfo->media_id;
  55. $accessToken = WechatMiniprogramService::getDuanjuCheckAccessToken($syncInfo->appid);
  56. $url = 'https://api.weixin.qq.com/wxa/sec/vod/getmedialink?access_token='.$accessToken;
  57. $parsedContent = self::postWechat($url, [
  58. 'media_id' => $mediaId,
  59. 't' => time() + 7200,
  60. ]);
  61. return $parsedContent['media_info'];
  62. }
  63. public static function getWechatMediaLinkRedisKey($seriesId) {
  64. return 'wechat.medialink.'.$seriesId;
  65. }
  66. public static function getTask($syncInfo) {
  67. try {
  68. $accessToken = WechatMiniprogramService::getDuanjuCheckAccessToken($syncInfo->appid);
  69. $url = 'https://api.weixin.qq.com/wxa/sec/vod/gettask?access_token='.$accessToken;
  70. $parsedContent = self::postWechat($url, [
  71. 'task_id' => $syncInfo->sync_task_id
  72. ]);
  73. return $parsedContent['task_info'];
  74. } catch (\Exception $exception) {
  75. return [];
  76. }
  77. }
  78. /**
  79. * post 请求微信上游
  80. * @param $url
  81. * @param $data
  82. * @throws \GuzzleHttp\Exception\GuzzleException
  83. */
  84. public static function postWechat($url, $data) {
  85. $client = new Client(['timeout' => 3]);
  86. $httpResult = $client->post($url, $data);
  87. $httpStatus = $httpResult->getStatusCode();
  88. if(200 != $httpStatus) {
  89. CommonBusinessException::throwError(Errors::REQUEST_HTTP_STATUS_ERROR);
  90. }
  91. $httpContent = $httpResult->getBody()->getContents();
  92. $parsedContent = \json_decode($httpContent, true);
  93. if(0 != ($parsedContent['errcode'] ?? 0)) {
  94. myLog('WechatCheckSync')->error('请求微信异常', [
  95. 'url' => $url,
  96. 'data' => $data,
  97. 'errMsg' => $httpContent
  98. ]);
  99. CommonBusinessException::throwError(Errors::REQUEST_HTTP_STATUS_ERROR);
  100. }
  101. return $parsedContent;
  102. }
  103. }