shop25 / prices-client
价格服务客户端
2.4.0
2024-05-29 11:54 UTC
Requires
- php: ^8.0
- ext-json: *
- guzzlehttp/guzzle: ^6.5||^7.0
Requires (Dev)
- phpunit/phpunit: ^9.5
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! } } }