From e91449b0bbce2067b79d1078657632f5fc7fdf61 Mon Sep 17 00:00:00 2001 From: Uryvskiy Dima Date: Tue, 8 Jul 2025 13:08:49 +0300 Subject: [PATCH 01/10] Added getInvoice method --- .../Entity/Payments/ApiGetInvoiceResponse.php | 192 ++++++++++++++++++ .../Payments/PaymentGetInvoiceResponse.php | 30 +++ src/ResourceGroup/Payments.php | 52 +++++ test.php | 23 +++ 4 files changed, 297 insertions(+) create mode 100644 src/Model/Entity/Payments/ApiGetInvoiceResponse.php create mode 100644 src/Model/Response/Payments/PaymentGetInvoiceResponse.php create mode 100644 test.php diff --git a/src/Model/Entity/Payments/ApiGetInvoiceResponse.php b/src/Model/Entity/Payments/ApiGetInvoiceResponse.php new file mode 100644 index 000000000..5d6e376b1 --- /dev/null +++ b/src/Model/Entity/Payments/ApiGetInvoiceResponse.php @@ -0,0 +1,192 @@ +") + * @JMS\SerializedName("createdAt") + */ + public $createdAt; + + /** + * @var int + * + * @JMS\Type("integer") + * @JMS\SerializedName("customerId") + */ + public $customerId; + + /** + * @var int + * + * @JMS\Type("integer") + * @JMS\SerializedName("orderId") + */ + public $orderId; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("paymentId") + */ + public $paymentId; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("amount") + */ + public $amount; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("currency") + */ + public $currency; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("email") + */ + public $email; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("phone") + */ + public $phone; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("status") + */ + public $status; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("statusMessage") + */ + public $statusMessage; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("externalId") + */ + public $externalId; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("invoiceUuid") + */ + public $invoiceUuid; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("invoiceType") + */ + public $invoiceType; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("link") + */ + public $link; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("errorMsg") + */ + public $errorMsg; + + /** + * @var \DateTime + * + * @JMS\Type("DateTime<'Y-m-d\TH:i:sP'>") + * @JMS\SerializedName("paidAt") + */ + public $paidAt; + + /** + * @var \DateTime + * + * @JMS\Type("DateTime<'Y-m-d\TH:i:sP'>") + * @JMS\SerializedName("expiredAt") + */ + public $expiredAt; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("cancellationDetails") + */ + public $cancellationDetails; + + /** + * @var bool + * + * @JMS\Type("bool") + * @JMS\SerializedName("refundable") + */ + public $refundable; + + /** + * @var bool + * + * @JMS\Type("bool") + * @JMS\SerializedName("cancellable") + */ + public $cancellable; + + /** + * @var \RetailCrm\Api\Model\Entity\Payments\ModuleRefund[] + * + * @JMS\Type("array") + * @JMS\SerializedName("refunds") + */ + public $refunds; + + /** + * @var float + * + * @JMS\Type("float") + * @JMS\SerializedName("discountAmount") + */ + public $discountAmount; +} diff --git a/src/Model/Response/Payments/PaymentGetInvoiceResponse.php b/src/Model/Response/Payments/PaymentGetInvoiceResponse.php new file mode 100644 index 000000000..beb8a8834 --- /dev/null +++ b/src/Model/Response/Payments/PaymentGetInvoiceResponse.php @@ -0,0 +1,30 @@ +payments->getInvoice('7684160f-5ebe-4787-b031-1fc9e659f123'); + * } catch (ApiExceptionInterface $exception) { + * echo sprintf( + * 'Error from RetailCRM API (status code: %d): %s', + * $exception->getStatusCode(), + * $exception->getMessage() + * ); + * + * if (count($exception->getErrorResponse()->errors) > 0) { + * echo PHP_EOL . 'Errors: ' . implode(', ', $exception->getErrorResponse()->errors); + * } + * } + * ``` + * + * @param string $invoiceUuid + * + * @return \RetailCrm\Api\Model\Response\Payments\PaymentGetInvoiceResponse + * @throws \RetailCrm\Api\Interfaces\ApiExceptionInterface + * @throws \RetailCrm\Api\Interfaces\ClientExceptionInterface + * @throws \RetailCrm\Api\Exception\Api\AccountDoesNotExistException + * @throws \RetailCrm\Api\Exception\Api\ApiErrorException + * @throws \RetailCrm\Api\Exception\Api\MissingCredentialsException + * @throws \RetailCrm\Api\Exception\Api\MissingParameterException + * @throws \RetailCrm\Api\Exception\Api\ValidationException + * @throws \RetailCrm\Api\Exception\Client\HandlerException + * @throws \RetailCrm\Api\Exception\Client\HttpClientException + */ + public function getInvoice(string $invoiceUuid): PaymentGetInvoiceResponse + { + /** @var PaymentGetInvoiceResponse $response */ + $response = $this->sendRequest( + RequestMethod::GET, + 'payment/invoice/' . $invoiceUuid, + null, + PaymentGetInvoiceResponse::class + ); + + return $response; + } } diff --git a/test.php b/test.php new file mode 100644 index 000000000..80cf31e6b --- /dev/null +++ b/test.php @@ -0,0 +1,23 @@ +payments->getInvoice('7684160f-5ebe-4787-b031-1fc9e659f6c8'); + dd($response->invoice); +} catch (ApiExceptionInterface $exception) { + echo sprintf( + 'Error from RetailCRM API (status code: %d): %s', + $exception->getStatusCode(), + $exception->getMessage() + ); + + if (count($exception->getErrorResponse()->errors) > 0) { + echo PHP_EOL . 'Errors: ' . implode(', ', $exception->getErrorResponse()->errors); + } +} From 781857c8514c7536ea330b48637f8245fb18d859 Mon Sep 17 00:00:00 2001 From: Uryvskiy Dima Date: Tue, 8 Jul 2025 13:09:17 +0300 Subject: [PATCH 02/10] Added getInvoice method --- test.php | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 test.php diff --git a/test.php b/test.php deleted file mode 100644 index 80cf31e6b..000000000 --- a/test.php +++ /dev/null @@ -1,23 +0,0 @@ -payments->getInvoice('7684160f-5ebe-4787-b031-1fc9e659f6c8'); - dd($response->invoice); -} catch (ApiExceptionInterface $exception) { - echo sprintf( - 'Error from RetailCRM API (status code: %d): %s', - $exception->getStatusCode(), - $exception->getMessage() - ); - - if (count($exception->getErrorResponse()->errors) > 0) { - echo PHP_EOL . 'Errors: ' . implode(', ', $exception->getErrorResponse()->errors); - } -} From d74968f25c210c352cebb2f7e61c7345712c265c Mon Sep 17 00:00:00 2001 From: Uryvskiy Dima Date: Tue, 8 Jul 2025 13:15:10 +0300 Subject: [PATCH 03/10] add test --- tests/src/ResourceGroup/PaymentsTest.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/src/ResourceGroup/PaymentsTest.php b/tests/src/ResourceGroup/PaymentsTest.php index 8186a28d2..38cbaebe5 100644 --- a/tests/src/ResourceGroup/PaymentsTest.php +++ b/tests/src/ResourceGroup/PaymentsTest.php @@ -114,4 +114,24 @@ public function testUpdateInvoice(): void self::assertModelEqualsToResponse($json, $response); } + + public function testGetInvoice(): void + { + $json = <<<'EOF' +{ + "success": false, + "errorMsg": "Not found" +} +EOF; + + $mock = static::createApiMockBuilder('payment/invoice'); + $mock->matchMethod(RequestMethod::GET) + ->reply() + ->withBody($json); + + $client = TestClientFactory::createClient($mock->getClient()); + $response = $client->payments->getInvoice('7684160f-5ebe-4787-b031-1fc9e659f123'); + + self::assertModelEqualsToResponse($json, $response); + } } From 769058a1e27d7e8adfa69eb090abd7a85d3157c2 Mon Sep 17 00:00:00 2001 From: Uryvskiy Dima Date: Tue, 8 Jul 2025 18:10:23 +0300 Subject: [PATCH 04/10] Add import method --- models/.gitkeep | 0 .../Entity/Payments/ApiGetInvoiceResponse.php | 4 +- .../Payments/ApiImportInvoiceRequest.php | 101 ++++++++++++++++++ src/Model/Entity/Payments/PaymentRefund.php | 37 +++++++ .../Payments/PaymentImportInvoiceRequest.php | 44 ++++++++ src/ResourceGroup/Payments.php | 14 +++ 6 files changed, 198 insertions(+), 2 deletions(-) delete mode 100644 models/.gitkeep create mode 100644 src/Model/Entity/Payments/ApiImportInvoiceRequest.php create mode 100644 src/Model/Entity/Payments/PaymentRefund.php create mode 100644 src/Model/Request/Payments/PaymentImportInvoiceRequest.php diff --git a/models/.gitkeep b/models/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/Model/Entity/Payments/ApiGetInvoiceResponse.php b/src/Model/Entity/Payments/ApiGetInvoiceResponse.php index 5d6e376b1..18410b0fd 100644 --- a/src/Model/Entity/Payments/ApiGetInvoiceResponse.php +++ b/src/Model/Entity/Payments/ApiGetInvoiceResponse.php @@ -175,9 +175,9 @@ class ApiGetInvoiceResponse extends SuccessResponse public $cancellable; /** - * @var \RetailCrm\Api\Model\Entity\Payments\ModuleRefund[] + * @var \RetailCrm\Api\Model\Entity\Payments\PaymentRefund[] * - * @JMS\Type("array") + * @JMS\Type("array") * @JMS\SerializedName("refunds") */ public $refunds; diff --git a/src/Model/Entity/Payments/ApiImportInvoiceRequest.php b/src/Model/Entity/Payments/ApiImportInvoiceRequest.php new file mode 100644 index 000000000..9410d3f9b --- /dev/null +++ b/src/Model/Entity/Payments/ApiImportInvoiceRequest.php @@ -0,0 +1,101 @@ +") + * @JMS\SerializedName("refunds") + */ + public $refunds; + + /** + * @var bool + * + * @JMS\Type("bool") + * @JMS\SerializedName("refundable") + */ + public $refundable; +} diff --git a/src/Model/Entity/Payments/PaymentRefund.php b/src/Model/Entity/Payments/PaymentRefund.php new file mode 100644 index 000000000..2bc2fc6b8 --- /dev/null +++ b/src/Model/Entity/Payments/PaymentRefund.php @@ -0,0 +1,37 @@ +invoice = $importInvoice; + } + } +} diff --git a/src/ResourceGroup/Payments.php b/src/ResourceGroup/Payments.php index b8f853c98..e8a45eac7 100644 --- a/src/ResourceGroup/Payments.php +++ b/src/ResourceGroup/Payments.php @@ -12,6 +12,7 @@ use RetailCrm\Api\Enum\RequestMethod; use RetailCrm\Api\Model\Request\Payments\PaymentCheckRequest; use RetailCrm\Api\Model\Request\Payments\PaymentCreateInvoiceRequest; +use RetailCrm\Api\Model\Request\Payments\PaymentImportInvoiceRequest; use RetailCrm\Api\Model\Request\Payments\PaymentUpdateInvoiceRequest; use RetailCrm\Api\Model\Response\Payments\PaymentCheckResponse; use RetailCrm\Api\Model\Response\Payments\PaymentCreateInvoiceResponse; @@ -257,4 +258,17 @@ public function getInvoice(string $invoiceUuid): PaymentGetInvoiceResponse return $response; } + + public function importInvoice(PaymentImportInvoiceRequest $request) + { + /** @var SuccessResponse $response */ + $response = $this->sendRequest( + RequestMethod::POST, + 'payment/invoice/import', + $request, + SuccessResponse::class + ); + + return $response; + } } From f7bfc4774fd25aaf1f063b80a67bd72c1713f5a4 Mon Sep 17 00:00:00 2001 From: Uryvskiy Dima Date: Tue, 8 Jul 2025 22:04:47 +0300 Subject: [PATCH 05/10] Fix getInvoice method --- .../Entity/Payments/ApiGetInvoiceResponse.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Model/Entity/Payments/ApiGetInvoiceResponse.php b/src/Model/Entity/Payments/ApiGetInvoiceResponse.php index 18410b0fd..2979eeb81 100644 --- a/src/Model/Entity/Payments/ApiGetInvoiceResponse.php +++ b/src/Model/Entity/Payments/ApiGetInvoiceResponse.php @@ -12,12 +12,12 @@ use RetailCrm\Api\Component\Serializer\Annotation as JMS; use RetailCrm\Api\Model\Response\SuccessResponse; -class ApiGetInvoiceResponse extends SuccessResponse +class ApiGetInvoiceResponse { /** - * @var \DateTime + * @var string * - * @JMS\Type("DateTime<'Y-m-d\TH:i:sP'>") + * @JMS\Type("string") * @JMS\SerializedName("createdAt") */ public $createdAt; @@ -135,17 +135,17 @@ class ApiGetInvoiceResponse extends SuccessResponse public $errorMsg; /** - * @var \DateTime + * @var string * - * @JMS\Type("DateTime<'Y-m-d\TH:i:sP'>") + * @JMS\Type("string") * @JMS\SerializedName("paidAt") */ public $paidAt; /** - * @var \DateTime + * @var string * - * @JMS\Type("DateTime<'Y-m-d\TH:i:sP'>") + * @JMS\Type("string") * @JMS\SerializedName("expiredAt") */ public $expiredAt; From 96fe0077a6e26cf8cba745610d5dd677e6d1e4f3 Mon Sep 17 00:00:00 2001 From: Uryvskiy Dima Date: Tue, 8 Jul 2025 22:59:05 +0300 Subject: [PATCH 06/10] Fix importInvoice --- .../Payments/ApiImportInvoiceResponse.php | 29 +++++++++ .../Payments/PaymentImportInvoiceResponse.php | 30 ++++++++++ src/ResourceGroup/Payments.php | 60 ++++++++++++++++++- 3 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 src/Model/Entity/Payments/ApiImportInvoiceResponse.php create mode 100644 src/Model/Response/Payments/PaymentImportInvoiceResponse.php diff --git a/src/Model/Entity/Payments/ApiImportInvoiceResponse.php b/src/Model/Entity/Payments/ApiImportInvoiceResponse.php new file mode 100644 index 000000000..7bc8a529a --- /dev/null +++ b/src/Model/Entity/Payments/ApiImportInvoiceResponse.php @@ -0,0 +1,29 @@ +paymentId = 979; + * $invoice->externalId = '979'; + * $invoice->status = 'succeeded'; + * $invoice->amount = 6697.0; + * $invoice->currency = 'RUB'; + * $invoice->createdAt = '2025-07-08 00:00:00'; + * $invoice->paidAt = '2025-07-08 00:10:00'; + * + * $request->invoice = $invoice; + * + * try { + * $response = $client->payments->importInvoice($request); + * } catch (ApiExceptionInterface $exception) { + * echo sprintf( + * 'Error from RetailCRM API (status code: %d): %s', + * $exception->getStatusCode(), + * $exception->getMessage() + * ); + * + * if (count($exception->getErrorResponse()->errors) > 0) { + * echo PHP_EOL . 'Errors: ' . implode(', ', $exception->getErrorResponse()->errors); + * } + * } + * ``` + * + * @param \RetailCrm\Api\Model\Request\Payments\PaymentImportInvoiceRequest $request + * + * @return \RetailCrm\Api\Model\Response\Payments\PaymentImportInvoiceResponse + * @throws \RetailCrm\Api\Interfaces\ApiExceptionInterface + * @throws \RetailCrm\Api\Interfaces\ClientExceptionInterface + * @throws \RetailCrm\Api\Exception\Api\AccountDoesNotExistException + * @throws \RetailCrm\Api\Exception\Api\ApiErrorException + * @throws \RetailCrm\Api\Exception\Api\MissingCredentialsException + * @throws \RetailCrm\Api\Exception\Api\MissingParameterException + * @throws \RetailCrm\Api\Exception\Api\ValidationException + * @throws \RetailCrm\Api\Exception\Client\HandlerException + * @throws \RetailCrm\Api\Exception\Client\HttpClientException + */ + public function importInvoice(PaymentImportInvoiceRequest $request): PaymentImportInvoiceResponse { - /** @var SuccessResponse $response */ + /** @var PaymentImportInvoiceResponse $response */ $response = $this->sendRequest( RequestMethod::POST, 'payment/invoice/import', $request, - SuccessResponse::class + PaymentImportInvoiceResponse::class ); return $response; From 577155aa784a9bbbe2cb59986bb126fe8fa49154 Mon Sep 17 00:00:00 2001 From: Uryvskiy Dima Date: Tue, 8 Jul 2025 23:09:12 +0300 Subject: [PATCH 07/10] Fix importInvoice --- .../ApiImportInvoicePaymentRefund.php | 45 +++++++++++++++++++ .../Payments/ApiImportInvoiceRequest.php | 4 +- src/ResourceGroup/Payments.php | 1 + 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/Model/Entity/Payments/ApiImportInvoicePaymentRefund.php diff --git a/src/Model/Entity/Payments/ApiImportInvoicePaymentRefund.php b/src/Model/Entity/Payments/ApiImportInvoicePaymentRefund.php new file mode 100644 index 000000000..941da6aee --- /dev/null +++ b/src/Model/Entity/Payments/ApiImportInvoicePaymentRefund.php @@ -0,0 +1,45 @@ +") + * @JMS\Type("array") * @JMS\SerializedName("refunds") */ public $refunds; diff --git a/src/ResourceGroup/Payments.php b/src/ResourceGroup/Payments.php index fd9860cfe..28ba2a12b 100644 --- a/src/ResourceGroup/Payments.php +++ b/src/ResourceGroup/Payments.php @@ -282,6 +282,7 @@ public function getInvoice(string $invoiceUuid): PaymentGetInvoiceResponse * $invoice->currency = 'RUB'; * $invoice->createdAt = '2025-07-08 00:00:00'; * $invoice->paidAt = '2025-07-08 00:10:00'; + * $invoice->refundable = true; * * $request->invoice = $invoice; * From a690b86466bf335d4084aa44febca2fb8d95b926 Mon Sep 17 00:00:00 2001 From: Uryvskiy Dima Date: Tue, 8 Jul 2025 23:13:18 +0300 Subject: [PATCH 08/10] fix test --- tests/src/ResourceGroup/PaymentsTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/src/ResourceGroup/PaymentsTest.php b/tests/src/ResourceGroup/PaymentsTest.php index 38cbaebe5..f40b4d500 100644 --- a/tests/src/ResourceGroup/PaymentsTest.php +++ b/tests/src/ResourceGroup/PaymentsTest.php @@ -124,12 +124,12 @@ public function testGetInvoice(): void } EOF; - $mock = static::createApiMockBuilder('payment/invoice'); + $mock = static::createApiMockBuilder('payment/invoice/7684160f-5ebe-4787-b031-1fc9e659f123'); $mock->matchMethod(RequestMethod::GET) ->reply() ->withBody($json); - $client = TestClientFactory::createClient($mock->getClient()); + $client = TestClientFactory::createClient($mock->getClient()); $response = $client->payments->getInvoice('7684160f-5ebe-4787-b031-1fc9e659f123'); self::assertModelEqualsToResponse($json, $response); From 30a7ee1d098b9dd768a24b0faa9c7b3d94b768b7 Mon Sep 17 00:00:00 2001 From: Uryvskiy Dima Date: Tue, 8 Jul 2025 23:24:18 +0300 Subject: [PATCH 09/10] fix test --- src/ResourceGroup/Payments.php | 5 +-- tests/src/ResourceGroup/PaymentsTest.php | 42 ++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/ResourceGroup/Payments.php b/src/ResourceGroup/Payments.php index 28ba2a12b..685d987f7 100644 --- a/src/ResourceGroup/Payments.php +++ b/src/ResourceGroup/Payments.php @@ -272,7 +272,6 @@ public function getInvoice(string $invoiceUuid): PaymentGetInvoiceResponse * * $client = SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey'); * - * $request = new PaymentImportInvoiceRequest(); * $invoice = new ApiImportInvoiceRequest(); * * $invoice->paymentId = 979; @@ -284,10 +283,8 @@ public function getInvoice(string $invoiceUuid): PaymentGetInvoiceResponse * $invoice->paidAt = '2025-07-08 00:10:00'; * $invoice->refundable = true; * - * $request->invoice = $invoice; - * * try { - * $response = $client->payments->importInvoice($request); + * $response = $client->payments->importInvoice(new PaymentImportInvoiceRequest($invoice)); * } catch (ApiExceptionInterface $exception) { * echo sprintf( * 'Error from RetailCRM API (status code: %d): %s', diff --git a/tests/src/ResourceGroup/PaymentsTest.php b/tests/src/ResourceGroup/PaymentsTest.php index f40b4d500..a974e16ee 100644 --- a/tests/src/ResourceGroup/PaymentsTest.php +++ b/tests/src/ResourceGroup/PaymentsTest.php @@ -13,9 +13,11 @@ use RetailCrm\Api\Enum\RequestMethod; use RetailCrm\Api\Model\Entity\Payments\ApiCheckRequest; use RetailCrm\Api\Model\Entity\Payments\ApiCreateInvoiceRequest; +use RetailCrm\Api\Model\Entity\Payments\ApiImportInvoiceRequest; use RetailCrm\Api\Model\Entity\Payments\ApiUpdateInvoiceRequest; use RetailCrm\Api\Model\Request\Payments\PaymentCheckRequest; use RetailCrm\Api\Model\Request\Payments\PaymentCreateInvoiceRequest; +use RetailCrm\Api\Model\Request\Payments\PaymentImportInvoiceRequest; use RetailCrm\Api\Model\Request\Payments\PaymentUpdateInvoiceRequest; use RetailCrm\TestUtils\Factory\TestClientFactory; use RetailCrm\TestUtils\TestCase\AbstractApiResourceGroupTestCase; @@ -119,8 +121,7 @@ public function testGetInvoice(): void { $json = <<<'EOF' { - "success": false, - "errorMsg": "Not found" + "success": false } EOF; @@ -134,4 +135,41 @@ public function testGetInvoice(): void self::assertModelEqualsToResponse($json, $response); } + + public function testImportInvoice(): void + { + $json = <<<'EOF' +{ + "success": true, + "invoice": { + "invoiceUuid": "7684160f-5ebe-4787-b031-1fc9e659f123" + } +} +EOF; + + $request = new PaymentImportInvoiceRequest(); + $invoice = new ApiImportInvoiceRequest(); + + $invoice->paymentId = 979; + $invoice->externalId = '979'; + $invoice->status = 'succeeded'; + $invoice->amount = 6697.0; + $invoice->currency = 'RUB'; + $invoice->createdAt = '2025-07-08 00:00:00'; + $invoice->paidAt = '2025-07-08 00:10:00'; + $invoice->refundable = true; + + $request->invoice = $invoice; + + $mock = static::createApiMockBuilder('payment/invoice/import'); + $mock->matchMethod(RequestMethod::POST) + ->matchBody(static::encodeForm($request)) + ->reply() + ->withBody($json); + + $client = TestClientFactory::createClient($mock->getClient()); + $response = $client->payments->importInvoice($request); + + self::assertModelEqualsToResponse($json, $response); + } } From de2a907bdd3aaafef51f90c14123d74fd48d4744 Mon Sep 17 00:00:00 2001 From: Uryvskiy Dima Date: Wed, 9 Jul 2025 09:15:35 +0300 Subject: [PATCH 10/10] add gitkeep --- models/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 models/.gitkeep diff --git a/models/.gitkeep b/models/.gitkeep new file mode 100644 index 000000000..e69de29bb