justbetter/laravel-magento-client

用于与 Magento 交互的客户端

2.6.1 2024-09-09 11:45 UTC

README

Banner

Laravel Magento Client

Tests Coverage Analysis Total downloads

用于从您的 Laravel 应用程序与 Magento 通信的客户端。

<?php

class Example
{
    public function __construct(
        protected \JustBetter\MagentoClient\Client\Magento $magento,
    ) {
    }

    public function retrieveProduct()
    {
        $response = $this->magento->get('products/1');
    }

    public function retrieveOrdersLazily()
    {
        $retrievedOrders = [];

        $searchCriteria = \JustBetter\MagentoClient\Query\SearchCriteria::make()
            ->where('state', 'processing');

        foreach ($this->magento->lazy('orders', $searchCriteria->get()) as $order) {
            $retrievedOrders[] = $order['increment_id'];
        }
    }

    public function multipleConnections()
    {
        $this->magento->connection('connection_one')->get('products/1');
        $this->magento->connection('connection_two')->get('products/1');
    }
}

想要将价格或库存同步到 Magento 吗?

安装

您是从 grayloon/laravel-magento-api 过来的吗?我们编写了一份 迁移指南

需要此包

composer require justbetter/laravel-magento-client

配置

将以下内容添加到您的 .env

MAGENTO_BASE_URL=
MAGENTO_ACCESS_TOKEN=

可选地,发布此包的配置文件。

php artisan vendor:publish --provider="JustBetter\MagentoClient\ServiceProvider" --tag=config

多个连接

此包支持连接到多个 Magento 实例。在配置文件中,您将找到一个包含连接的数组,您可以在其中配置每个连接。

    'connection' => 'default',
    'connections' => [
        'default' => [
            /* Base URL of Magento, for example: https://magento.test */
            'base_url' => env('MAGENTO_BASE_URL'),

           // Other settings
        ],
        'another_connection' => [
            'base_url' => env('ANOTHER_MAGENTO_BASE_URL'),

            // Other settings
        ],
    ],

默认连接设置指定了默认使用的连接。您可以通过客户端上的 connection 方法切换连接。

/** @var \JustBetter\MagentoClient\Client\Magento $client */
$client = app(\JustBetter\MagentoClient\Client\Magento::class);

$client->connection('connection_one')->get('products');

认证

默认情况下,此包使用 Bearer 令牌来认证到 Magento。自 Magento 2.4.4 以来,此认证方法需要在 Magento 中进行额外配置,如此处所述

建议使用 OAuth 1.0 来认证 Magento,这将防止额外的配置要求,除了设置集成本身。

设置 OAuth 1.0

首先,将以下变量添加到您的 .env-文件。

MAGENTO_AUTH_METHOD=oauth

请注意,您也可以在此处删除 MAGENTO_ACCESS_TOKEN,因为它将保存在文件中。

接下来,打开 Magento 并创建一个新的集成。在配置时,提供 Callback URLIdentity link URL。如果您没有对配置进行任何更改,这些是这些 URL

Callback URL:      https://example.com/magento/oauth/callback/{connection}
Identity link URL: https://example.com/magento/oauth/identity/{connection}

connection 是配置文件中连接数组中的键。

在创建集成时,Magento 将通过 callback-端点将多个令牌和密钥发送到您的应用程序。这些信息将按 magento.php 中配置的方式保存在数据库中。您可能需要调整以将密钥保存在 JSON 文件中或创建自己的实现。Magento 将将您重定向到 identity-端点以激活集成。

有关 Magento 中 OAuth 1.0 的更多信息,请参阅文档

身份端点

注意

请务必添加您的认证中间件

请注意,默认情况下,identity-端点没有任何认证或授权中间件 - 您应自己添加此配置。如果没有任何保护措施,任何人都可以更改密钥文件中的令牌。

建议仅允许应用程序管理员访问身份端点。

用法

您可以通过注入或解析来获取客户端实例

<?php

public function __construct(
    protected \JustBetter\MagentoClient\Client\Magento $magento
) {

}

// OR

/** @var \JustBetter\MagentoClient\Client\Magento $client */
$client = app(\JustBetter\MagentoClient\Client\Magento::class);

获取实例后,您可以使用 graphqlgetpostputpatch 方法使用 Magento API。

搜索条件/过滤

为了轻松创建搜索条件,您可以使用 \JustBetter\MagentoClient\Query\SearchCriteria 类。例如

<?php

$search = \JustBetter\MagentoClient\Query\SearchCriteria::make()
        ->select('items[sku,name]')
        ->where('sku', '!=', '123')
        ->orWhere('price', '>', 10),
        ->whereIn('sku', ['123', '456'])
        ->orWhereNull('name')
        ->orderBy('sku')
        ->paginate(1, 50)
        ->get();

您可以在 Adobe Commerce 的文档 中查看更多示例。

连接

您可以通过客户端上的 connection 方法连接到其他连接。

/** @var \JustBetter\MagentoClient\Client\Magento $client */
$client = app(\JustBetter\MagentoClient\Client\Magento::class);

$client->connection('connection_one')->get('products');
$client->connection('connection_two')->get('products');

GraphQL

您可以使用客户端上的 graphql 方法运行经过身份验证的 GraphQL 查询。

/** @var \JustBetter\MagentoClient\Client\Magento $client */
$client = app(\JustBetter\MagentoClient\Client\Magento::class);

$client->graphql(
    'query searchProducts($search: String) {
        products(
            search: $search
        ) {
            items {
            sku
            }
        }
    }',
    [
        'search' => 'test'
    ]
);

更多示例

您可以通过查看测试来了解更多示例。

检查 Magento 是否可用

此客户端通过在缓存中存储任何 >=502 且 <=504 响应代码的数量来跟踪 Magento 是否可用。您可以使用客户端上的 available() 方法来检查 Magento 是否可用。

阈值、时间范围和状态代码可以在配置文件中按连接进行配置。

作业

此包提供了一个作业中间件,当 Magento 不可用时,会将作业重新放入队列。中间件位于 \JustBetter\MagentoClient\Jobs\Middleware\AvailableMiddleware

测试

此包使用 Laravel 的 HTTP 客户端,以便您可以模拟请求。

<?php

Http::fake([
    '*/rest/all/V1/products*' => Http::response([
        'items' => [['sku' => '::some_sku::']],
        'total_count' => 1,
    ]),
]);

质量

为确保此包的质量,请运行以下命令

composer quality

这将执行三个任务

  1. 确保所有测试通过
  2. 检查使用静态代码分析的问题
  3. 检查代码是否正确格式化

贡献

请参阅 CONTRIBUTING 了解详情。

安全漏洞

请查阅 我们的安全策略 了解如何报告安全漏洞。

鸣谢

许可协议

MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件

JustBetter logo