| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | <?phpnamespace App\Jobs\Video;use App\Service\Miniprogram\Wechat\AccessTokenService;use App\Service\Util\Support\Http\WechatURL;use App\Service\Util\Support\Trace\TraceContext;use App\Service\Util\Support\Http\HttpRequestService;use Illuminate\Bus\Queueable;use Illuminate\Contracts\Queue\ShouldQueue;use Illuminate\Foundation\Bus\Dispatchable;use Illuminate\Queue\InteractsWithQueue;use Illuminate\Queue\SerializesModels;use Illuminate\Support\Arr;use Illuminate\Support\Facades\Redis;use Illuminate\Support\Facades\DB;class WechatCheck implements ShouldQueue{    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;    private $info;    /**     * Create a new job instance.     */    public function __construct($info)    {        $this->info = $info;    }    /**     * Execute the job.     */    public function handle(): void    {        myLog('WechatCheck')->info('开始处理微信提审', [            'info' => $this->info        ]);        $traceContext = TraceContext::newFromParent($this->info['traceInfo']);        $id = $this->info['id'];        $record = DB::table('video_wechat_check')            ->join('videos', 'videos.id', 'video_wechat_check.video_id')            ->where(['video_wechat_check.id' => $id,                'video_wechat_check.is_enabled' => 1, 'video_wechat_check.status' => 5])            ->select('video_wechat_check.*', 'videos.name as video_name', 'videos.cover_image as video_cover_image')            ->first();        if(!$record) {            myLog('WechatCheck')->info('当前状态不支持提审', [                'traceInfo' => $traceContext->getTraceInfo()            ]);            return;        }        $appid = $record->appid ?: config('wechat.duanju.masterAppid');        $accessToken = Redis::get(AccessTokenService::getAccessTokenRedisKey($appid));        $medias = DB::table('video_series_wechat_check')            ->where('video_id', $record->video_id)            ->where(['sync_status' => 4, 'is_enabled' => 1])            ->where('media_id', '<>', 0)            ->get();        $cover_material_id = $this->getMaterialId($record->video_cover_image, $accessToken);        $authorized_material_id = $this->getMaterialId($record->authorized_img, $accessToken);        if(!($cover_material_id && $authorized_material_id)) {            myLog('WechatCheck')->error('上传短剧封面和授权材料到临时素材失败, 请重新提审', [                'appid' => $appid,                'traceInfo' => $traceContext->getTraceInfo()            ]);            return ;        }        $postData = [            'name' => $record->video_name,            'media_count' => $medias->count(),            'media_id_list' => $medias->pluck('media_id')->toArray(),            'producer' => $record->producer,            'cover_material_id' =>$cover_material_id,            'authorized_material_id' => $authorized_material_id,            'registration_number' => $record->registration_number,        ];        if($record->drama_id) {            $postData['drama_id'] = $record->drama_id;        }        $result = HttpRequestService::simplePost(WechatURL::vod_auditdrama . $accessToken, $postData);        if(false === $result || (0 != ($result['errcode'] ?? 0)) || (! ($result['drama_id'] ?? ''))) {            myLog('WechatCheck')->error('提审请求失败', [                'appid' => $appid,                'post' => $postData,                'result' => $result,                'traceInfo' => $traceContext->getTraceInfo()            ]);            return;        }        $drama_id = $result['drama_id'];        $now = date('Y-m-d H:i:s');        DB::table('video_wechat_check')            ->where('id', $record->id)            ->update([                'status' =>1,                'apply_at' => $now,                'drama_id' => $drama_id,                'updated_at' => $now,            ]);    }    /**     * 上传临时图片素材     * @param string $url 图片http地址     * @param string $accessToken     * @return string media_id     */    public function getMaterialId($url, $accessToken){        $result = HttpRequestService::post(WechatURL::media_upload. $accessToken, [            'multipart' => [                [                    'name' => 'type',                    'contents' => 'image',                ],                [                    'name' => 'media',                    'contents' => file_get_contents($url),                    'filename' => Arr::last(explode('/', $url)),                ]            ]        ]);        return $result['media_id'] ?? '';    }}
 |