pedalme / xero-php
一个Xero API的客户实现,拥有更简洁的OAuth界面和类似ORM的抽象。
Requires
- php: >=5.6.0
- ext-curl: *
- ext-openssl: *
Requires (Dev)
- phpunit/phpunit: ~4.7
- dev-master
- 2.0.x-dev
- v1.9.0
- v1.8.6
- v1.8.5
- v1.8.4
- v1.8.3
- v1.8.2
- v1.8.1
- v1.8.0
- v1.7.1
- v1.7.0
- v1.6.2
- v1.6.1
- v1.6.0
- v1.5.0
- v1.4.1
- v1.4.0
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.12
- v1.2.11
- v1.2.10
- v1.2.9
- v1.2.8
- v1.2.7
- v1.2.6
- v1.2.5
- v1.2.4
- v1.2.3
- v1.2.2
- v1.2.1
- v1.2.0
- v1.1.7
- v1.1.6
- v1.1.5
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-patch-remove-old-php-versions
- dev-webhook-timing-fix
- dev-attachments
- dev-mandatory-guids
- dev-remove-request-member
- dev-issue-#163
- dev-scrutinizer
This package is auto-updated.
Last update: 2024-09-26 11:24:19 UTC
README
这是一个Xero API的客户库,包括OAuth界面和类似ORM的抽象。
这个库基于XeroAPI/XeroOAuth-PHP的功能流程,但更逻辑地分为面向对象的设计。
此库已与私有、公共和合作伙伴应用程序进行了测试。
要求
- PHP 5.5+
- php_curl 扩展 - 确保是最新版本(7.30+)
- php_openssl 扩展
设置
使用composer
composer require calcinai/xero-php
否则,只需下载该软件包并将其添加到自动加载器中。命名空间符合PSR-4规范。
用法
以下所有示例均针对XeroPHP\Models\Accounting命名空间中的模型。此外,还有PayrollAU、PayrollUS、Files和Assets的模型。
创建XeroPHP实例(包含示例配置)
$xero = new \XeroPHP\Application\PrivateApplication($config);
加载对象集合并遍历它们
$contacts = $xero->load(Contact::class)->execute(); foreach ($contacts as $contact) { print_r($contact); }
加载单个页面的对象集合并遍历它们 (为什么?)
$contacts = $xero->load(Contact::class)->page(1)->execute(); foreach ($contacts as $contact) { print_r($contact); }
搜索满足特定标准的对象
$xero->load(Invoice::class) ->where('Status', Invoice::INVOICE_STATUS_AUTHORISED) ->where('Type', Invoice::INVOICE_TYPE_ACCREC) ->execute();
通过GUID加载对象
$contact = $xero->loadByGUID(Contact::class, $guid);
或者创建并填充它
$contact = new Contact($xero); $contact->setName('Test Contact') ->setFirstName('Test') ->setLastName('Contact') ->setEmailAddress('test@example.com');
保存它
$contact->save();
如果您创建了多个相同类型的对象,您可以通过将数组传递给$xero->saveAll()来批量保存它们。
从v1.2.0+开始,Xero上下文可以直接在创建对象时注入,这将暴露->save()方法。这对于对象保持与其关系的状态是必要的。
保存相关模型
如果您同时保存多个模型,默认情况下不会更新额外的模型属性。这意味着如果您正在保存带有新联系人的发票,则不会更新联系人的ContactID。如果您想更新相关模型的属性,可以将布尔标志true传递给保存方法。
$xero->save($invoice, true);
嵌套对象
$invoice = $xero->loadByGUID(Invoice::class, '[GUID]'); $invoice->setContact($contact);
附件
$attachments = $invoice->getAttachments(); foreach ($attachment as $attachment) { //Do something with them file_put_contents($attachment->getFileName(), $attachment->getContent()); } //You can also upload attachemnts $attachment = Attachment::createFromLocalFile('/path/to/image.jpg'); $invoice->addAttachment($attachment);
要设置附件的IncludeOnline标志,将true作为第二个参数传递给->addAttachment()。
PDF - 支持PDF导出的模型将继承一个->getPDF()方法,它返回PDF的原始内容。目前这仅限于发票和贷项通知。
有关更复杂的使用和嵌套/相关对象的示例,请参阅示例。还有一个使用此库的PHP示例应用程序。
Webhooks
如果您正在接收Xero的Webhooks,有一个Webhook类可以帮助处理请求和解析相关事件列表。
$webhook = new Webhook($application, $request->getContent()); /** * @return int */ $webhook->getFirstEventSequence(); /** * @return int */ $webhook->getLastEventSequence(); /** * @return \XeroPHP\Webhook\Event[] */ $webhook->getEvents();
验证Webhooks
为了确保Webhooks来自Xero,您应该验证Xero提供的传入请求头。
if (! $webhook->validate($request->headers->get('x-xero-signature'))) { throw new Exception('This request did not come from Xero'); }
见:签名文档
处理错误
您对Xero的请求可能会引起错误,您可能需要处理这些错误。您可能会遇到以下错误:
HTTP 400 错误请求,通过发送无效数据,如格式错误的电子邮件地址。HTTP 503 请求频率超过限制,在短时间内快速调用API。HTTP 400 错误请求,请求的资源不存在。
这只是几个例子,您应该阅读官方文档以了解更多可能的错误。
抛出的异常
此库将解析Xero返回的响应,并在遇到这些错误之一时抛出异常。以下是一个表格,显示响应代码和抛出的相应异常
处理异常
要捕获和处理这些异常,您可以在请求周围包裹try / catch块,并根据需要处理每个异常。
try { $xero->save($invoice); } catch (NotFoundException $exception) { // handle not found error } catch (RateLimitExceededException $exception) { // handle rate limit error }
见:与异常一起工作