dcodegroup/laravel-xero-oauth

这是一个简单的包,用于处理所有项目与Xero的连接。提供UI端点和Xero的回调

1.0.22 2024-07-15 02:52 UTC

README

Latest Version GitHub Workflow Status Total Downloads

Laravel Xero

此包提供了大多数项目中使用的标准Xero连接功能。

安装

您可以通过Composer安装此包

composer require dcodegroup/laravel-xero-oauth

然后运行安装命令。

php artsian laravel-xero:install

这将发布配置文件和迁移文件。

运行迁移

php artsian migrate

配置

大多数配置都已设置为合理的默认值。然而,您可以审查位于 config/laravel-xero-oauth.php 的配置文件并根据需要进行调整

如果您希望OAuth屏幕显示在您的站点布局中,请确保配置环境变量。例如。

LARAVEL_XERO_OAUTH_APP_LAYOUT=layouts.admin

用法

此包提供了一些端点,您可以使用。通过运行查看完整列表

php artsian route:list --name=xero
+--------+----------+-------------------------+--------------------+-------------------------------------------------------------------------+----------------------------------+
| Domain | Method   | URI                     | Name               | Action                                                                  | Middleware                       |
+--------+----------+-------------------------+--------------------+-------------------------------------------------------------------------+----------------------------------+
|        | GET|HEAD | xero                    | xero.index         | Dcodegroup\LaravelXeroOauth\Http\Controllers\XeroController             | web                              |
|        |          |                         |                    |                                                                         | App\Http\Middleware\Authenticate |
|        | GET|HEAD | xero/auth               | xero.auth          | Dcodegroup\LaravelXeroOauth\Http\Controllers\XeroAuthController         | web                              |
|        |          |                         |                    |                                                                         | App\Http\Middleware\Authenticate |
|        | GET|HEAD | xero/callback           | xero.callback      | Dcodegroup\LaravelXeroOauth\Http\Controllers\XeroCallbackController     | web                              |
|        |          |                         |                    |                                                                         | App\Http\Middleware\Authenticate |
|        | POST     | xero/tenants/{tenantId} | xero.tenant.update | Dcodegroup\LaravelXeroOauth\Http\Controllers\SwitchXeroTenantController | web                              |
|        |          |                         |                    |                                                                         | App\Http\Middleware\Authenticate |
+--------+----------+-------------------------+--------------------+-------------------------------------------------------------------------+----------------------------------+

更多信息

example.com/xero 这是您将生成授权Xero的链接的地方。这是默认受保护的认证中间件,但您可以在配置中修改。这是您想要在管理中链接并可能在新窗口中链接的地方

example.com/xero/callback 这是Xero在OAuth发生后的重定向路由。这被排除在中间件之外。您也可以在配置中更改此列表。

BaseXeroService

此包在 Dcodegroup\LaravelXeroOauth\BaseXeroService 位置有一个 BaseXeroService 类。

因此,您的应用程序应该有一个自己的XeroService类,它扩展了此基类,因为初始化已经完成。

<?php

namespace App\Services\Xero;

use Dcodegroup\LaravelXeroOauth\BaseXeroService;
use XeroPHP\Models\Accounting\Contact;

class XeroService extends BaseXeroService
{
    /**
     * @inheritDoc
     */
    public function createContact(object $data)
    {
    
        /**
         * $this->>xeroClient is inherited from the  BaseXeroService
         */
        $contact = new Contact($this->xeroClient);

        $contact->setName($data->name . ' (' . $data->code . ')')
            ->setFirstName($data->name)
            ->setContactNumber($data->code)
            ->setAccountNumber($data->code)
            ->setContactStatus(Contact::CONTACT_STATUS_ACTIVE)
            ->setEmailAddress($data->email)
            ->setTaxNumber('ABN')
            ->setDefaultCurrency('AUD');

        $contact = head($contact->save()->getElements());

        return $this->xeroClient->loadByGUID(Contact::class, $contact['ContactID']);
    }

}

运行时

您可以使用以下代码检查连接是否存在。 (在Guzzle 8中移除 ->getConfig() 后,此代码将不起作用 guzzle/guzzle#3114

if (app(Application::class)->getTransport()->getConfig()['headers']['Xero-tenant-id'] != 'fake_tenant') {
        // do something
}