zendesk / zendesk_api_client_php
Zendesk REST API的PHP客户端。请参阅https://developer.zendesk.com/rest_api/docs/core/introduction。
Requires
- php: >=7.4.0
- guzzlehttp/guzzle: ^6.0 || ^7.0
- guzzlehttp/psr7: ^1.7 || ^2.0
- mmucklo/inflect: 0.3.*
Requires (Dev)
- fzaninotto/faker: >=1.5.0
- phpmd/phpmd: @stable
- phpunit/phpunit: 4.5.*
- psy/psysh: @stable
- squizlabs/php_codesniffer: 2.*
- dev-master
- v3.0.1
- v3.0.0
- v2.2.17
- v2.2.16
- v2.2.15
- v2.2.14
- v2.2.13
- v2.2.12
- v2.2.11
- v2.2.10
- v2.2.9
- v2.2.8
- v2.2.7
- v2.2.6
- v2.2.5
- v2.2.4
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.11
- v2.1.10
- v2.1.9
- v2.1.8
- v2.1.7
- v2.1.6
- v2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- 2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- 2.0.0-beta
- v1.x-dev
- v1.2.1
- v1.2.0
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.0
- dev-jin.huang/test-synk-can-trigger
- dev-bump-v3.0.1
- dev-RED-1955-iterator-one-page
- dev-RED-2000-iterator-errors
- dev-RED-1953-cbp
- dev-RED-1925-cbp-spike
- dev-asee/fix-delete-webhook-2
- dev-asee/fix-delete-webhook
- dev-jramos/version-bump
- dev-willshen8/update-translation-resource
- dev-willshen8/update-constructor-to-allow-new-hostname
- dev-asee/add-webhook-support
- dev-asee/add_webhook_support
This package is auto-updated.
Last update: 2024-09-07 03:39:07 UTC
README
API客户端版本
这是我们的PHP API客户端的第二个版本。旧版本的API客户端可以在v1分支上找到。
API版本支持
此客户端仅支持Zendesk的API v2。有关更多信息,请参阅我们的API文档。
需求
- PHP 7.4+
安装
可以使用Composer安装Zendesk PHP API客户端。
Composer
要安装,请运行composer require zendesk/zendesk_api_client_php
从V1升级到V2
如果您正在将客户端从v1升级,我们编写了升级指南,突出显示了一些关键差异。
配置
配置是通过Zendesk\API\HttpClient
的一个实例来完成的。该块是必需的,如果不传递,将抛出错误。
// load Composer require 'vendor/autoload.php'; use Zendesk\API\HttpClient as ZendeskAPI; $subdomain = "subdomain"; $username = "[email protected]"; // replace this with your registered email $token = "6wiIBWbGkBMo1mRDMuVwkw1EPsNkeUj95PIz2akv"; // replace this with your token $client = new ZendeskAPI($subdomain); $client->setAuth('basic', ['username' => $username, 'token' => $token]);
用法
基本操作
// Get all tickets $tickets = $client->tickets()->findAll(); print_r($tickets); // Get all tickets regarding a specific user. $tickets = $client->users($requesterId)->tickets()->requested(); print_r($tickets); // Create a new ticket $newTicket = $client->tickets()->create([ 'subject' => 'The quick brown fox jumps over the lazy dog', 'comment' => [ 'body' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, ' . 'sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' ], 'priority' => 'normal' ]); print_r($newTicket); // Update a ticket $client->tickets()->update(123,[ 'priority' => 'high' ]); // Delete a ticket $client->tickets()->delete(123); // Get all users $users = $client->users()->findAll(); print_r($users);
附件
$attachment = $client->attachments()->upload([ 'file' => getcwd().'/tests/assets/UK.png', 'type' => 'image/png', 'name' => 'UK.png' // Optional parameter, will default to filename.ext ]);
将文件附加到评论中
$ticket = $client->tickets()->create([ 'subject' => 'The quick brown fox jumps over the lazy dog', 'comment' => [ 'body' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, ' . 'sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', 'uploads' => [$attachment->upload->token] ] ]);
侧加载
侧加载允许您在单个请求中检索相关记录。有关更多信息,请参阅[文档](https://developer.zendesk.com/rest_api/docs/core/side_loading)。(https://developer.zendesk.com/rest_api/docs/core/side_loading)。
以下是一个使用客户端进行侧加载的示例。
$tickets = $client->tickets()->sideload(['users', 'groups'])->findAll();
分页
如findAll()
之类的函数在调用API时没有任何分页参数。如果端点支持分页,则仅返回第一页。要获取所有资源,您需要多次调用API。
迭代器(推荐)
使用正确的分页类型被迭代器封装,允许您在所有页面上检索所有资源,进行多次API调用,而无需担心分页。
$iterator = $client->tickets()->iterator(); foreach ($iterator as $ticket) { echo($ticket->id . " "); }
如果您需要特定的排序顺序,请参阅文档中的排序部分(例如票证)。
带有参数的迭代器示例
$params = ['my' => 'param1', 'extra' => 'param2']; $iterator = $client->tickets()->iterator($params); foreach ($iterator as $ticket) { echo($ticket->id . " "); }
- 使用
$params = ['page[size]' => 5];
更改页面大小 - 使用
$params = ['sort' => '-updated_at'];
更改排序- 有关详细信息,包括允许的排序字段,请参阅文档
- 组合一切:
$params = ['page[size]' => 2, 'sort' => 'updated_at', 'extra' => 'param'];
注意:
- 有关使用您使用的分页类型进行排序的正确参数,请参阅文档
- 辅助方法
iterator_to_array
不适用于此实现
迭代器API调用响应
最新响应在迭代器的$iterator->latestResponse()
中公开。这可能会很有用,用于调试。
自定义迭代器
如果您想使用迭代器来使用自定义方法,而不是默认的findAll()
,可以为您的集合创建一个迭代器
$strategy = new CbpStrategy( // Or ObpStrategy or SinglePageStrategy "resources_key", // The root key with resources in the response, usually plural and in underscore [], // Extra params for your call ); $iterator = PaginationIterator($client->tickets(), $strategy); foreach ($ticketsIterator as $ticket) { // Use as normal }
这可以用于过滤端点,例如活动自动化。然而,在您只需要将方法从findAll()
改为findActive()
的常见情况下,有一个更好的快捷方式。
$iterator = $client->automations()->iterator($params, 'findActive');
这类似于
use Zendesk\API\Traits\Utility\Pagination\PaginationIterator; use Zendesk\API\Traits\Utility\Pagination\CbpStrategy; $strategy = new CbpStrategy('automations', $params); $iterator = new PaginationIterator( $client->automations(), $strategy, 'findActive' );
如果您需要更复杂的实现,请查看分页特性的使用。
捕获API错误
这不会改变太多
try { foreach ($iterator as $ticket) { // your code } } catch (ApiResponseException $e) { $errorMessage = $e->getMessage(); $errorDetails = $e=>getErrorDetails(); }
如果您需要知道错误发生在哪个点,您可以在代码中的循环中存储所需的信息。
使用CBP的FindAll(良好)
如果您仍然想使用findAll()
,直到CBP成为默认API响应,您必须通过使用page[size]
参数显式请求CBP响应。
// CBP: /path?page[size]=100 $response = $client->tickets()->findAll(['page[size]' => 100]); process($response->tickets); // Your implementation do { if ($response->meta->has_more) { // CBP: /path?page[after]=cursor $response = $client->tickets()->findAll(['page[after]' => $response->meta->after_cursor]); process($response->tickets); } } while ($response->meta->has_more);
在获取数据后立即处理数据。这优化了内存使用,实现了实时处理,并有助于遵守API速率限制,提高了效率和用户体验。
使用OBP查找所有内容(仅在端点不支持CBP时推荐)
如果CBP不可用,您可以这样一次获取一页
$pageSize = 100; $pageNumber = 1; do { // OBP: /path?per_page=100&page=2 $response = $client->tickets()->findAll(['per_page' => $pageSize, 'page' => $pageNumber]); process($response->tickets); // Your implementation $pageNumber++; } while (count($response->tickets) == $pageSize);
在获取数据后立即处理数据。这优化了内存使用,实现了实时处理,并有助于遵守API速率限制,提高了效率和用户体验。
重试请求
在您的GuzzleHttp\Client
实例的HandlerStack
上添加RetryHandler
中间件。默认情况下,Zendesk\Api\HttpClient
重试
- 超时请求
- 那些抛出
Psr\Http\Message\RequestInterface\ConnectException:class
的请求 - 以及那些抛出被识别为ssl问题的
Psr\Http\Message\RequestInterface\RequestException:class
的请求。
可用选项
选项作为值的数组传递到RetryHandler
。
- max = 2 重试限制
- interval = 300 重试之间的基本延迟(毫秒)
- max_interval = 20000 最大延迟值
- backoff_factor = 1 退避因子
- exceptions = [ConnectException::class] 无需检查retry_if的重试异常
- retry_if = null 可以决定是否重试请求的可调用函数
贡献
我们总是欢迎拉取请求,但在您发送之前,请阅读我们的贡献指南。这会加快流程,并确保每个人都遵循社区的标准。
调试
REPL
为了帮助贡献者,我们添加了一个REPL工具。这是一个对psysh和symfony控制台的简单封装。在您的终端中,运行bin/console <subdomain> <email> <api token>
。这将在变量$client上自动创建一个Zendesk\API\HttpClient
实例。之后,您就可以输入任何有效的PHP语句了。这个工具的目标是加快开发者对代码库进行实验的过程。
打印HTTP客户端API调用
您可以使用以下方式打印有关每个API调用的详细信息
$client = new ZendeskAPI($subdomain); $client->log_api_calls = true;
HTTP客户端调试
您可以通过此对象检查请求和响应的信息
$client->getDebug();
版权和许可
版权 2013-至今 Zendesk
根据Apache License 2.0(“许可证”)许可;除非遵守许可证,否则不得使用此文件。您可以在以下位置获得许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。有关许可证的具体语言管理权限和限制,请参阅许可证。