Postmark / Guzzle InvalidArgumentException: неверный тип ресурса: логический

1

Я продолжаю получать InvalidArgumentException: Invalid resource type: boolean из некоторых писем, отправляемых через Postmark. Некоторые работают, другие - нет. Я не вижу ничего другого между работающими электронными письмами и теми, у кого есть ошибки. Они работают с одним и тем же кодом с теми же параметрами.

Вот что я перехожу в Postmark:

$client = new PostmarkClient($config->postmark->token);
$sendResult = $client->sendEmail(
  $config->postmark->sender,
  $recipient,
  $subject,
  $html_body,
  $text_body,
  null, true, null, null, null, null, $attachments
);

Здесь стек вызовов:

vendor/guzzlehttp/streams/src/Stream.php in factory at line 85
throw new \InvalidArgumentException('Invalid resource type: ' . $type);

vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php in applyOptions at line 345
$request->setBody(Stream::factory(json_encode($value)));

vendor/guzzlehttp/guzzle/src/Message/MessageFactory.php in createRequest at line 98
$this->applyOptions($request, $options);

vendor/guzzlehttp/guzzle/src/Client.php in createRequest at line 120
return $this->messageFactory->createRequest($method, $url, $options);

vendor/wildbit/postmark-php/src/Postmark/PostmarkClientBase.php in processRestRequest at line 101
$request = $client->createRequest($method, $url, $options);

vendor/wildbit/postmark-php/src/Postmark/PostmarkClient.php in sendEmail at line 61
return new DynamicResponseModel($this->processRestRequest('POST', '/email', $body));

library/send_mail.php in send_mail at line 86

Некоторое время я искал Google и не нашел ничего, чтобы понять это.

Я посмотрел здесь: https://laracasts.com/discuss/channels/general-discussion/mandrill-trouble-invalid-resource-type-boolean и здесь: https://laracasts.com/forum/?p=2325 -problems-using-mandrill/0, но у обоих из них были проблемы с Laravel + Mandrill, но я использую Postmark и без рамки. Тем не менее, у нас есть Гузл. Оба этих сообщения сказали, что они обработали его, обновив или переустановив их.

Кажется, у меня работает "рабочая" версия Guzzle. Проблема GitHub № 628 для Guzzle, похоже, именно то, что я вижу, но эта проблема говорит, что она исправлена в 4.0.2, я на Guzzle 5.3:

Из моего composer.lock на сервере:

{
  "name": "guzzlehttp/guzzle",
  "version": "5.3.0"
},
...
{
  "name": "guzzlehttp/streams",
  "version": "3.0.0"
},
...
{
  "name": "wildbit/postmark-php",
  "version": "dev-master",
  "source": {
      "type": "git",
      "url": "https://github.com/wildbit/postmark-php",
      "reference": "2eabc627c3f2a693b986e51d2f892cc2e2d065b3"
  },
  "require": {
    "guzzlehttp/guzzle": "~5.1",
    "php": ">=5.4.0"
  },
}

Есть предположения?

Теги:
guzzle
postmark

1 ответ

1
Лучший ответ

Когда ваша ошибка не сразу очевидна, тогда вызов stak обычно проливает свет на то, что происходит неправильно. Это не исключение, и я должен был заметить это раньше.

Второй, чтобы последний элемент в стеке вызовов, где это пошло плохо.

$request->setBody(Stream::factory(json_encode($value)));

Здесь json_encode($value) возвращает логическое значение. Используя json_last_error() я смог определить, что проблема JSON_ERROR_UTF8 со смешанным кодированием символов (JSON_ERROR_UTF8).

Где-то в пользовательском вводе были предоставлены пользовательские данные, которые были комбинацией UTF-8 и ISO-8895-1. Поскольку это было непоследовательно, некоторые электронные письма работали бы очень хорошо, в то время как другие были неудачными.

Я закончил тем, что мой $html_body и $text_body был UTF-8, и все начало работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню