首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PLIVO v3验证无法使用PLIVO验证签名

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

Stack Overflow用户
提问于 2022-01-12 10:03:12
回答 1查看 46关注 0票数 0

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

代码语言:javascript
复制
<?php
require 'vendor/autoload.php';
use Plivo\Exceptions\PlivoValidationException;
use Plivo\Util\v3SignatureValidation;
use Plivo\XML\Response;

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>";
}

但我发现了这个错误

代码语言:javascript
复制
Invalid argument supplied for foreach() in code/plivo/vendor/plivo/plivo-php/src/Plivo/Util/v3SignatureValidation.php on line 13

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

EN

回答 1

Stack Overflow用户

发布于 2022-06-02 11:10:13

普利沃的开发者布道者来了。请改用下面的代码。

代码语言:javascript
复制
<?php
require 'vendor/autoload.php';
use Plivo\Exceptions\PlivoValidationException;
use Plivo\Util\v3SignatureValidation;
use Plivo\XML\Response;

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>";
}

并运行以下命令

代码语言:javascript
复制
php -S localhost:5000

如果您还面临任何问题,请随时与我们的支援队联系

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70679607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档