Почему функция sendMessage () выдает здесь исключение?
$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>'
));
…и я получаю исключение …
Неустранимая ошибка: необработанное исключение «Mailgun \ Connection \ Exceptions \ MissingRequiredParameters» с сообщением «Параметры, переданные в API, недопустимы. Проверьте ваши входы! в C: \ wamp \ www \ sektor \ admin \ app \ application \ third_party \ MailGun \ vendor \ mailgun \ mailgun-php \ src \ Mailgun \ Connection \ RestClient.php в строке 127
Очевидно, что параметры, которые я отправляю в API, неверны, но они следуют документации API MailGun, но это явно не работает.
Я вообще не модифицировал код класса Mailer.
Чтобы получить немного больше информации об этой ошибке, используйте код из этот патч:
Добавляет фактическое ответное сообщение к ошибкам, выданным на 400, 401 и
404 кода ответа. Это дает гораздо больше полезной информации, чем
текущие сообщения. Сообщение на самом деле не дает вам много, чтобы продолжить. я
потратил часы, пытаясь найти то, что я сделал неправильно, дважды проверяя мой API
ключи и поиск ошибок на 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;
+ }
+ }
Других решений пока нет …