Twilio cURL导致身份验证错误 - 未提供凭据

时间:2016-01-02 11:48:07

标签: ssl curl twilio

我正在努力从你的twilio api发送一个msg,我在本地服务器上的twilio网站上测试了你的演示,具有以下功能: 主持人:(i686-pc-linux-gnu) libcurl php版本:7.35.0 ssl版本:OpenSSL / 1.0.1f。

它适用于我的本地服务器,但在此服务器上具有以下功能: 主机:x86_64-redhat-linux-gnu libcurl php版本:7.19.7 ssl版本:NSS / 3.19.1基本ECC 它不起作用。 这是对twilio api的curl请求的输出:

{“code”:20003,“detail”:“您的AccountSid或AuthToken不正确。”,“消息”:“身份验证错误 - 未提供凭据”,“more_info”:“https://www.twilio.com/docs/errors/20003”,“状态“:401} 1

代码:

<?php
//my trial account sid, and token
$sid = "XXXXXXXXXXXX"; // Your Account SID from www.twilio.com/user/account
$token = "XXXXXXXXXXXXX"; // Your Auth Token from www.twilio.com/user/account

function send_sms( $sid, $token, $to, $from, $body ) {
    // resource url & authentication
    $uri = 'https://api.twilio.com/2010-04-01/Accounts/' . $sid . '/SMS/Messages.json';
    $auth = $sid . ':' . $token;

    // post string (phone number format= +15554443333 ), case matters
    $fields = 
        '&To=' .  urlencode( $to ) . 
        '&From=' . urlencode( $from ) . 
        '&Body=' . urlencode( $body );

    // start cURL
    $res = curl_init($uri);

    // set cURL options
    curl_setopt( $res, CURLOPT_POST, TRUE ); 
    curl_setopt( $res, CURLOPT_RETURNTRANSFER, TRUE ); // don't echo
    curl_setopt( $res, CURLOPT_SSL_VERIFYPEER, FALSE );
    curl_setopt( $res, CURLOPT_HTTPAUTH, CURLAUTH_BASIC );
    curl_setopt( $res, CURLOPT_USERPWD, $auth ); // authenticate
    curl_setopt( $res, CURLOPT_POSTFIELDS, $fields );


    // send cURL
    $result = curl_exec( $res );
    curl_close($res);
    return $result;
}
echo send_sms($sid,$token,"+XXXXXXXX","+XXXXXXXXXXXXXX","TESTING");
?>

我希望你知道问题是什么,但我认为它与ssl版本有关,包括服务器上的php curl扩展。

PS:我无权访问第二台服务器,因此我无法将libcurl扩展升级到最新版本,我认为这是问题的原因。

1 个答案:

答案 0 :(得分:1)

&分隔POST-DATA中的字段,因此您不需要初始字段。 变化:

$fields = 
    '&To=' .  urlencode( $to ) . 

为:

$fields = 
    'To=' .  urlencode( $to ) . 

[编辑] 我在你正在做的事情之间看到的另一个区别是,我将sid和auth直接包含在URL中:

$uri = "https://" . $sid . ":" + $auth . "@api.twilio.com/2010...";

而不是使用:

curl_setopt( $res, CURLOPT_HTTPAUTH, CURLAUTH_BASIC );
curl_setopt( $res, CURLOPT_USERPWD, $auth );

但我不知道这是否重要。