nexmo/client-core

此包已废弃,不再维护。没有推荐替代包。

废弃的用于使用Vonage API的PHP客户端 - 请使用vonage/client-core


README

Contributor Covenant Build Status Latest Stable Version MIT licensed codecov

Nexmo is now known as Vonage

支持通知

该库及其相关包,nexmo/clientnexmo/client-core 已过渡到“仅维护”模式。在未来十二个月(12个月)内,此库将只接收错误或安全修复。该库将从2021年10月1日起正式停止支持。

我们建议用户开始迁移到 https://github.com/vonage/vonage-php-sdk-core 以及 vonage/clientvonage/client-core 包,用于其应用程序。Vonage包完全支持 \Nexmo 命名空间,应该可以替代Nexmo包。

如果您有任何疑问,请随时通过 [email protected] 或通过我们的社区Slack(https://developer.nexmo.com/community/slack)联系我们

此库需要至少PHP版本7.2

这是用于使用Vonage API的PHP客户端库。要使用它,您需要一个Vonage账户。在 nexmo.com 上免费注册。

迁移

此包已正式过渡到“仅维护”模式,我们强烈建议将所有代码库迁移到 vonage/clientvonage/client-core。虽然我们将支持此包的任何所需错误或安全修复,但不会为该代码库开发新功能,包括新产品发布。我们将提供最长十二个月(12个月)的支持,以使用户有时间升级。

我们已尽力使升级对所有用户尽可能无缝。

步骤1 - 查找当前版本

我们需要什么

  • 您是否有请求 nexmo/clientnexmo/client-core
  • 已安装的 nexmo/client-core 的版本是什么?

我们需要做的第一件事是弄清楚您安装了什么版本。最快的方法是直接打开 composer.json 并搜索“nexmo/client”和“nexmo/client-core”,然后查看您拥有哪一个。您应该在 composer.json 中请求 nexmo/clientnexmo/client-core。注意记录您在 composer.json 文件中拥有的版本。

要找出您安装的 nexmo/client-core 的版本,您可以运行以下命令:

composer show nexmo/client-core

这将给出以下输出,我们关注的是“versions”行

name     : nexmo/client-core
descrip. : Deprecated PHP Client for using Vonage's API - please use vonage/client-core
keywords : 
versions : * 2.3.3
type     : library
license  : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
homepage : 
source   : [git] https://github.com/Nexmo/nexmo-php.git bedc32d90871f8347b6a211602e919a1d4d45184
dist     : [zip] https://api.github.com/repos/Nexmo/nexmo-php/zipball/bedc32d90871f8347b6a211602e919a1d4d45184 bedc32d90871f8347b6a211602e919a1d4d45184
path     : /home/ctankersley/tmp/vrsions/vendor/nexmo/client-core
names    : nexmo/client-core

请注意这个版本,因为它将决定您的下一步。

步骤2 - 修改包

我在 composer.json 中有 nexmo/client

在大多数情况下,更新新包相对容易。我们需要移除 nexmo/client 包,并用 vonage/client 包替换它。这可以通过 Composer 完成,因为它将为您修改 composer.jsoncomposer.lock 文件。

composer remove nexmo/client
composer require vonage/client:^2.3

根据您安装的 nexmo/client-core 版本,您可能需要做额外的升级工作。新包设计成继续与 \Nexmo 命名空间一起工作,因此您现有的所有代码都应该继续工作。您可以在方便的时候安排重构。

  • nexmo/client-core >= v2.3.3 - 恭喜,您已经在使用新代码了!我们只需要更改请求的包。开始为新代码使用 \Vonage 命名空间,并在您方便的时候重构现有代码。
  • nexmo/client-core <= v2.2.3 but >= 2.0.0 - 您正在当前的主版本上,所以新包与您的当前代码兼容。您应该能够在不更改代码的情况下安全地升级到最新的 Vonage 包。除非您有特定的原因而停留在 2.x 的旧版本,否则您的代码应该不会发生变化。如果您有特定的原因而暂缓升级,您将有直到 2021 年 10 月 1 日的时间来对代码进行必要的更改,并且您可能需要安排额外的时间来测试升级。
  • nexmo/client-core 未安装 - 如果您定义了 nexmo/client,但 Composer 显示 nexmo/client-core 未安装,这意味着您使用的是 Nexmo 库的非常旧的版本,如 1.x 或早期的 Beta 版本。如果您选择切换到 Vonage 包,则您的代码库可能会有重大变化,但请记住,即使今天,您的安装也不受 Nexmo 包的支持。我们只支持当前发布的重大版本,即我们的 2.x 发布线。1.x 和任何更早的版本目前没有收到任何错误或安全修复,所以我们强烈建议您尽快升级。

我在 composer.json 中有 nexmo/client-core

在大多数情况下,更新新包相对容易。我们需要移除 nexmo/client-core 包,并用 vonage/client-core 包替换它。这可以通过 Composer 完成,因为它将为您修改 composer.jsoncomposer.lock 文件。

composer remove nexmo/client-core
composer require vonage/client-core:^2.3

根据您安装的 nexmo/client-core 版本,您可能需要做额外的升级工作。新包设计成继续与 \Nexmo 命名空间一起工作,因此您现有的所有代码都应该继续工作。您可以在方便的时候安排重构。

我们继续支持 PSR-18 和 HTTPlug 兼容的 HTTP 客户端,如果您使用的是自定义客户端,这些客户端应该仍然可以正常工作。

  • nexmo/client-core >= v2.3.3 - 恭喜,您已经在使用新代码了!我们只需要更改请求的包。开始为新代码使用 \Vonage 命名空间,并在您方便的时候重构现有代码。
  • nexmo/client-core <= v2.2.3 but >= 2.0.0 - 您正在当前的主版本上,所以新包与您的当前代码兼容。您应该能够在不更改代码的情况下安全地升级到最新的 Vonage 包。除非您有特定的原因而停留在 2.x 的旧版本,否则您的代码应该不会发生变化。如果您有特定的原因而暂缓升级,您将有直到 2021 年 10 月 1 日的时间来对代码进行必要的更改,并且您可能需要安排额外的时间来测试升级。

安装

要使用客户端库,您需要创建一个 Vonage 账户

要将 PHP 客户端库安装到您的项目中,我们建议使用Composer

composer require vonage/client

您不需要克隆此存储库即可在您的项目中使用此库。使用 Composer 从 Packagist 安装它。

如果您是 Composer 新手,这里有一些可能有用的资源

使用

如果您使用的是 Composer,请确保自动加载器包含在您的项目引导文件中

require_once "vendor/autoload.php";

使用您的 API 密钥和密钥创建客户端

$client = new Vonage\Client(new Vonage\Client\Credentials\Basic(API_KEY, API_SECRET));     

为了测试目的,您可能想将vonage/client发起请求的URL从api.nexmo.com更改为其他地址。您可以通过在创建Vonage\Client实例时提供包含base_api_url的数组作为第二个参数来实现这一点。

$client = new Vonage\Client(
    new Vonage\Client\Credentials\Basic(API_KEY, API_SECRET),
    [
        'base_api_url' => 'https://example.com'
    ]
);

对于通常连接到rest.nexmo.com的API,将base_rest_url作为构造函数的选项将更改这些请求。

示例

发送消息

要使用Vonage的短信API发送短信消息,请调用$client->sms()->send()方法。

消息对象用于创建短信消息。每种消息类型都可以使用必需的参数构建,并提供流畅的接口以访问可选参数。

$text = new \Vonage\SMS\Message\SMS(VONAGE_TO, VONAGE_FROM, 'Test message using PHP client library');
$text->setClientRef('test-message');

将消息对象传递给send方法

$response = $client->sms()->send($text);

发送后,可以使用消息对象访问响应数据。

$data = $response->current();
echo "Sent message to " . $data->getTo() . ". Balance is now " . $data->getRemainingBalance() . PHP_EOL;

由于每条短信消息都可以拆分为多个消息,响应包含每个生成的消息的对象。您可以使用PHP中的标准count()函数检查生成了多少条消息。如果您想获取第一条消息,可以使用响应上的current()方法。

$data = $response->current();
$data->getRemainingBalance();
foreach($response as $index => $data){
    $data->getRemainingBalance();
}

发送示例还包括完整的示例。

接收消息

入站消息作为webhook发送到您的应用程序,客户端库提供了一种从webhook创建入站消息对象的方法。

try {
    $inbound = \Vonage\SMS\Webhook\Factory::createFromGlobals();
    error_log($inbound->getText());
} catch (\InvalidArgumentException $e) {
    error_log('invalid message');
}

签名消息

您还可以阅读有关消息签名的文档。

短信API支持使用“签名密钥”生成和添加签名来签名的功能,而不是使用API密钥。支持的算法有

  • md5hash1
  • md5
  • sha1
  • sha256
  • sha512

您的应用程序和Vonage需要就使用的算法达成一致。在仪表板中,访问您的账户设置页面,在“API设置”下,您可以选择要使用的算法。这也是您找到“签名密钥”的位置(它与API密钥不同)。

使用这些凭据和要使用的算法创建客户端,例如

$client = new Vonage\Client(new Vonage\Client\Credentials\SignatureSecret(API_KEY, SIGNATURE_SECRET, 'sha256'));

使用此客户端,您的短信API消息将以签名消息的形式发送。

验证入站消息签名

您还可以阅读有关消息签名的文档。

如果您为入站消息启用了消息签名,短信webhook将包含signoncetimestamp字段。要验证签名来自Vonage,您需要使用传入数据、签名密钥和签名方法创建签名对象。然后使用实际接收到的签名(通常是_GET['sig'])通过check()方法来确保它是正确的。

$signature = new \Vonage\Client\Signature($_GET, SIGNATURE_SECRET, 'sha256');

// is it valid? Will be true or false
$isValid = $signature->check($_GET['sig']);

使用您的签名密钥和其他提供的参数,可以计算并检查传入的签名值。

开始验证

Vonage的Verify API可以轻松证明用户在注册时提供了自己的电话号码,或者在登录期间实现二次因素认证。

您可以使用类似以下的代码启动验证过程

$request = new \Vonage\Verify\Request('14845551212', 'My App');
$response = $client->verify()->start($request);
echo "Started verification with an id of: " . $response->getRequestId();

一旦用户输入他们收到的PIN码,请使用请求ID和PIN调用/check端点以确认PIN是否正确。

控制验证

要取消正在进行的验证或触发下一次发送确认码的尝试,您可以将现有的验证对象传递给客户端库,或者只需使用请求ID。

$client->verify()->trigger('00e6c3377e5348cdaf567e1417c707a5');
$client->verify()->cancel('00e6c3377e5348cdaf567e1417c707a5');

检查验证

同样,检查验证需要用户提供的代码和请求ID。

try {
    $client->verify()->check('00e6c3377e5348cdaf567e1417c707a5', '1234');
    echo "Verification was successful (status: " . $verification->getStatus() . ")\n";
} catch (Exception $e) {
    echo "Verification failed with status " . $e->getCode()
        . " and error text \"" . $e->getMessage() . "\"\n";
}

搜索验证

您可以使用请求ID检查验证的状态或访问过去验证的结果。验证对象将提供丰富的接口。

$client->verify()->search('00e6c3377e5348cdaf567e1417c707a5');

echo "Codes checked for verification: " . $verification->getRequestId() . PHP_EOL;
foreach($verification->getChecks() as $check){
    echo $check->getDate()->format('d-m-y') . ' ' . $check->getStatus() . PHP_EOL;
}

支付验证

Vonage的Verify API支持SCA(安全客户认证),这是PSD2(支付服务指令)要求的,并且被需要从客户那里获取支付确认的应用程序所使用。消息中包括收款人和金额。

按照这种方式开始支付验证

$request = new \Vonage\Verify\RequestPSD2('14845551212', 'My App');
$response = $client->verify()->requestPSD2($request);
echo "Started verification with an id of: " . $response['request_id'];

一旦用户输入他们收到的PIN码,请使用请求ID和PIN调用/check端点以确认PIN是否正确。

拨打电话

所有$client->voice()方法都需要客户端使用Vonage\Client\Credentials\Keypair或包含Keypair凭证的Vonage\Client\Credentials\Container构建。

$basic  = new \Vonage\Client\Credentials\Basic('key', 'secret');
$keypair = new \Vonage\Client\Credentials\Keypair(
    file_get_contents(VONAGE_APPLICATION_PRIVATE_KEY_PATH),
    VONAGE_APPLICATION_ID
);

$client = new \Vonage\Client(new \Vonage\Client\Credentials\Container($basic, $keypair));

您可以使用OutboundCall对象启动通话。

$outboundCall = new \Vonage\Voice\OutboundCall(
    new \Vonage\Voice\Endpoint\Phone('14843331234'),
    new \Vonage\Voice\Endpoint\Phone('14843335555')
);
$outboundCall
    ->setAnswerWebhook(
        new \Vonage\Voice\Webhook('https://example.com/answer')
    )
    ->setEventWebhook(
        new \Vonage\Voice\Webhook('https://example.com/event')
    )
;

$response = $client->voice()->createOutboundCall($outboundCall);

使用NCCO动作构建通话

NCCO动作的完整参数列表可以在语音API文档中找到。

以下每个示例都使用以下结构向通话添加操作

$outboundCall = new \Vonage\Voice\OutboundCall(
    new \Vonage\Voice\Endpoint\Phone('14843331234'),
    new \Vonage\Voice\Endpoint\Phone('14843335555')
);
$ncco = new NCCO();

//ADD ACTIONS TO THE NCCO OBJECT HERE

$outboundCall->setNCCO($ncco);

$response = $client->voice()->createOutboundCall($outboundCall);

记录通话

$outboundCall = new \Vonage\Voice\OutboundCall(
    new \Vonage\Voice\Endpoint\Phone('14843331234'),
    new \Vonage\Voice\Endpoint\Phone('14843335555')
);

$ncco = new NCCO();
$ncco->addAction(\Vonage\Voice\NCCO\Action\Record::factory([
    'eventUrl' => 'https://webhook.url'
]);
$outboundCall->setNCCO($ncco);

$response = $client->voice()->createOutboundCall($outboundCall);

您的webhook URL将收到如下负载

{
  "start_time": "2020-10-29T14:30:24Z",
  "recording_url": "https://api.nexmo.com/v1/files/<recording-id>",
  "size": 27918,
  "recording_uuid": "<recording-id>",
  "end_time": "2020-10-29T14:30:31Z",
  "conversation_uuid": "<conversation-id>",
  "timestamp": "2020-10-29T14:30:31.619Z"
}

然后您可以这样获取和存储录音

$recordingId = '<recording-id>';
$recordingUrl = 'https://api.nexmo.com/v1/files/' . $recordingId;
$data = $client->get($recordingUrl);
file_put_contents($recordingId.'.mp3', $data->getBody());

向语音通话发送文本

$outboundCall = new \Vonage\Voice\OutboundCall(
    new \Vonage\Voice\Endpoint\Phone('14843331234'),
    new \Vonage\Voice\Endpoint\Phone('14843335555')
);

$ncco = new NCCO();
$ncco->addAction(new \Vonage\Voice\NCCO\Action\Talk('This is a text to speech call from Vonage'));
$outboundCall->setNCCO($ncco);

$response = $client->voice()->createOutboundCall($outboundCall);

在通话上流式传输音频文件

$outboundCall = new \Vonage\Voice\OutboundCall(
    new \Vonage\Voice\Endpoint\Phone('14843331234'),
    new \Vonage\Voice\Endpoint\Phone('14843335555')
);

$ncco = new NCCO();
$ncco->addAction(new \Vonage\Voice\NCCO\Action\Stream('https://my-mp3.url'));
$outboundCall->setNCCO($ncco);

$response = $client->voice()->createOutboundCall($outboundCall);

从通话中收集用户输入

支持键盘输入和语音输入。注意,输入动作必须跟在一个将bargeIn设置为true的动作之后。

$outboundCall = new \Vonage\Voice\OutboundCall(
    new \Vonage\Voice\Endpoint\Phone('14843331234'),
    new \Vonage\Voice\Endpoint\Phone('14843335555')
);

$ncco = new NCCO();

$ncco->addAction(\Vonage\Voice\NCCO\Action\Talk::factory('Please record your name.',[
  'bargeIn' => true,
]));

$ncco->addAction(\Vonage\Voice\NCCO\Action\Input::factory([
  'eventUrl' => 'https://webhook.url',
  'type' => [
    'speech',
  ],
  'speech' => [
    'endOnSilence' => true,
  ],
]));

$outboundCall->setNCCO($ncco);

$response = $client->voice()->createOutboundCall($outboundCall);

webhook URL将接收到包含用户输入以及语音输入的相对置信度评分的负载。

向webhook URL发送通知

$outboundCall = new \Vonage\Voice\OutboundCall(
    new \Vonage\Voice\Endpoint\Phone('14843331234'),
    new \Vonage\Voice\Endpoint\Phone('14843335555')
);

$ncco = new NCCO();    
$ncco->addAction(new \Vonage\Voice\NCCO\Action\Talk('We are just testing the notify function, you do not need to do anything.'));
$ncco->addAction(new \Vonage\Voice\NCCO\Action\Notify([
  'foo' => 'bar',
], new Vonage\Voice\Webhook('https://webhook.url')));
$outboundCall->setNCCO($ncco);

$response = $client->voice()->createOutboundCall($outboundCall);

webhook URL将接收到请求中指定的负载。

获取通话

您可以使用Vonage\Call\Call对象或通话的UUID作为字符串获取通话。

$call = $client->voice()->get('3fd4d839-493e-4485-b2a5-ace527aacff3');

echo $call->getDirection();

您还可以使用过滤器搜索通话。

$filter = new \Vonage\Voice\Filter\VoiceFilter();
$filter->setStatus('completed');
foreach($client->search($filter) as $call){
    echo $call->getDirection();
}

创建应用程序

应用程序是配置容器。您可以使用简单的数组结构创建一个。

$application = new \Vonage\Application\Application();
$application->fromArray([
 'name' => 'test application',
 'keys' => [
     'public_key' => '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCA\nKOxjsU4pf/sMFi9N0jqcSLcjxu33G\nd/vynKnlw9SENi+UZR44GdjGdmfm1\ntL1eA7IBh2HNnkYXnAwYzKJoa4eO3\n0kYWekeIZawIwe/g9faFgkev+1xsO\nOUNhPx2LhuLmgwWSRS4L5W851Xe3f\nUQIDAQAB\n-----END PUBLIC KEY-----\n'
 ],
 'capabilities' => [
     'voice' => [
         'webhooks' => [
             'answer_url' => [
                 'address' => 'https://example.com/answer',
                 'http_method' => 'GET',
             ],
             'event_url' => [
                 'address' => 'https://example.com/event',
                 'http_method' => 'POST',
             ],
         ]
     ],
     'messages' => [
         'webhooks' => [
             'inbound_url' => [
                 'address' => 'https://example.com/inbound',
                 'http_method' => 'POST'

             ],
             'status_url' => [
                 'address' => 'https://example.com/status',
                 'http_method' => 'POST'
             ]
         ]
     ],
     'rtc' => [
         'webhooks' => [
             'event_url' => [
                 'address' => 'https://example.com/event',
                 'http_method' => 'POST',
             ],
         ]
     ],
     'vbc' => []
 ]
]);

$client->applications()->create($application);

您还可以向客户端传递一个应用程序对象

$a = new Vonage\Application\Application;

$a->setName('PHP Client Example');
$a->getVoiceConfig()->setWebhook('answer_url', 'https://example.com/answer', 'GET');
$a->getVoiceConfig()->setWebhook('event_url', 'https://example.com/event', 'POST');
$a->getMessagesConfig()->setWebhook('status_url', 'https://example.com/status', 'POST');
$a->getMessagesConfig()->setWebhook('inbound_url', 'https://example.com/inbound', 'POST');
$a->getRtcConfig()->setWebhook('event_url', 'https://example.com/event', 'POST');
$a->disableVbc();

$client->applications()->create($a);

获取应用程序

您可以遍历您所有的应用程序

foreach($client->applications()->getAll() as $application){
    echo $application->getName() . PHP_EOL;
}

或者您可以使用字符串UUID或应用程序对象来获取一个应用程序。

$application = $client->applications()->get('1a20a124-1775-412b-b623-e6985f4aace0');

更新应用程序

一旦您有了应用程序对象,您就可以修改并保存它。

$application = $client->applications()->get('1a20a124-1775-412b-b623-e6985f4aace0');

$application->setName('Updated Application');
$client->applications()->update($application);

列出您的号码

您可以列出您账户下的所有号码,并可选择添加过滤。

search_pattern:

  • 0 - 号码以 pattern 开头
  • 1 - 号码包含 pattern
  • 2 - 号码以 pattern 结尾
$filter = new \Vonage\Numbers\Filter\OwnedNumbers();
$filter
    ->setPattern(234)
    ->setSearchPattern(\Vonage\Numbers\Filter\OwnedNumbers::SEARCH_PATTERN_CONTAINS)
;
$response = $client->numbers()->searchOwned($filter);

has_application:

  • true - 该号码已连接到应用程序
  • false - 该号码未连接到应用程序
$filter = new \Vonage\Numbers\Filter\OwnedNumbers();
$filter->setHasApplication(true);
$response = $client->numbers()->searchOwned($filter);

application_id:

  • 提供应用程序ID以获取与请求应用程序关联的所有号码
$filter = new \Vonage\Numbers\Filter\OwnedNumbers();
$filter->setApplicationId("66c04cea-68b2-45e4-9061-3fd847d627b8");
$response = $client->numbers()->searchOwned($filter);

搜索可用的号码

您可以在特定国家搜索可购买的号码

$numbers = $client->numbers()->searchAvailable('US');

默认情况下,这将仅返回前10个结果。您可以通过添加额外的 \Vonage\Numbers\Filter\AvailableNumbers 过滤器来缩小搜索范围。

购买号码

要购买号码,您可以传递号码搜索返回的值

$numbers = $client->numbers()->searchAvailable('US');
$number = $numbers->current();
$client->numbers()->purchase($number->getMsisdn(), $number->getCountry());

或者您可以手动指定号码和国家

$client->numbers()->purchase('14155550100', 'US');

更新号码

要更新号码,使用 numbers()->update 并传入您想要更改的配置选项。要清除设置,传入空值。

$number = $client->numbers()->get(VONAGE_NUMBER);
$number
    ->setAppId('1a20a124-1775-412b-b623-e6985f4aace0')
    ->setVoiceDestination('447700900002', 'tel')
    ->setWebhook(
        \Vonage\Number\Number::WEBHOOK_VOICE_STATUS,
        'https://example.com/webhooks/status'
    )
    ->setWebhook(
        \Vonage\Number\Number::WEBHOOK_MESSAGE,
        'https://example.com/webhooks/inbound-sms'
    )
;
$client->numbers()->update($number);
echo "Number updated" . PHP_EOL;

取消号码

要取消号码,提供 msisdn

$client->numbers()->cancel('447700900002');

管理密钥

提供了API,允许您旋转API密钥。您可以在所有应用程序都已更新后创建新的密钥(最多两个密钥),并删除现有的密钥。

要获取密钥列表

$secretsCollection = $client->account()->listSecrets(API_KEY);
/** @var \Vonage\Account\Secret $secret */
foreach($secretsCollection->getSecrets() as $secret) {
    echo "ID: " . $secret->getId() . " (created " . $secret->getCreatedAt() .")\n";
}

您可以创建新的密钥(创建日期将帮助您识别它们)

$client->account()->createSecret(API_KEY, 'awes0meNewSekret!!;');

并删除旧密钥(任何仍在使用这些凭据的应用程序将停止工作)

try {
    $response = $client->account()->deleteSecret(API_KEY, 'd0f40c7e-91f2-4fe0-8bc6-8942587b622c');
} catch(\Vonage\Client\Exception\Request $e) {
    echo $e->getMessage();
}

定价

前缀定价

如果您知道要拨打的国家的电话号码前缀,您可以使用 prefix-pricing 端点来查找拨打该号码的成本。每个前缀可以返回多个国家(例如,1 返回 USCAUM

$results = $client->account()->getPrefixPricing('1');
foreach ($results as $price) {
    echo $price->getCountryCode().PHP_EOL;
    echo $price->getCountryName().PHP_EOL;
    foreach ($price->getNetworks() as $network) {
        echo $network->getName() .' :: '.$network->getCode().' :: '.$network->getPrefixPrice().PHP_EOL;
    }
    echo "----------------".PHP_EOL;
}

检查您的余额

检查您账户中剩余的信用额度

$response = $client->account()->getBalance();
echo round($response->getBalance(), 2) . " EUR\n";

查看和更改账户配置

检查账户上的当前设置

$response = $client->account()->getConfig();
print_r($response->toArray());

更新接收短信消息和投递收据的默认回调URL

$response = $client->account()->updateConfig([
    "sms_callback_url" => "http://example.com/webhooks/incoming-sms",
    "dr_callback_url" => "http://example.com/webhooks/delivery-receipt"
]);
print_r($response->toArray());

获取有关号码的信息

号码洞察API 允许用户检查号码是否有效,并了解更多有关如何使用该号码的信息。

基本和标准用法

您可以使用 basic()standard() 方法(还有一个 advanced() 方法可供使用,但建议使用异步选项以获取高级信息),如下所示

try {
  $insights = $client->insights()->basic(PHONE_NUMBER);

  echo $insights->getNationalFormatNumber();
} catch (Exception $e) {
  // for the Vonage-specific exceptions, try the `getEntity()` method for more diagnostic information
}

如上例所示,数据以 $insights 变量返回。

高级用法

要获取高级见解,请使用异步功能并提供要发送 webhook 的 URL

try {
  $client->insights()->advancedAsync(PHONE_NUMBER, 'http://example.com/webhooks/number-insights');
} catch (Exception $e) {
  // for the Vonage-specific exceptions, try the `getEntity()` method for more diagnostic information
}

请查看文档,了解接收到的 webhook 中包含的数据预期内容。

支持的 API

API API 发布状态 支持?
账户 API 通用可用性
警报 API 通用可用性
应用 API 通用可用性
审计 API 测试版
对话 API 测试版
调度 API 测试版
外部账户 API 测试版
媒体 API 测试版
消息 API 测试版
号码洞察 API 通用可用性
号码管理 API 通用可用性
定价 API 通用可用性
编辑 API 通用可用性
报告 API 测试版
短信 API 通用可用性
验证 API 通用可用性
语音 API 通用可用性

故障排除

检查已弃用的功能

随着时间的推移,Vonage API 不断进化,增加新功能,改变现有功能的工作方式,并弃用和删除旧方法及功能。为了帮助开发者了解何时进行弃用更改,SDK 将触发一个 E_USER_DEPRECATION 警告。这些警告不会停止代码执行,但在生产环境中可能会引起麻烦。

为此,默认情况下会抑制这些通知。在开发中,您可以通过将额外的配置选项传递给 \Vonage\Client 构造函数来启用这些警告,该选项名为 show_deprecations。启用此选项将显示所有弃用通知。

$client = new Vonage\Client(
    new Vonage\Client\Credentials\Basic(API_KEY, API_SECRET),
    [
        'show_deprecations' => true
    ]
);

如果在生产环境中注意到过多的弃用通知,请确保配置选项不存在,或者至少设置为 false

无法获取本地发行者证书

一些用户由于以下错误而遇到请求问题

Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException' with message 'cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)'

这是由于某些 PHP 安装没有包含受信任的 CA 证书列表。这是一个系统配置问题,既不是 cURL 的,也不是 Vonage 的。

重要:在下一段中,我们提供了一个指向 CA 证书包的链接。Vonage 不保证此包的安全性,您在将任何 CA 包安装到您的机器之前应自行检查。

要解决这个问题,请下载受信任的 CA 证书列表(例如,curl 包)并将其复制到您的机器上。完成此操作后,编辑 php.ini 并设置 curl.cainfo 参数

# Linux/MacOS
curl.cainfo = "/etc/pki/tls/cacert.pem"
# Windows
curl.cainfo = "C:\php\extras\ssl\cacert.pem"

传递自定义 HTTP 客户端

我们允许使用任何 HTTPlug 适配器或 PSR-18 兼容的 HTTP 客户端,因此如果您需要,可以创建具有替代配置的客户端,例如,考虑到本地代理或处理特定于您的设置的问题。

以下是一个将默认超时时间减少到 5 秒的示例,以避免在没有路由到我们的服务器时出现长时间延迟

$adapter_client = new Http\Adapter\Guzzle6\Client(new GuzzleHttp\Client(['timeout' => 5]));
$vonage_client = new Vonage\Client(new Vonage\Client\Credentials\Basic($api_key, $api_secret), [], $adapter_client);

访问响应数据

当出现问题时,您将收到一个Exception异常。Vonage的异常类Vonage\Client\Exception\RequestVonage\Client\Exception\Server支持一个额外的getEntity()方法,您可以在getCode()getMessage()的基础上使用此方法来了解更多关于出错情况的信息。返回的实体通常是与操作相关的对象,或者API调用的响应对象。

由于Guzzle适配器,Composer安装失败

如果您有一个与我们推荐的guzzlehttp/guzzle包无法共存的冲突包安装,那么您可以在满足php-http/client-implementation要求的任何包中安装包vonage/client-core

请参阅client-implementation的Packagist页面以获取选项。

启用请求/响应日志记录

我们的客户端库支持通过PSR-3兼容的日志机制记录请求和响应以进行调试。如果将debug选项传递给客户端并且在我们的客户端的服务工厂中设置了PSR-3兼容的日志记录器,我们将使用该日志记录器进行调试目的。

$client = new \Vonage\Client(new \Vonage\Client\Credentials\Basic('abcd1234', 's3cr3tk3y'), ['debug' => true]);
$logger = new \Monolog\Logger('test');
$logger->pushHandler(new \Monolog\Handler\StreamHandler(__DIR__ . '/log.txt', \Monolog\Logger::DEBUG));
$client->getFactory()->set(\PSR\Log\LoggerInterface::class, $logger);

启用调试日志可能会记录敏感信息,请勿在生产环境中启用

贡献

这个库正在积极开发中,我们很高兴听到您的反馈!请随时创建一个问题提交一个拉取请求,并提出您的问题、评论、建议和反馈。