Skip to content

Commit 6d812c0

Browse files
committed
Added more Admin API endpoints support
1 parent dc12154 commit 6d812c0

27 files changed

+1177
-65
lines changed

README.md

+54-9
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,64 @@ A simple PHP client to use the [Sylius PHP API](https://docs.sylius.com/en/lates
44

55
*IMPORTANT:* Documentation is work in progress.
66

7-
Matrix compatibility:
7+
Compatibility matrix:
88

9-
| Sylius version(s) | API PHP Client version |CI status |
10-
|--------------------|-------------------------|--------------------------------------------------------------------------------------------------------------------------|
11-
| v1.6 | v1.0 ||
12-
| v1.7 | v1.0 ||
13-
| - | master ||
9+
| Sylius version(s) | API PHP Client version | PHP requirements |CI status |
10+
|--------------------|------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------|
11+
| \>= 1.6 <=1.7 | ^1.0 (master) | ^7.3 | |
12+
| 1.8 | no support | | |
13+
| \>= 1.9 | ^2.0 (next) | ^8.0 | |
1414

1515
Note that our PHP client is backward compatible.
1616

17-
## Requirements
17+
## Usage for API v2 (Sylius >= 1.9)
1818

19-
* PHP >= 7.3
20-
* Composer
19+
In Sylius versions 1.9 and later, you will be using the v2 API, or Unified API.
20+
This APU will expose 2 sections:
21+
* the Shop API, for accessing data from the customer's point of view
22+
* the Admin API, for accessing data from an administrator point of view
2123

24+
Additionally, you can activate the now deprecated v1 Admin API.
25+
26+
To create your client, there is a client builder for each API that will take care for
27+
you of the internals and dependency injection.
28+
29+
### Admin API usage
30+
31+
```php
32+
<?php
33+
34+
$builder = new \Diglin\Sylius\ApiClient\SyliusAdminClientBuilder();
35+
36+
$client = $builder->buildAuthenticatedByPassword('johndoe', 'password');
37+
$client->getProductApi()->all();
38+
```
39+
40+
### Store API usage
41+
42+
```php
43+
<?php
44+
45+
$builder = new \Diglin\Sylius\ApiClient\SyliusStoreClientBuilder();
46+
47+
$client = $builder->buildAuthenticatedByPassword('[email protected]', 'password');
48+
$client->getProductApi()->all();
49+
```
50+
51+
## Usage for API v1 (Sylius >= 1.6 <=1.7, deprecated after 1.7)
52+
53+
> NOTE: If you are using Sylius version >= 1.10, you will need to reactivate this API
54+
> following this documentation: https://docs.sylius.com/en/1.10/book/api/introduction.html?highlight=sylius_api
55+
56+
To create your client, there is a client builder that will take care for
57+
you of the internals and dependency injection.
58+
59+
```php
60+
<?php
61+
62+
$builder = new \Diglin\Sylius\ApiClient\SyliusLegacyClientBuilder();
63+
64+
$client = $builder->buildAuthenticatedByPassword('johndoe', 'password', '<api key>', '<api secret>');
65+
$client->getProductsApi()->all();
66+
```
2267

composer.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
{
1212
"name": "Diglin (Derivative Work)",
1313
"homepage": "https://www.diglin.com"
14+
},
15+
{
16+
"name": "Gyroscops (Derivative Work)",
17+
"homepage": "https://gyroscops.com"
1418
}
1519
],
1620
"autoload": {
@@ -25,7 +29,7 @@
2529
}
2630
},
2731
"require": {
28-
"php": ">=7.1",
32+
"php": ">=8.0",
2933
"psr/http-client": "^1.0",
3034
"psr/http-message": "^1.0",
3135
"php-http/httplug": "^1.1 || ^2.0",

src/Api/Admin/OrderApi.php

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Diglin\Sylius\ApiClient\Api\Admin;
4+
5+
use Diglin\Sylius\ApiClient\Client\ResourceClientInterface;
6+
use Diglin\Sylius\ApiClient\Filter\FilterBuilderInterface;
7+
use Diglin\Sylius\ApiClient\Pagination\PageFactoryInterface;
8+
use Diglin\Sylius\ApiClient\Pagination\PageInterface;
9+
use Diglin\Sylius\ApiClient\Pagination\ResourceCursorFactoryInterface;
10+
use Diglin\Sylius\ApiClient\Pagination\ResourceCursorInterface;
11+
use Diglin\Sylius\ApiClient\Sort\SortBuilderInterface;
12+
use Webmozart\Assert\Assert;
13+
14+
final class OrderApi implements OrderApiInterface
15+
{
16+
public function __construct(
17+
private ResourceClientInterface $resourceClient,
18+
private PageFactoryInterface $pageFactory,
19+
private ResourceCursorFactoryInterface $cursorFactory,
20+
) {}
21+
22+
public function get($code): array
23+
{
24+
Assert::string($code);
25+
return $this->resourceClient->getResource('api/v2/admin/orders/%s', [$code]);
26+
}
27+
28+
public function listPerPage(
29+
int $limit = 10,
30+
array $queryParameters = [],
31+
FilterBuilderInterface $filterBuilder = null,
32+
SortBuilderInterface $sortBuilder = null
33+
): PageInterface {
34+
$data = $this->resourceClient->getResources('api/v2/admin/orders', [], $limit, $queryParameters, $filterBuilder, $sortBuilder);
35+
36+
return $this->pageFactory->createPage($data);
37+
}
38+
39+
public function all(
40+
int $pageSize = 10,
41+
array $queryParameters = [],
42+
FilterBuilderInterface $filterBuilder = null,
43+
SortBuilderInterface $sortBuilder = null
44+
): ResourceCursorInterface {
45+
$data = $this->listPerPage($pageSize, $queryParameters, $filterBuilder, $sortBuilder);
46+
47+
return $this->cursorFactory->createCursor($pageSize, $data);
48+
}
49+
50+
public function cancel(string $code, array $data = []): int
51+
{
52+
Assert::string($code);
53+
return $this->resourceClient->patchResource('api/v2/admin/orders/%s/cancel', [$code], $data);
54+
}
55+
56+
public function listPayments(
57+
string $code,
58+
int $pageSize = 10,
59+
array $queryParameters = [],
60+
FilterBuilderInterface $filterBuilder = null,
61+
SortBuilderInterface $sortBuilder = null
62+
): ResourceCursorInterface {
63+
$data = $this->resourceClient->getResources('api/v2/admin/orders/%s/payments', [], $pageSize, $queryParameters, $filterBuilder, $sortBuilder);
64+
65+
return $this->cursorFactory->createCursor($pageSize, $this->pageFactory->createPage($data));
66+
}
67+
68+
public function listShipments(
69+
string $code,
70+
int $pageSize = 10,
71+
array $queryParameters = [],
72+
FilterBuilderInterface $filterBuilder = null,
73+
SortBuilderInterface $sortBuilder = null
74+
): ResourceCursorInterface {
75+
$data = $this->resourceClient->getResources('api/v2/admin/orders/%s/shipments', [], $pageSize, $queryParameters, $filterBuilder, $sortBuilder);
76+
77+
return $this->cursorFactory->createCursor($pageSize, $this->pageFactory->createPage($data));
78+
}
79+
}

src/Api/Admin/OrderApiInterface.php

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Diglin\Sylius\ApiClient\Api\Admin;
4+
5+
use Diglin\Sylius\ApiClient\Api\Operation\GettableResourceInterface;
6+
use Diglin\Sylius\ApiClient\Api\Operation\ListableResourceInterface;
7+
use Diglin\Sylius\ApiClient\Exception\HttpException;
8+
use Diglin\Sylius\ApiClient\Filter\FilterBuilderInterface;
9+
use Diglin\Sylius\ApiClient\Pagination\ResourceCursorInterface;
10+
use Diglin\Sylius\ApiClient\Sort\SortBuilderInterface;
11+
12+
interface OrderApiInterface extends GettableResourceInterface, ListableResourceInterface
13+
{
14+
/**
15+
* Cancel an order.
16+
*
17+
* @param string $code Code of the order
18+
*
19+
* @throws HttpException if the request failed
20+
*/
21+
public function cancel(string $code, array $data = []): int;
22+
23+
/**
24+
* Lists an order payments.
25+
*
26+
* @param string $code Code of the order
27+
*
28+
* @throws HttpException if the request failed
29+
*/
30+
public function listPayments(
31+
string $code,
32+
int $pageSize = 10,
33+
array $queryParameters = [],
34+
FilterBuilderInterface $filterBuilder = null,
35+
SortBuilderInterface $sortBuilder = null
36+
): ResourceCursorInterface;
37+
38+
/**
39+
* Lists an order shipments.
40+
*
41+
* @param string $code Code of the order
42+
*
43+
* @throws HttpException if the request failed
44+
*/
45+
public function listShipments(
46+
string $code,
47+
int $pageSize = 10,
48+
array $queryParameters = [],
49+
FilterBuilderInterface $filterBuilder = null,
50+
SortBuilderInterface $sortBuilder = null
51+
): ResourceCursorInterface;
52+
}

src/Api/Admin/PaymentApi.php

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Diglin\Sylius\ApiClient\Api\Admin;
4+
5+
use Diglin\Sylius\ApiClient\Client\ResourceClientInterface;
6+
use Diglin\Sylius\ApiClient\Filter\FilterBuilderInterface;
7+
use Diglin\Sylius\ApiClient\Pagination\PageFactoryInterface;
8+
use Diglin\Sylius\ApiClient\Pagination\PageInterface;
9+
use Diglin\Sylius\ApiClient\Pagination\ResourceCursorFactoryInterface;
10+
use Diglin\Sylius\ApiClient\Pagination\ResourceCursorInterface;
11+
use Diglin\Sylius\ApiClient\Sort\SortBuilderInterface;
12+
use Webmozart\Assert\Assert;
13+
14+
final class PaymentApi implements PaymentApiInterface
15+
{
16+
public function __construct(
17+
private ResourceClientInterface $resourceClient,
18+
private PageFactoryInterface $pageFactory,
19+
private ResourceCursorFactoryInterface $cursorFactory,
20+
) {}
21+
22+
public function get($code): array
23+
{
24+
Assert::string($code);
25+
return $this->resourceClient->getResource('api/v2/admin/payments/%s', [$code]);
26+
}
27+
28+
public function listPerPage(
29+
int $limit = 10,
30+
array $queryParameters = [],
31+
FilterBuilderInterface $filterBuilder = null,
32+
SortBuilderInterface $sortBuilder = null
33+
): PageInterface {
34+
$data = $this->resourceClient->getResources('api/v2/admin/payments', [], $limit, $queryParameters, $filterBuilder, $sortBuilder);
35+
36+
return $this->pageFactory->createPage($data);
37+
}
38+
39+
public function all(
40+
int $pageSize = 10,
41+
array $queryParameters = [],
42+
FilterBuilderInterface $filterBuilder = null,
43+
SortBuilderInterface $sortBuilder = null
44+
): ResourceCursorInterface {
45+
$data = $this->listPerPage($pageSize, $queryParameters, $filterBuilder, $sortBuilder);
46+
47+
return $this->cursorFactory->createCursor($pageSize, $data);
48+
}
49+
50+
public function complete(string $code, array $data = []): int
51+
{
52+
Assert::string($code);
53+
return $this->resourceClient->patchResource('api/v2/admin/payments/%s/complete', [$code], $data);
54+
}
55+
}

src/Api/Admin/PaymentApiInterface.php

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Diglin\Sylius\ApiClient\Api\Admin;
4+
5+
use Diglin\Sylius\ApiClient\Api\Operation\GettableResourceInterface;
6+
use Diglin\Sylius\ApiClient\Api\Operation\ListableResourceInterface;
7+
use Diglin\Sylius\ApiClient\Exception\HttpException;
8+
9+
interface PaymentApiInterface extends GettableResourceInterface, ListableResourceInterface
10+
{
11+
/**
12+
* Cancel an order.
13+
*
14+
* @param string $code Code of the order
15+
*
16+
* @throws HttpException if the request failed
17+
*/
18+
public function complete(string $code, array $data = []): int;
19+
}

src/Api/Admin/PaymentMethodApi.php

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Diglin\Sylius\ApiClient\Api\Admin;
4+
5+
use Diglin\Sylius\ApiClient\Client\ResourceClientInterface;
6+
use Webmozart\Assert\Assert;
7+
8+
final class PaymentMethodApi implements PaymentMethodApiInterface
9+
{
10+
public function __construct(
11+
private ResourceClientInterface $resourceClient,
12+
) {}
13+
14+
public function get($code): array
15+
{
16+
Assert::string($code);
17+
return $this->resourceClient->getResource('api/v2/admin/payment-methods/%s', [$code]);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Diglin\Sylius\ApiClient\Api\Admin;
4+
5+
use Diglin\Sylius\ApiClient\Api\Operation\GettableResourceInterface;
6+
7+
interface PaymentMethodApiInterface extends GettableResourceInterface
8+
{
9+
}

0 commit comments

Comments
 (0)