PLIVO v3验证无法使用PLIVO SDK验证签名

  • 本文关键字:PLIVO 验证 SDK v3 php plivo
  • 更新时间 :
  • 英文 :


我正在尝试验证从plivo到应用程序服务器的请求。为此,我使用了文档中plivo提供的示例代码。

<?php
require 'vendor/autoload.php';
use PlivoExceptionsPlivoValidationException;
use PlivoUtilv3SignatureValidation;
use PlivoXMLResponse;
if (preg_match('/speak/', $_SERVER["REQUEST_URI"])) {
$auth_token = "<auth_token>";
$signature = @$_SERVER["X-Plivo-Signature-V3"] ?: 'signature';
$nonce = @$_SERVER["X-Plivo-Signature-V3-Nonce"] ?: 'nonce';
$url = 'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . "{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
$method = $_SERVER['REQUEST_METHOD'];
$SVUtil = new v3SignatureValidation();
if ($method == "GET") {
try {
$valid = $SVUtil->validateV3Signature($method, $url, $nonce, $auth_token, $signature);
} catch (PlivoValidationException $e) {
echo("error");
}
} else {
$body = file_get_contents("php://input");
$params = json_decode($body, true);
try {
$valid = $SVUtil->validateV3Signature($method, $url, $nonce, $auth_token, $signature, $params);
} catch (PlivoValidationException $e) {
echo("error");
}
}
echo $valid;
$body = 'Hi, Calling from Plivo';
$attributes = array(
'loop' => 3,
);
$r = new Response();
$r->addSpeak($body, $attributes);
echo($r->toXML());
} else {
echo "<p>Welcome to Plivo</p>";
}

但是我收到这个错误

Invalid argument supplied for foreach() in code/plivo/vendor/plivo/plivo-php/src/Plivo/Util/v3SignatureValidation.php on line 13

我正在调试,但找不到解决方案。我注意到,在json中没有从PLIVO服务器接收到任何东西。有人能帮忙吗?因为没有足够的文档可用于Plivo请求验证。

Plivo的开发者福音传道者。请尝试以下代码。

<?php
require 'vendor/autoload.php';
use PlivoExceptionsPlivoValidationException;
use PlivoUtilv3SignatureValidation;
use PlivoXMLResponse;
if (preg_match('/speak/', $_SERVER["REQUEST_URI"]))
{
$auth_token = "<auth_token>";
$signature = @$_SERVER["HTTP_X_PLIVO_SIGNATURE_V3"] ? : 'signature';
$nonce = @$_SERVER["HTTP_X_PLIVO_SIGNATURE_V3_NONCE"] ? : 'nonce';
$url = $_SERVER['HTTP_REFERER'];
$method = $_SERVER['REQUEST_METHOD'];
$SVUtil = new v3SignatureValidation();
if ($method == "GET")
{
try
{
$valid = $SVUtil->validateV3Signature($method, $url, $nonce, $auth_token, $signature);
}
catch(PlivoValidationException $e)
{
echo ("error");
}
}
else
{
$body = file_get_contents("php://input", true);
parse_str($body, $get_array);
try
{
$valid = $SVUtil->validateV3Signature($method, $url, $nonce, $auth_token, $signature, $get_array);
}
catch(PlivoValidationException $e)
{
echo ("error");
}
}
error_log(print_r($valid, true));
$body = 'Hi, Calling from Plivo';
$attributes = array(
'loop' => 3,
);
$r = new Response();
$r->addSpeak($body, $attributes);
echo ($r->toXML());
}
else
{
echo "<p>Welcome to Plivo</p>";
}

并运行以下命令

php -S localhost:5000

如果您仍然面临任何问题,请随时联系我们的支持团队

src:https://www.plivo.com/docs/voice/concepts/signature-validation#code

最新更新