nexmo / client-core
废弃的用于使用Vonage API的PHP客户端 - 请使用vonage/client-core
Requires
- php: >=7.2
- ext-json: *
- ext-mbstring: *
- composer/package-versions-deprecated: ^1.11
- laminas/laminas-diactoros: ^2.4
- lcobucci/jwt: ^3.4|^4.0
- psr/container: ^1.0
- psr/http-client-implementation: ^1.0
- psr/log: ^1.1
- vonage/nexmo-bridge: ^0.1.0
Requires (Dev)
- guzzlehttp/guzzle: >=6
- helmich/phpunit-json-assert: ^3.3
- php-http/mock-client: ^1.4
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^8.5|^9.4
- roave/security-advisories: dev-latest
- softcreatr/jsonpath: ^0.6.4
- squizlabs/php_codesniffer: ^3.5
- dev-master
- v3.0.0.x-dev
- 2.9.2
- 2.9.1
- 2.9.0
- 2.8.1
- 2.8.0
- 2.7.1
- v2.7.0
- v2.6.0
- 2.5.0
- 2.4.1
- 2.4.0
- 2.3.3
- 2.2.3
- 2.2.2
- 2.2.1
- v2.2.0.x-dev
- 2.2.0
- v2.2.0-RC2
- v2.2.0-RC1
- 2.1.0
- 2.0.0
- 1.8.1
- 1.8.0
- 1.7.0
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.0
- 1.3.2
- 1.3.1
- 1.3.0
- 1.3.0-beta5
- 1.3.0-beta4
- 1.3.0-beta3
- 1.3.0-beta2
- 1.3.0-beta
- 1.2.1
- 1.2.0
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.0
- 1.0.0-beta4
- 1.0.0-beta3
- 1.0.0-beta2
- 1.0.0-beta1
- 1.0.0-alpha2
- 1.0.0-alpha1
- 0.4.0
- 0.3.0
- dev-nexmo/migration
- dev-feature/psd2
- dev-vonage-rebrand
- dev-bug/fix-voice-transfers
- dev-github-actions
- dev-update-release-workflow
- dev-bug/235-calls-collection-invoke
- dev-fixes
- dev-conversations
- dev-add-framework-detection
This package is auto-updated.
Last update: 2023-12-27 18:29:55 UTC
README
支持通知
该库及其相关包,nexmo/client
和 nexmo/client-core
已过渡到“仅维护”模式。在未来十二个月(12个月)内,此库将只接收错误或安全修复。该库将从2021年10月1日起正式停止支持。
我们建议用户开始迁移到 https://github.com/vonage/vonage-php-sdk-core 以及 vonage/client
和 vonage/client-core
包,用于其应用程序。Vonage包完全支持 \Nexmo
命名空间,应该可以替代Nexmo包。
如果您有任何疑问,请随时通过 [email protected] 或通过我们的社区Slack(https://developer.nexmo.com/community/slack)联系我们
此库需要至少PHP版本7.2
这是用于使用Vonage API的PHP客户端库。要使用它,您需要一个Vonage账户。在 nexmo.com 上免费注册。
迁移
此包已正式过渡到“仅维护”模式,我们强烈建议将所有代码库迁移到 vonage/client
和 vonage/client-core
。虽然我们将支持此包的任何所需错误或安全修复,但不会为该代码库开发新功能,包括新产品发布。我们将提供最长十二个月(12个月)的支持,以使用户有时间升级。
我们已尽力使升级对所有用户尽可能无缝。
步骤1 - 查找当前版本
我们需要什么
- 您是否有请求
nexmo/client
或nexmo/client-core
? - 已安装的
nexmo/client-core
的版本是什么?
我们需要做的第一件事是弄清楚您安装了什么版本。最快的方法是直接打开 composer.json
并搜索“nexmo/client”和“nexmo/client-core”,然后查看您拥有哪一个。您应该在 composer.json
中请求 nexmo/client
或 nexmo/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.json
和 composer.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.json
和 composer.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将包含sig
、nonce
和timestamp
字段。要验证签名来自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
返回 US
、CA
和 UM
)
$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\Request
和Vonage\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);
启用调试日志可能会记录敏感信息,请勿在生产环境中启用