我正在努力从你的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扩展升级到最新版本,我认为这是问题的原因。
答案 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 );
但我不知道这是否重要。