WechatCheckSyncService.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. $url = 'https://api.weixin.qq.com/wxa/sec/vod/pullupload?access_token='.$accessToken;
  19. $parsedContent = self::postWechat($url, [
  20. 'media_name' => $item->media_name,
  21. 'media_url' => $item->video_url
  22. ]);
  23. return $parsedContent['task_id'];
  24. }
  25. /**
  26. * 获取微信短剧剧集的播放链接信息
  27. * @param $seriesId
  28. * @return mixed
  29. * @throws \GuzzleHttp\Exception\GuzzleException
  30. */
  31. public static function getMedialinkInfo($seriesId) {
  32. $syncInfo = DB::table('video_series_wechat_check')
  33. ->where([
  34. 'series_id'=> $seriesId,
  35. 'sync_status' => 3,
  36. 'is_enabled' => 1,
  37. ])->first();
  38. if(!$syncInfo || !$syncInfo->media_id) {
  39. CommonBusinessException::throwError(Errors::SYNC_WECHAT_NOT_OK);
  40. }
  41. $mediaId = $syncInfo->media_id;
  42. $accessToken = WechatMiniprogramService::getDuanjuCheckAccessToken($syncInfo->appid);
  43. $url = 'https://api.weixin.qq.com/wxa/sec/vod/getmedialink?access_token='.$accessToken;
  44. $parsedContent = self::postWechat($url, [
  45. 'media_id' => $mediaId,
  46. 't' => time() + 7200,
  47. ]);
  48. return $parsedContent['media_info'];
  49. }
  50. public static function getWechatMediaLinkRedisKey($seriesId) {
  51. return 'wechat.medialink.'.$seriesId;
  52. }
  53. public static function getTask($syncInfo) {
  54. try {
  55. $accessToken = WechatMiniprogramService::getDuanjuCheckAccessToken($syncInfo->appid);
  56. $url = 'https://api.weixin.qq.com/wxa/sec/vod/gettask?access_token='.$accessToken;
  57. $parsedContent = self::postWechat($url, [
  58. 'task_id' => $syncInfo->sync_task_id
  59. ]);
  60. return $parsedContent['task_info'];
  61. } catch (\Exception $exception) {
  62. return [];
  63. }
  64. }
  65. /**
  66. * post 请求微信上游
  67. * @param $url
  68. * @param $data
  69. * @throws \GuzzleHttp\Exception\GuzzleException
  70. */
  71. public static function postWechat($url, $data) {
  72. $client = new Client(['timeout' => 3]);
  73. $httpResult = $client->post($url, $data);
  74. $httpStatus = $httpResult->getStatusCode();
  75. if(200 != $httpStatus) {
  76. CommonBusinessException::throwError(Errors::REQUEST_HTTP_STATUS_ERROR);
  77. }
  78. $httpContent = $httpResult->getBody()->getContents();
  79. $parsedContent = \json_decode($httpContent, true);
  80. if(0 != ($parsedContent['errcode'] ?? 0)) {
  81. myLog('WechatCheckSync')->error('请求微信异常', [
  82. 'url' => $url,
  83. 'data' => $data,
  84. 'errMsg' => $httpContent
  85. ]);
  86. CommonBusinessException::throwError(Errors::REQUEST_CODE_STATUS_ERROR);
  87. }
  88. return $parsedContent;
  89. }
  90. }