【问题标题】:Twilio not working with curl phpTwilio 不能使用 curl php
【发布时间】:2014-09-12 19:32:53
【问题描述】:

我正在使用TWILIO SMS,我正在使用试用帐户,一切都在使用纯 php 库,但是在使用 CURL 和 PHP 时遇到了问题

require "Services/Twilio.php";
$AccountSid = "SANDBOX_ACC_ID"; 
$AuthToken = "SANDBOX_TOKEN";
$client = new Services_Twilio($AccountSid, $AuthToken);
$message = $client->account->messages->create(array(
"From" => "+MAGICNUMBER",
"To" => "+XXXXXXXXXX",// twilio trial verified number
"Body" => "Test message 2 from Fedrick!",
));
// Display a confirmation message on the screen
echo "testing with php message {$message->sid}";

纯php输出:

testing with php message SMxxxxxxxxxxxxxxxxxxxx

我尝试过使用 CURL 和 PHP 的代码(不起作用)

$url = "https://api.twilio.com/2010-04-01/Accounts/SANDBOX_ACC_ID/SMS/Messages.json";
$from = "+MAGICNUMBER";
$to = "+XXXXXXXXXX"; // twilio trial verified number
$body = "using twilio rest api from Fedrick";
$id = "SANDBOX_ACC_ID";
$token = "SANDBOX_TOKEN";
$data = array (
        'From' => $from,
        'To' => $to,
        'Body' => $body,

    );
$post = http_build_query($data);
$x = curl_init($url );
curl_setopt($x, CURLOPT_POST, true);
curl_setopt($x, CURLOPT_RETURNTRANSFER, true);
curl_setopt($x, CURLOPT_USERPWD, "$id:$token");
curl_setopt($x, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($x, CURLOPT_POSTFIELDS, $post);
var_dump($post);
$y = curl_exec($x);
var_dump($y);
curl_close($x);

使用 Curl php 输出:

bool(false) 

我在 curl 代码中做错了什么...有没有不使用纯 php 库的解决方案,我想像上面的 CURL 代码一样使用简短的代码

【问题讨论】:

    标签: php json curl twilio


    【解决方案1】:

    首先,由于 API 的 URL 是安全的,您必须通过将 CURLOPT_SSL_VERIFYPEER 选项设置为 false 来禁用 SSL 对等验证。

    此外,根据API docs,请求的 URL 取决于帐户,即它应该基于您的帐户沙箱 ID 构建:

    https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages
    

    所以代码应该是这样的:

    $id = "SANDBOX_ACC_ID";
    $token = "SANDBOX_TOKEN";
    $url = "https://api.twilio.com/2010-04-01/Accounts/$id/SMS/Messages";
    $from = "+MAGICNUMBER";
    $to = "+XXXXXXXXXX"; // twilio trial verified number
    $body = "using twilio rest api from Fedrick";
    $data = array (
        'From' => $from,
        'To' => $to,
        'Body' => $body,
    );
    $post = http_build_query($data);
    $x = curl_init($url );
    curl_setopt($x, CURLOPT_POST, true);
    curl_setopt($x, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($x, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($x, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($x, CURLOPT_USERPWD, "$id:$token");
    curl_setopt($x, CURLOPT_POSTFIELDS, $post);
    $y = curl_exec($x);
    curl_close($x);
    var_dump($post);
    var_dump($y);
    

    【讨论】:

    • +1 效果很好...如何格式化 var_dump($y),这里的输出显示没有任何格式
    • @fedrick 由于响应是 JSON,所以你必须在输出前使用json_decode
    • json_decode($x) before curl_close($y).. 正确吗?
    • 我认为它没有返回 json 响应......它只是在屏幕上显示一些数据
    • 我试过 var_dump(json_decode($y));它显示 NULL
    【解决方案2】:

    这是一个 PHP - 可调用函数中的 Curl 实现

    function send_sms($number,$body)
    {
        $ID = '1234567890abcdef1234567890abcdef12';
        $token = '1234567890abcdef1234567890abcdef';
        $service = 'AB1234567890abcdef1234567890abcdef';
        $url = 'https://api.twilio.com/2010-04-01/Accounts/' . $ID . '/Messages.json';
    
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    
        curl_setopt($ch, CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
        curl_setopt($ch, CURLOPT_USERPWD,$ID . ':' . $token);
    
        curl_setopt($ch, CURLOPT_POST,true);
        curl_setopt($ch, CURLOPT_POSTFIELDS,
            'To=' . rawurlencode('+' . $number) .
            '&MessagingServiceSid=' . $service .
            //'&From=' . rawurlencode('+18885550000') .
            '&Body=' . rawurlencode($body));
    
        $resp = curl_exec($ch);
        curl_close($ch);
        return json_decode($resp,true);
    }
    

    $ID 和 $token 可以在 SMS / Dashboard / 'Show API Credentials' 下找到 https://www.twilio.com/console/sms/dashboard

    (可选)$service 可以在 SMS / Messaging Services / 'SID' https://www.twilio.com/console/sms/services下找到

    注释掉“MessagingServiceSid=”并取消注释“From=”以使用从单个电话号码直接发送

    最后,可以在这里https://www.twilio.com/docs/sms/send-messages#send-a-message-with-an-image-urlhttps://www.twilio.com/docs/sms/send-messages#send-a-message-with-an-image-url找到埋在kb中的关键信息

    【讨论】:

      【解决方案3】:

      Curl Twilio PHP7+

      $account_sid = 'account_sid';
      $auth_token = 'auth_token';
      
      $url = "https://api.twilio.com/2010-04-01/Accounts/$account_sid/SMS/Messages";
      $to = "+xxxxxx";
      $from = "+xxxxxx"; // twilio trial verified number
      $body = "using twilio rest api from Fedrick";
      $data = array (
          'From' => $from,
          'To' => $to,
          'Body' => $body,
      );
      $post = http_build_query($data);
      $x = curl_init($url );
      curl_setopt($x, CURLOPT_POST, true);
      curl_setopt($x, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($x, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($x, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
      curl_setopt($x, CURLOPT_USERPWD, "$account_sid:$auth_token");
      curl_setopt($x, CURLOPT_POSTFIELDS, $post);
      $y = curl_exec($x);
      curl_close($x);
      
      //var_dump($post);
      //var_dump($y);
      

      【讨论】:

        【解决方案4】:

        你必须使用:

        https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.json
        

        对于json响应

        https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.xml
        

        用于 xml 响应

        【讨论】:

          猜你喜欢
          • 2011-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多