#laravel #twilio
Вопрос:
У меня есть контроллер, который обрабатывает файлы, прикрепленные к MMS, Когда я отправляю SMS, контроллер обрабатывает его очень хорошо, но когда я отправляю MMS с файлом, он не работает и выдает мне ошибку 500 ( внутренняя ошибка сервера, я тестирую свой код и думаю, что проблема заключается в этой части
for ($i=0; $i < $NumMedia; $i ) {
$mediaUrl = $request->input("MediaUrl$i");
$MIMEType = $request->input("MediaContentType$i");
$fileExtension = $converter->toExtension($MIMEType);
$mediaSid = basename($mediaUrl);
$media = $mediaService->getMediaContent($mediaUrl);
$filename = "$mediaSid.$fileExtension";
$mediaData = compact('mediaSid', 'MessageSid', 'mediaUrl', 'media', 'filename', 'MIMEType');
$mmsMedia = new MMSMedia($mediaData);
$mmsMedia->save();
}
весь контроллер является:-
<?php
namespace AppHttpControllers;
use AppHttpControllersController;
use AppMMSMedia;
use AppServicesMediaMessageServiceIMediaMessageService;
use IlluminateFoundationAuthAuthenticatesUsers;
use IlluminateHttpRequest;
use IlluminateHttpResponse;
use MagyarjetiMimeTypesMimeTypeConverter;
use TwilioRestClient;
use TwilioTwiMLMessagingResponse;
class MessagingController extends Controller
{
/*
|--------------------------------------------------------------------------
| Messaging Controller
|--------------------------------------------------------------------------
|
| This controller receives messages from Twilio and makes the media available
| via the /images url.
*/
protected $twilio;
protected $accountSid;
protected $twilioNumber;
protected $twilioNumberSid;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->accountSid = env('TWILIO_SID');
$this->twilioNumber = env('TWILIO_NUMBER');
$this->twilioNumberSid = env('TWILIO_NUMBER_SID');
$authToken = env('TWILIO_AUTH_TOKEN');
$this->twilio = new Client($this->accountSid, $authToken);
}
public function handleIncomingSMS(Request $request, IMediaMessageService $mediaService)
{
$converter = new MimeTypeConverter;
$NumMedia = (int)$request->input('NumMedia');
$FromNumber = $request->input('From');
$MessageSid = $request->input('MessageSid');
for ($i=0; $i < $NumMedia; $i ) {
$mediaUrl = $request->input("MediaUrl$i");
$MIMEType = $request->input("MediaContentType$i");
$fileExtension = $converter->toExtension($MIMEType);
$mediaSid = basename($mediaUrl);
$media = $mediaService->getMediaContent($mediaUrl);
$filename = "$mediaSid.$fileExtension";
$mediaData = compact('mediaSid', 'MessageSid', 'mediaUrl', 'media', 'filename', 'MIMEType');
$mmsMedia = new MMSMedia($mediaData);
$mmsMedia->save();
}
$response = new MessagingResponse();
$messageBody = $NumMedia == 0 ? 'Send us an image!' : "Thanks for the $NumMedia images.";
$message = $response->message('',[
'from' => $request->input('To'),
'to' => $FromNumber
]);
$message->body($messageBody);
//return (string)$response;
return response($response->asXML())->header('Content-Type', 'application/xml');
}
public function deleteMediaFromTwilio($mediaItem)
{
return $this->twilio->api->accounts($this->accountSid)
->messages($mediaItem['MessageSid'])
->media($mediaItem['mediaSid'])
->delete();
}
public function allMedia()
{
$mediaItems = MMSMedia::all();
return $mediaItems;
}
public function getMediaFile($filename, Response $response)
{
$media = MMSMedia::where('filename', $filename)->firstOrFail();
$fileContents = $media['media'];
$MessageSid = $media['MessageSid'];
$mediaSid = $media['mediaSid'];
$MIMEType = $media['MIMEType'];
$media->delete();
$this->deleteMediaFromTwilio(compact('mediaSid', 'MessageSid'));
return response($fileContents, 200)
->header('Content-Type', $MIMEType);
}
public function config()
{
return ['twilioNumber' => $this->twilioNumber];
}
}
Есть какие-нибудь идеи по этому поводу?