szunisoft/laravel-unas

Laravel Webshop API 的 Laravel 扩展包

v1.0.15 2019-07-22 15:48 UTC

This package is auto-updated.

Last update: 2024-09-23 03:37:51 UTC


README

Build Status Latest Stable Version Total Downloads License PHP from Packagist Coverage Status

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);