simplia/api

此包最新版本(0.1.18)没有提供许可证信息。

0.1.18 2024-09-09 14:43 UTC

README

Simplia.cz SDK pro API eshopů(https://api.simplia.cz/)针对内部集成。自动从 OpenAPI 定义生成。

相比直接使用 REST API 的优点

  • 支持静态分析(PHPStan)和调试问题,无需调用 API
  • 更简单的测试(与 SDK 的通信比整个 HTTP 通信更容易模拟)
  • 编辑器中的自动完成

安装

composer require simplia/api:dev-master

贡献

整个仓库自动从 OpenAPI 定义生成,需要向生成器发送 pull request(或只需在此 issue 中描述问题)

术语

  • ___Endpoint - 操作类别
  • ___Request - 输出参数,如排序、过滤器等
  • ___FieldConfig - 从后端获取的字段列表
  • ___Input - 操作的输入,例如新产品描述等,作为 API 请求体发送

示例

创建新订单

use \Simplia\Api\Api;
use \Simplia\Api\Input\AddressTypeApiInput;
use \Simplia\Api\Input\OrderCreateTypeApiInput;
use \Simplia\Api\Input\OrderItemTypeApiInput;
use \Simplia\Api\Entity\OrderApiEntity;

$api = Api::withUsernameAuth($httpClient, 'demo2.simpliashop.cz', 'api_user', '*********');
$order = $api->getOrdersEndpoint()->create(
    OrderCreateTypeApiInput::create()
        ->setDeliveryAddress(
            AddressTypeApiInput::create()
                ->setFirstName('John')
                ->setLastName('Smith')
                ->setCity('Prague')
                ->setEmail('info@example.org')
        )
        ->setCustomerNote('customer note')
        ->setItems([
            OrderItemTypeApiInput::create()
            ->setItemId(123)
            ->setQuantity(2)
            ->setPriceVat(200) // unit price with vat
        ]),
    OrderApiEntity::createFieldConfig()
        ->withId()
);

echo $order->getId();

更改订单状态

use \Simplia\Api\Api;
use \Simplia\Api\Input\OrderStatusTypeApiInput;

$api = Api::withUsernameAuth($httpClient, 'demo2.simpliashop.cz', 'api_user', '*********');
$api->getOrdersEndpoint()->updateStatus(
    '123',
    OrderStatusTypeApiInput::create()
        ->setStatusId(4)
);

按名称列出具有特定状态的订单

use \Simplia\Api\Api;
use \Simplia\Api\Entity\ContactApiEntity;
use \Simplia\Api\Entity\OrderApiEntity;
use \Simplia\Api\Request\OrderApiRequest;

$api = Api::withUsernameAuth($httpClient, 'demo2.simpliashop.cz', 'api_user', '*********');
$orders = $api->getOrdersEndpoint()->iterate(
    OrderApiRequest::create()
        ->whereStatus(1),
    OrderApiEntity::createFieldConfig()
        ->withId()
        ->withDeliveryAddress(
            ContactApiEntity::createFieldConfig()
                ->withCompanyName()
        )
);

foreach ($orders as $order) {
    echo $order->getId();
    echo $order->getDeliveryAddress()->getCompanyName();
}

获取单个订单

use \Simplia\Api\Api;
use \Simplia\Api\Entity\ContactApiEntity;
use \Simplia\Api\Entity\OrderApiEntity;

$api = Api::withUsernameAuth($httpClient, 'demo2.simpliashop.cz', 'api_user', '*********');
$order = $api->getOrdersEndpoint()->get(
   '123',
    OrderApiEntity::createFieldConfig()
        ->withId()
        ->withDeliveryAddress(
            ContactApiEntity::createFieldConfig()
                ->withCompanyName()
        )
);

echo $order->getId();
echo $order->getDeliveryAddress()->getCompanyName();
echo $order->getCurrency(); // throws error because currency with wasn't loaded from API (is not defined in field config)

按主题列出文章

use \Simplia\Api\Api;
use \Simplia\Api\Request\ArticleApiRequest;
use \Simplia\Api\Entity\ArticleApiEntity;

$api = Api::withUsernameAuth($httpClient, 'demo2.simpliashop.cz', 'api_user', '*********');
$articles = $api->getArticlesEndpoint()->iterate(
    ArticleApiRequest::create()
        ->whereTopic(7)
        ->orderByPublishedAsc(),
    ArticleApiEntity::createFieldConfig()
        ->withName()
        ->withUrl()
);

foreach ($articles as $article) {
    echo '<a href="' . $article->getUrl() . '">' . $article->getName() . '</a>';
}