justbetter / laravel-magento-client
用于与 Magento 交互的客户端
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.5
- laravel/framework: ^10.0|^11.0
- league/oauth1-client: ^1.10
Requires (Dev)
- larastan/larastan: ^2.5
- laravel/pint: ^1.7
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0
- phpstan/phpstan-mockery: ^1.1
- phpunit/phpunit: ^10.1
README
Laravel Magento Client
用于从您的 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 URL
和 Identity 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);
获取实例后,您可以使用 graphql
、get
、post
、put
和 patch
方法使用 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
这将执行三个任务
- 确保所有测试通过
- 检查使用静态代码分析的问题
- 检查代码是否正确格式化
贡献
请参阅 CONTRIBUTING 了解详情。
安全漏洞
请查阅 我们的安全策略 了解如何报告安全漏洞。
鸣谢
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件。