popplestones/quickbooks-helper

整合Quickbooks与Laravel所需的一切

v1.2.8 2022-08-02 05:51 UTC

README

包装Quickbooks PHP SDK的辅助工具。

安装

  1. 安装包
composer require popplestones/quickbooks-helper
  1. 运行我们的迁移以安装quickbooks_tokens

``bash php artisan migrate --package=popplestones/quickbooks-helper

该包使用自动注册 Laravel。

配置

  1. 您需要在您的user模型上创建一个quickbooksToken关系,或者可选地另一个模型。有一个名为Poppletstones\Quickbooks\Traits\HasQuickbooksToken的特质,您可以将其包含在您的user模型中,这将设置关系。为此,实现以下内容

use Popplestones\Quickbooks\Traits\HasQuickbooksToken;添加到User.php的顶部,并将特质添加到类中。例如

use Popplestones\Quickbooks\Traits\HasQuickbooksToken;

class User extends Authenticateable
{
    use Notifiable, HasQuickbooksToken;

注意:如果您的User模型不是App\models\User,那么您需要发布配置并按以下说明修改它。

更改模型

  1. 发布配置
php artisan vendor:publish --tag=quickbooks.config
  1. 根据需要修改模型和字段
...
'user' => [
    'keys' => [
        'foreign' => 'user_id',
        'owner' => 'id'
    ],
    'model' => 'App\Models\User'
]
...

Quickbooks API密钥

  1. 将client_id和client_secret添加到您的.env文件中

最小密钥

QUICKBOOKS_CLIENT_ID=<client id provided by quickbooks>
QUICKBOOKS_CLIENT_SECRET=<client secret provided by quickbooks>

可选密钥

QUICKBOOKS_API_URL=<Development|Production> # defaults to App's env value
QUICKBOOKS_DEBUG=<true|false>               # defaults to App's debug value

视图

可以通过运行以下命令发布视图文件

php artisan vendor:publish --tag=quickbooks-views

用法

以下是一个使用tinker从Quickbooks获取公司信息的示例

注意:在执行这些命令之前,请访问您的连接路由(默认为/quickbooks/connect),为您的用户获取quickbooks令牌。

Auth::logInUsingId(1);
$quickbooks = app('Quickbooks')
$quickbooks->getDataService()->getCompanyInfo();

您可以根据SDK中的说明调用任何资源。

使用包含的artisan命令

如果您想使用包含的artisan命令,您需要提供查询以检索您的数据。在AppServiceProvider的boot方法中添加您的客户查询。

QuickbooksHelper::setCustomerQuery(function() {
	return User::query()
	    ->with('client')
	    ->role(User::ROLE_APPROVED);
});

QuickbooksHelper::setCustomerFilter(function($query) {
	$query
	    ->has('orders')
	    ->whereNull('qb_customer_id')
	    ->where('sync_failed', '<', 3);
});

一旦设置了customerQuery和customerFilter,您就可以运行artisan命令来与quickbooks同步客户。

php artisan qb:customer

在这个提供的示例中,只有那些有订单且同步失败不超过3次且尚未与quickbooks同步的客户将被同步。如果您按如下方式指定ID以同步客户

php artisan qb:customer --id=123

将忽略客户过滤器,这使您能够更新已经同步的现有客户。

同样,要使用qb:invoice命令,您还需要设置invoiceQuery和invoiceFilter,例如

QuickbooksHelper::setInvoiceQuery(function() {
	return Order::query()
	    ->with(['user', 'items'])
	    ->whereHas('user', function ($q) {
	        $q->whereNotNull('qb_customer_id');
         })
        ->whereNotNull('paymentid');
});

QuickbooksHelper::setInvoiceFilter(function(&$query) {
	$query->where(function ($q) {
	    $q->whereNull('qb_invoice_id')
	    ->orWhereNull('qb_payment_id')
	    ->orWhere('sync', 1);
     })
     ->where('sync_failed', '<', 3)
});

中间件

如果您有依赖于用户账户拥有可用的QuickBooks OAuth令牌的路由,有一个名为Codemonkey76\Quickbooks\Http\Middleware\QuickbooksConnected的中间件,它注册为quickbooks,将确保账户已链接,并在必要时将其重定向到connect路由。

以下是一个示例路由定义

Route::view('some/route/needing/quickbooks/token/before/using', 'some.view')
     ->middleware('quickbooks');