фатальная ошибка при попытке отправить сообщение с помощью twilio Api phpSDK

Когда я использую twilio, я получаю следующую ошибку:

Перехватываемая фатальная ошибка PHP: аргумент 2 передается в Twilio\Rest\Api\V2010\Account\MessageInstance::__construct() должен быть типа array, задано значение NULL, вызывается в /data/home/changliang /twilio/twilio-php-master/Twilio/Rest/Api/V2010/Account/MessageList.php в строке 69 и определено в /data/home/changliang/twilio/twilio-php-master/Twilio/Rest/Api/V2010 /Account/MessageInstance.php в строке 52

это мой код.

require_once("/twilio/twilio-php-master/Twilio/autoload.php");
use Twilio\Rest\Client;
$to = '+12022022022'
$content = 'hello';
$sid = 'XXXXXXX'; 
$token = 'XXXXXXXX'; 
$client = new Client($sid, $token);
$sms = $client->account->messages->create(  
    $to,
    array(
        'from' => '+12346788xx',
        'body' => $content,
    )  
);

person Clarence    schedule 06.12.2016    source источник


Ответы (2)


Была такая же ошибка. Возможно, ваш запрос сделан через корпоративный прокси-сервер? Это было проблемой здесь. Прокси-сервер здесь добавляет дополнительный HTTP-заголовок к заголовку ответа, и из-за этого CurlClient неправильно анализирует тело ответа:

HTTP/1.1 200 Соединение установлено

Я исправил это, добавив дополнительный заголовок для пропуска в классе CurlClient в строке 37:

Оригинал:

list($head, $body) = ($parts[0] == 'HTTP/1.1 100 Continue')
                           ? array($parts[1], $parts[2])
                           : array($parts[0], $parts[1]);

Новый:

list($head, $body) = ($parts[0] == 'HTTP/1.1 100 Continue'
                   || $parts[0] == 'HTTP/1.1 200 Connection established')
                           ? array($parts[1], $parts[2])
                           : array($parts[0], $parts[1]);
person Bastian    schedule 19.04.2017
comment
работает без проблем. Клиент Curl находится в каталоге: twilio_outbound_phone_call/twilio-php-master/Twilio/Http - person Gianluca D'Ardia; 24.11.2017

Исправление Бастиана сработало для меня, но похоже, что SDK мог немного измениться с момента его ответа. Для меня это выглядело изначально так:

list($head, $body) = (
    \preg_match('/\AHTTP\/1.\d 100 Continue\Z/', $parts[0])
    || \preg_match('/\AHTTP\/1.\d 200 Connection established\Z/', $parts[0])
    || \preg_match('/\AHTTP\/1.\d 200 Tunnel established\Z/', $parts[0])
)           ? array($parts[1], $parts[2])
            : array($parts[0], $parts[1]);

и заголовок, который возвращал мой прокси, был:

HTTP/1.1 200 OK
Connection: Keep-Alive

исправление для меня состояло в том, чтобы добавить регулярное выражение, чтобы поймать в основном ответ заголовка 200:

list($head, $body) = (
    \preg_match('/\AHTTP\/1.\d 100 Continue\Z/', $parts[0])
    || \preg_match('/\AHTTP\/1.\d 200 Connection established\Z/', $parts[0])
    || \preg_match('/\AHTTP\/1.\d 200 Tunnel established\Z/', $parts[0])
    || \preg_match('/\AHTTP\/1.\d 200 .*/', $parts[0])
)           ? array($parts[1], $parts[2])
            : array($parts[0], $parts[1]);
person DSanchez    schedule 28.12.2020