kesalahan fatal saat mencoba mengirim pesan menggunakan twilio Api phpSDK

Ketika saya menggunakan twilio saya mendapatkan kesalahan berikut:

Kesalahan fatal PHP yang dapat ditangkap: Argumen 2 diteruskan ke Twilio\Rest\Api\V2010\Account\MessageInstance::__construct() harus bertipe array, diberikan null, dipanggil di /data/home/changliang /twilio/twilio-php-master/Twilio/Rest/Api/V2010/Account/MessageList.php pada baris 69 dan ditentukan di /data/home/changliang/twilio/twilio-php-master/Twilio/Rest/Api/V2010 /Akun/MessageInstance.php pada baris 52

ini kode saya.

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 sumber


Jawaban (2)


Mengalami kesalahan yang sama. Apakah permintaan Anda mungkin dibuat melalui server proxy perusahaan? Itulah masalahnya di sini. Server proksi di sini menambahkan header HTTP tambahan ke header respons dan karena itu CurlClient tidak menguraikan isi respons dengan benar:

HTTP/1.1 200 Koneksi dibuat

Saya memperbaikinya dengan menambahkan header tambahan untuk dilewati di kelas CurlClient sekitar baris 37:

Asli:

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

Baru:

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
berfungsi tanpa masalah. Klien Curl ditempatkan di direktori: twilio_outbound_phone_call/twilio-php-master/Twilio/Http - person Gianluca D'Ardia; 24.11.2017

Perbaikan Bastian berhasil untuk saya, tetapi sepertinya SDK mungkin sedikit berubah sejak tanggapannya. Bagi saya awalnya tampak seperti:

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

dan tajuk yang dikembalikan proxy saya adalah:

HTTP/1.1 200 OK
Connection: Keep-Alive

perbaikan bagi saya adalah menambahkan regex untuk menangkap 200 respons header:

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