shop25/prices-client

价格服务客户端

2.4.0 2024-05-29 11:54 UTC

README

S25\PricesApiClient\Client - API客户端类,包含返回实现 S25\PricesApiClient\Contract\ApiMethodRequestContract 接口的请求实例的方法,如 requestApiMethod

请求接口继承自基本接口,包含用于同步和异步执行的方法 perform()performAsync()

请求接口的注释中包含

  • 在执行请求前必须调用的必填设置器信息,
  • 返回数据的格式。

服务不检查供应商、品牌、编号和其他对象以及它们之间的关系,只检查某些输入数据的格式。当请求不存在的或已禁用的对象时,服务器响应将只包含正确对象的数据。

输入和输出数据

所有API请求方法遵循以下约定

setRawNumber(s)? 方法接收未经格式化的数字/数字数组,只接受 [0-9A-Z]。

形如 set{Param}s 的方法总是与 add{Param} 配对,用于逐项填充参数。

返回的价格始终以包装为单位。最佳价格根据 每包装价格/每包装数量 的比率计算,但结果中只包含包装价格。

API客户端初始化示例

实例化客户端,创建请求,指定请求所需参数。

use S25\PricesApiClient\Client;

$client = new Client('http://service.url', 'SHOP-API-KEY');

$request = $client->requestBunchBestPrices()
    ->setBrandSlug('suzuki')
    ->addRawNumber('RAWPARTNUMBER1')
    ->addRawNumber('RAWPARTNUMBER2')
    ->addRawNumber('RAWPARTNUMBER3')
    ->addCurrencyCode('CUR');

接下来,数据获取可以是同步的

use S25\PricesApiClient\Contracts\Request;

/** @var Request\BunchBestPricesRequestContract $request */

$bestPricesResponse = $request->perform();

var_dump($bestPricesResponse);

,也可以是异步的

use S25\PricesApiClient\Contracts\Request;

/** @var Request\BunchBestPricesRequestContract $request */

$request->performAsync()
    ->then(static function ($bestPricesResponse) {
        var_dump($bestPricesResponse);
    })
    ->wait();

生成器

额外的方法 iterate 允许通过循环 foreach 逐个获取所有商品的完整价格。

use S25\PricesApiClient\Contracts\Request;

/** @var Request\PaginateAllRequestContract $request */

foreach ($request->iterate() as [
    'brandSlug' => $brandSlug,
    'rawNumber' => $rawNumber,
    'number' => $number,
    'name' => $name,
    'prices' => $prices,
]) {
    foreach ($prices as $supplierSlug => $supplierPrices) {
        foreach ($supplierPrices as $currencyCode => [$price, $perPack]) {
            // ... just DO IT! 
        }
    }
}