Twilio 的 PHP 代码在终端中工作,但在浏览器中不工作

Posted

技术标签:

【中文标题】Twilio 的 PHP 代码在终端中工作,但在浏览器中不工作【英文标题】:PHP Code For Twilio Works In Terminal But Not In Browser 【发布时间】:2018-11-23 11:42:06 【问题描述】:

我在下面有以下 php 文件。当我从终端运行它时,它工作得很好。但是,当我在浏览器中打开 php 文件时,出现以下异常:

致命错误:在 /Applications/AMPPS/www/vendor/twilio/sdk/Twilio/Http/CurlClient.php 中出现消息“SSL 证书问题:无法获取本地颁发者证书”的未捕获异常“Twilio\Exceptions\EnvironmentException” :41 堆栈跟踪:#0 /Applications/AMPPS/www/vendor/twilio/sdk/Twilio/Rest/Client.php(208): Twilio\Http\CurlClient->request('POST', 'https://api.twi.. .', 数组, 数组, 数组, 'AC9fc89840f15b3...', 'd1db324eb375a2e...', NULL) #1 /Applications/AMPPS/www/vendor/twilio/sdk/Twilio/Domain.php(70): Twilio \Rest\Client->request('POST', 'https://api.twi...', Array, Array, Array, NULL, NULL, NULL) #2 /Applications/AMPPS/www/vendor/twilio/sdk/Twilio/ Version.php(64): Twilio\Domain->request('POST', '2010-04-01/Acco...', Array, Array, Array, NULL, NULL, NULL) #3 /Applications/AMPPS/ www/vendor/twilio/sdk/Twilio/Version.php(216): Twilio\Version->request('POST', '/Accounts/AC9fc...', Array, Array, Array, NULL, NULL, NULL) #4 /Applications/AMPPS/www/vendor/twilio/sdk/Twilio/Rest/Api/V2010/Ac count/MessageList.php(70):第 41 行 /Applications/AMPPS/www/vendor/twilio/sdk/Twilio/Http/CurlClient.php 中的 Twili

这是我的代码:

    <?php // sendMessageTwilio.php

  require __DIR__ . '/vendor/autoload.php';
  use Twilio\Rest\Client;

    // Your Account SID and Auth Token from twilio.com/console
  $account_sid = 'XXXXXXXXXX';
  $auth_token = 'XXXXXXXXXX';
  // In production, these should be environment variables. E.g.:
  // $auth_token = $_ENV["TWILIO_ACCOUNT_SID"]

    // A Twilio number you own with SMS capabilities
  $twilio_number = "+XXXXXXXX";

  $client = new Client($account_sid, $auth_token);
  $client->messages->create(
      // Where to send a text message (your cell phone?)
      '+XXXXXXXXXXX',
      array(
          'from' => $twilio_number,
          'body' => 'Testing From Website New!'
      )
  );

  $number = $question = '';

  if (isset($_POST['number']))
    $number = $_POST['number'];
    $out = "Number: $number";
   

  if (isset($_POST['question']))
    $question = $_POST['question'];
    $out = $out."   Question: $question";
   

  else $out = "";

  echo <<<_END

<html>
  <head>
    <title>Student Feedback</title>
  </head>
  <body>
    <pre>

      Enter phone number and question
      <b>$out</b>
      <form method="post" action="sendMessageTwilio.php">
        Phone Number: <input type="text" name="number" size="17">
        Question:     <input type="text" name="question" size="17">
                      <input type="submit" value="Send Message">
      </form>
    </pre>
  </body>
</html>
_END;

我正在使用 composer 来设置所有必要的文件。

谢谢大家!

【问题讨论】:

如果我将它上传到服务器上它也可以工作......所以似乎是一个本地问题 【参考方案1】:

Linux 服务器通常有ca_cert.pem。请按照以下步骤解决您的问题

https://support.twilio.com/hc/en-us/articles/235279367-Twilio-PHP-helper-library-SSL-certificate-problem-on-Windows

更新

这是我的代码

$http = new Services_Twilio_TinyHttp(
  'https://api.twilio.com',
   array('curlopts' => array(
     CURLOPT_SSL_VERIFYPEER => false,
     CURLOPT_SSL_VERIFYHOST => 2,
   ))
);

$sid = 'ACfb185500bf13ce37c37fd2e13dsdfsdf'; 
$token = '4be5dcdb74e4cbd50d642a56b1fasdf2'; 
$client = new Services_Twilio($sid, $token, "2010-04-01", $http);

$message = $client->account->messages->sendMessage(
    '+441231231231', // From a Twilio number in your account
    '+441231231231,
    'OTP for login is: 1234'
);

你需要设置 curl 选项来禁止 SSL 验证

CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 2,

【讨论】:

谢谢阿希克!我应该提到我在Mac上。我已按照以下说明操作:wiki.cacert.org/FAQ/ImportRootCert#Using_the_command_line 但我仍然遇到同样的问题... 非常感谢您的帮助! 点赞!对于任何使用 Laravel 框架的人,都可以在 Guzzle 包中禁用 SSL 验证

以上是关于Twilio 的 PHP 代码在终端中工作,但在浏览器中不工作的主要内容,如果未能解决你的问题,请参考以下文章

为啥“docker login”在 Docker 快速启动终端中失败,但在默认机器中工作?

查询在 PHPMyAdmin 中工作但在 PHP 中不工作

Python代码在shell中工作正常,但在文件中调用时不能

PHP POST api 在邮递员中工作,但在颤振应用程序中不工作

PayPal IPN 问题,但在沙盒中工作正常

应用程序在 iPad 中崩溃但在 iPad 模拟器中工作正常