szunisoft / laravel-unas
Laravel Webshop API 的 Laravel 扩展包
Requires
- php: >=7.2
- ext-simplexml: *
- ext-xmlwriter: *
- guzzlehttp/guzzle: ^6.3.3
- laravel/framework: ~5.5
- orchestra/parser: ^3.8
Requires (Dev)
- mockery/mockery: 1.1.*
- orchestra/testbench: 3.8.*
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpcov: ^6.0
- phpunit/phpunit: 8.*
- spatie/phpunit-snapshot-assertions: ^2.1.2
README
Laravel Unas
关于此包
虽然这个包尚未完成,但它将持续维护和开发,因为我们主要的工程项目需要这个扩展。
命名规范
在某个时候,官方 Unas 命名规范可能不是很好或者根本不存在。然而,该包并不试图引入自定义命名规范,它将使用官方文档中描述的属性和属性名。
API 兼容性
以下表格包含相关的 API 端点。所有端点都将很快得到支持。
未来功能 ⭐
可配置速率限制
每次端点被耗尽时,将根据给定配置触发一个事件。
要求 ❗
- php >= 7.2
- ext-xmlwriter
- ext-simplexml
安装 ▶️
composer require szunisoft/laravel-unas
Laravel 支持 ✋
>= 5.5
配置 ⚙️
导出配置
php artisan vendor:publish --provider="SzuniSoft/Unas/Laravel/UnasServiceProvider" --tag=config
身份验证
支持两种身份验证驱动程序。
旧版(默认驱动程序)
您必须将驱动程序设置为 旧版。
对于旧版身份验证,您将需要以下凭证
- 用户名
- 密码
- 商店 ID
- 身份验证码
密钥
您必须将驱动程序设置为 密钥。
在密钥身份验证的情况下,您需要在 Unas 站点内生成一个 API 密钥。
错误处理原则
某些类型的异常可以转换为事件而不是抛出。这只是一个代码架构决策,决定如何处理特定情况。
例如,我们创建了一个多租户项目,它将在幕后处理大量不同客户端的流量。更明智的做法是消费和拦截错误作为事件,因为我们将能够使用多个监听器,并且还可以向租户发送通知。
另一方面,如果您需要针对单个租户的非常特定和定制的应用程序,那么将错误拦截为异常会更合适,因为它可能是整个应用程序的核心组件。
默认情况下,所有事件都是禁用的,并将被触发。
为了满足您的需求,您可以自由地添加或删除配置文件中声明的事件。
<?php return [ // .... 'events' => [ // Add or remove events here. SzuniSoft\Unas\Laravel\Events\EndpointBlacklisted::class ] ];
以下错误可以转换为事件。
关于每个异常的简要说明
EndpointBlacklistedException
当单个客户端耗尽端点时抛出。您可以访问客户端和 Carbon 实例。
InvalidConfigurationException
在客户端配置不良的情况下抛出。
AuthenticationException
当旧版或密钥凭证无效时抛出。您可以访问无效的字段。
PremiumAuthenticationException
当所需的身份验证方式是 API 密钥,但相关租户没有高级包时抛出。在这种情况下,租户应使用旧版方法。
TooHighChunkException
当端点不允许每页给定结果的数量时抛出。
记住客户端
有时您希望有多个客户端。如果您希望记住客户端,可以在配置中启用此功能。记住客户端将避免为相同的身份验证凭据创建多个客户端。
创建和访问客户端
创建客户端有多种方法。
依赖注入
此方法将使用配置中提供的凭据。
<?php function anyFunction (SzuniSoft\Unas\Internal\Client $client) { }
IoC 容器
此方法将使用配置中提供的凭据。
<?php $client = app(SzuniSoft\Unas\Internal\Client::class); $client = app('unas.client');
有时您可能希望自行定制客户端。对于这种需求,您可以使用客户端构建器和客户端工厂。
客户端构建器
<?php $builder = app(SzuniSoft\Unas\Laravel\Support\ClientBuilder::class); $builder = app('unas.client.builder'); $client = $builder // Apply premium authentication API key manually. ->withPremium('SomeApiKey') // Apply legacy authentication credentials manually. ->withLegacy('Username', 'Password', 'ShopID', 'AuthCode') // Override default base path to access Unas. // You should never set base url manually except when url changed. ->basePath('http://new.domain') // Set events that should be fired instead throwing as exception. ->allowedEvents(...) // Set events that should not be fired. Instead exception should be thrown. ->disallowedEvents(...) // Finally retrieve the client. ->build();
客户端工厂
<?php $factory = app(SzuniSoft\Unas\Laravel\Support\ClientFactory::class); $factory = app('unas.client.factory'); $config = [ // Custom client configurations.. ]; $client = $factory->create($config);
获取产品
<?php /** @var SzuniSoft\Unas\Internal\Client $client */ $client->getProducts() ->statusBase(...) ->parent(...) ->id(...) ->sku(...) ->timeStart(...) ->timeEnd(...) ->dateStart(...) ->dateEnd(...) ->contentType(...) ->contentParam(...) ->chunk(function (Illuminate\Support\Collection $products) { $products->each(function (SzuniSoft\Unas\Model\Product $product) { // Process product. }); }, $perPage = 50);
访问第1页,每页显示50个产品。
<?php /** @var SzuniSoft\Unas\Internal\Client $client */ $client->getProducts() ->paginate(50) ->page(1);