尝试使用twilio Api phpSDK发送消息时发生致命错误

时间:2016-12-06 06:53:37

标签: php twilio fatal-error

当我使用twilio时,我收到以下错误:

  

PHP Catchable致命错误:参数2传递给   Twilio \ Rest \ Api \ V2010 \ Account \ MessageInstance :: __ construct()必须是   类型数组,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,
    )  
);

2 个答案:

答案 0 :(得分:3)

有同样的错误。您的请求是否可以通过公司代理服务器进行?这就是问题所在。代理服务器在这里为响应头添加了一个额外的HTTP头,因此CurlClient无法正确解析响应体:

  

建立HTTP / 1.1 200连接

我通过添加额外的标题来修复它,以便在第37行的CurlClient类中跳过:

原件:

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]);

答案 1 :(得分:0)

巴斯蒂安的修复对我有用,但看起来 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]);