2015-02-12 2 views
3

Почему функция sendMessage() выбрасывает здесь исключение?Замечание параметра SendMessage Mailgun

$mg = new MailGun('my_actual_api_key'); 

$response = $mg->sendMessage('my-domain.com', array(
    'from'  => '[email protected]', 
    'to'  => '[email protected]', 
    'subject' => 'Test', 
    'html'  => '<h1>Test body</h2>' 
)); 

... и исключение я получаю ...

Fatal error: Uncaught exception'Mailgun\Connection\Exceptions\MissingRequiredParameters' with message 'The parameters passed to the API were invalid. Check your inputs!' in C:\wamp\www\sektor\admin\app\application\third_party\MailGun\vendor\mailgun\mailgun-php\src\Mailgun\Connection\RestClient.php on line 127

Видимо параметры, которые я посылаю к API неправы, но это следующая документация API MailGun, но это явно Безразлично Не работай.

Я вообще не модифицировал код класса Mailer.

ответ

6

Чтобы получить немного больше информации об этой ошибке, используйте код из this patch:

Adds the actual response message to the errors thrown on 400, 401 and 404 response codes. This provides a lot more useful info than the current messages. The message doesn’t really give you much to go on. I spent hours trying to find what I did wrong, double checking my API keys and looking up the error on google.

Изменить исходный файл src/Mailgun/Connection/RestClient.php, как это (полный патч наhttps://github.com/mailgun/mailgun-php/pull/72/files):

При метании исключение EXCEPTION_MISSING_REQUIRED_PARAMETERS, получить дополнительную информацию по методу getResponseExceptionMessage() (примечание + и - знаки перед добавленными и удаленными линиями):

elseif($httpResponseCode == 400){ 
-   throw new MissingRequiredParameters(ExceptionMessages::EXCEPTION_MISSING_REQUIRED_PARAMETERS); 
+   throw new MissingRequiredParameters(ExceptionMessages::EXCEPTION_MISSING_REQUIRED_PARAMETERS . $this->getResponseExceptionMessage($responseObj)); 
     } 

    /** 
+  * @param \Guzzle\Http\Message\Response $responseObj 
+  * @return string 
+  */ 
+ protected function getResponseExceptionMessage(\Guzzle\Http\Message\Response $responseObj){ 
+  $body = (string)$responseObj->getBody(); 
+  $response = json_decode($body); 
+  if (json_last_error() == JSON_ERROR_NONE && isset($response->message)) { 
+   return " " . $response->message; 
+  } 
+ } 
+0

Большое спасибо за ответ. Функция, добавленная в исключение, дала мне хорошее сообщение об ошибке, и я смог исправить эту проблему. – Lancashireman

+0

@ Lancashireman Рад это услышать. Пожалуйста, отметьте ответ как принятый (отметьте отметку ниже стрелок). Более подробную информацию о принятии ответов можно найти здесь: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work. –

+0

Новое в этом. Взят под опеку! – Lancashireman

Смежные вопросы