当我使用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,
)
);
答案 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]);