Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V3 without dedicated payloads and queries #759

Merged
merged 18 commits into from
Feb 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion UPGRADING.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ $client->payments->page();
Two new collection methods were added which can be used to simplify interacting with collection resources.

- `contains(callable $callback): bool`
- `filter(callable $callback): static`
- `filter(callable $callback): self`

### Testmode is automatically removed..
..If an API key is used as authentication.
Expand Down
6 changes: 3 additions & 3 deletions examples/captures/create-capture.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
* How to prepare a new payment with the Mollie API.
*/

use Mollie\Api\Http\Data\CreatePaymentCapturePayload;
use Mollie\Api\Http\Data\Money;
use Mollie\Api\Http\Requests\CreatePaymentCaptureRequest;

Expand All @@ -22,10 +21,11 @@
* description Description of the capture.
* metadata Custom metadata that is stored with the payment.
*/
$response = $mollie->send(new CreatePaymentCaptureRequest('tr_WDqYK6vllg', new CreatePaymentCapturePayload(
$response = $mollie->send(new CreatePaymentCaptureRequest(
'tr_WDqYK6vllg',
'Order #12345',
new Money('EUR', '5.00')
)));
));

$capture = $response->toResource();

Expand Down
6 changes: 2 additions & 4 deletions examples/client-links/create-client-link.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
/*
* How to create a new client link in the Mollie API.
*/

use Mollie\Api\Http\Data\CreateClientLinkPayload;
use Mollie\Api\Http\Data\Owner;
use Mollie\Api\Http\Data\OwnerAddress;
use Mollie\Api\Http\Requests\CreateClientLinkRequest;
Expand All @@ -29,13 +27,13 @@
*/
$response = $mollie
->send(
new CreateClientLinkRequest(new CreateClientLinkPayload(
new CreateClientLinkRequest(
new Owner('[email protected]', 'foo', 'bar', 'nl_NL'),
'Foo Company',
new OwnerAddress('NL', 'Keizersgracht 313', '1016 EE', 'Amsterdam'),
'30204462',
'NL123456789B01',
))
)
);

$clientLink = $response->toResource();
Expand Down
24 changes: 10 additions & 14 deletions examples/customers/create-customer-first-payment.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@
* How to create a first payment to allow recurring payments later.
*/

use Mollie\Api\Factories\CreatePaymentPayloadFactory;
use Mollie\Api\Http\Data\Metadata;
use Mollie\Api\Http\Data\Money;
use Mollie\Api\Http\Requests\CreateCustomerPaymentRequest;
use Mollie\Api\Http\Requests\GetPaginatedCustomerRequest;
use Mollie\Api\Types\SequenceType;

try {
/*
Expand Down Expand Up @@ -40,19 +38,17 @@
*
* @See: https://docs.mollie.com/reference/v2/customers-api/create-customer-payment
*/
$payload = CreatePaymentPayloadFactory::new([
'description' => "First payment - Order #{$orderId}",
'amount' => new Money('EUR', '10.00'),
'redirectUrl' => "{$protocol}://{$hostname}/payments/return.php?order_id={$orderId}",
'webhookUrl' => "{$protocol}://{$hostname}/payments/webhook.php",
'metadata' => new Metadata([
'order_id' => $orderId,
]),
'sequenceType' => SequenceType::FIRST,
])->create();

$payment = $mollie->send(
new CreateCustomerPaymentRequest($customer->id, $payload)
new CreateCustomerPaymentRequest(
$customer->id,
"First payment - Order #{$orderId}",
new Money('EUR', '10.00'),
"{$protocol}://{$hostname}/payments/return.php?order_id={$orderId}",
"{$protocol}://{$hostname}/payments/webhook.php",
new Metadata([
'order_id' => $orderId,
])
)
);

/*
Expand Down
8 changes: 7 additions & 1 deletion phpstan-baseline.neon
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,13 @@ parameters:
-
message: '#^Unsafe usage of new static\(\)\.$#'
identifier: new.static
count: 4
count: 1
path: src/Factories/Factory.php

-
message: '#^Unsafe usage of new static\(\)\.$#'
identifier: new.static
count: 5
path: src/Http/Data/DataCollection.php

-
Expand Down
43 changes: 24 additions & 19 deletions phpunit.xml
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
colors="true"
bootstrap="./vendor/autoload.php"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
convertDeprecationsToExceptions="true"
>
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">src/</directory>
</include>
</coverage>
<php>
<ini name="display_errors" value="stderr"/>
<ini name="error_log" value="/dev/null"/>
</php>
<testsuite name="Unit tests">
<directory>tests/</directory>
</testsuite>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
verbose="true">
<testsuites>
<testsuite name="Mollie API Test Suite">
<directory>tests</directory>
</testsuite>
</testsuites>
<coverage>
<include>
<directory suffix=".php">src</directory>
</include>
<exclude>
<directory>vendor</directory>
<directory>tests</directory>
</exclude>
</coverage>
<php>
<ini name="error_reporting" value="-1"/>
<ini name="display_errors" value="On"/>
<ini name="display_startup_errors" value="On"/>
</php>
</phpunit>
2 changes: 1 addition & 1 deletion src/CompatibilityChecker.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public function checkCompatibility()
{
if (! $this->satisfiesPhpVersion()) {
throw new IncompatiblePlatformException(
'The client requires PHP version >= ' . self::MIN_PHP_VERSION . ', you have ' . PHP_VERSION . '.',
'The client requires PHP version >= '.self::MIN_PHP_VERSION.', you have '.PHP_VERSION.'.',
IncompatiblePlatformException::INCOMPATIBLE_PHP_VERSION
);
}
Expand Down
5 changes: 4 additions & 1 deletion src/Contracts/Connector.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@

interface Connector extends Authenticatable, IdempotencyContract, SupportsDebuggingContract, Testable
{
public function send(Request $request): ?object;
/**
* @return mixed
*/
public function send(Request $request);

public function resolveBaseUrl(): string;

Expand Down
13 changes: 0 additions & 13 deletions src/Contracts/Factory.php

This file was deleted.

9 changes: 3 additions & 6 deletions src/Contracts/Repository.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,15 @@ interface Repository
/**
* Set the entire repository data
*
* @param mixed $data Array for array repositories, mixed for payload repositories
* @param mixed $data Array for array repositories, mixed for payload repositories
* @return static
*/
public function set($data);

/**
* Get a value by key
*
* @param string $key
* @param mixed $default
* @param mixed $default
* @return mixed
*/
public function get(string $key, $default = null);
Expand All @@ -29,16 +28,14 @@ public function has(string $key): bool;
/**
* Add a value to the repository
*
* @param string $key
* @param mixed $value
* @param mixed $value
* @return static
*/
public function add(string $key, $value);

/**
* Merge data into the repository
*
* @param array ...$data
* @return static
*/
public function merge(array ...$data);
Expand Down
2 changes: 1 addition & 1 deletion src/Contracts/SupportsTestmodeInPayload.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Mollie\Api\Contracts;

interface SupportsTestmodeInPayload extends SupportsTestmode, HasPayload
interface SupportsTestmodeInPayload extends HasPayload, SupportsTestmode
{
//
}
45 changes: 28 additions & 17 deletions src/EndpointCollection/BalanceEndpointCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

namespace Mollie\Api\EndpointCollection;

use Mollie\Api\Exceptions\ApiException;
use Mollie\Api\Factories\GetPaginatedBalanceQueryFactory;
use Mollie\Api\Exceptions\RequestException;
use Mollie\Api\Factories\SortablePaginatedQueryFactory;
use Mollie\Api\Http\Requests\GetBalanceRequest;
use Mollie\Api\Http\Requests\GetPaginatedBalanceRequest;
use Mollie\Api\Resources\Balance;
Expand All @@ -20,13 +20,12 @@ class BalanceEndpointCollection extends EndpointCollection
*
* @param bool|array $testmode
*
* @throws ApiException
* @throws RequestException
*/
public function get(string $id, $testmode = false): Balance
{
$testmode = Utility::extractBool($testmode, 'testmode', false);

/** @var Balance */
return $this->send((new GetBalanceRequest($id))->test($testmode));
}

Expand All @@ -37,7 +36,7 @@ public function get(string $id, $testmode = false): Balance
*
* @param bool|array $testmode
*
* @throws ApiException
* @throws RequestException
*/
public function primary($testmode = false): Balance
{
Expand All @@ -52,13 +51,19 @@ public function page(?string $from = null, ?int $limit = null, array $filters =
{
$testmode = Utility::extractBool($filters, 'testmode', false);

$query = GetPaginatedBalanceQueryFactory::new([
'from' => $from,
'limit' => $limit,
'filters' => $filters,
])->create();
$query = SortablePaginatedQueryFactory::new()
->withQuery([
'from' => $from,
'limit' => $limit,
'filters' => $filters,
])
->create();

return $this->send((new GetPaginatedBalanceRequest($query))->test($testmode));
return $this->send((new GetPaginatedBalanceRequest(
$query->from,
$query->limit,
$query->sort,
))->test($testmode));
}

/**
Expand All @@ -71,14 +76,20 @@ public function iterator(?string $from = null, ?int $limit = null, array $filter
{
$testmode = Utility::extractBool($filters, 'testmode', false);

$query = GetPaginatedBalanceQueryFactory::new([
'from' => $from,
'limit' => $limit,
'filters' => $filters,
])->create();
$query = SortablePaginatedQueryFactory::new()
->withQuery([
'from' => $from,
'limit' => $limit,
'filters' => $filters,
])
->create();

return $this->send(
(new GetPaginatedBalanceRequest($query))
(new GetPaginatedBalanceRequest(
$query->from,
$query->limit,
$query->sort,
))
->useIterator()
->setIterationDirection($iterateBackwards)
->test($testmode)
Expand Down
27 changes: 11 additions & 16 deletions src/EndpointCollection/BalanceReportEndpointCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

namespace Mollie\Api\EndpointCollection;

use Mollie\Api\Factories\GetBalanceReportQueryFactory;
use Mollie\Api\Http\Data\GetBalanceReportQuery;
use Mollie\Api\Http\Requests\GetBalanceReportRequest;
use Mollie\Api\Factories\GetBalanceReportRequestFactory;
use Mollie\Api\Resources\Balance;
use Mollie\Api\Resources\BalanceReport;
use Mollie\Api\Utils\Utility;
Expand All @@ -14,41 +12,38 @@ class BalanceReportEndpointCollection extends EndpointCollection
/**
* Retrieve a balance report for the provided balance id and parameters.
*
* @param array|GetBalanceReportQuery $query
*
* @throws \Mollie\Api\Exceptions\ApiException
* @throws \Mollie\Api\Exceptions\RequestException
*/
public function getForId(string $balanceId, $query = []): ?BalanceReport
public function getForId(string $balanceId, array $query = []): ?BalanceReport
{
$testmode = Utility::extractBool($query, 'testmode', false);

$query = GetBalanceReportQueryFactory::new($query)
$request = GetBalanceReportRequestFactory::new($balanceId)
->withQuery($query)
->create();

/** @var BalanceReport */
return $this->send((new GetBalanceReportRequest($balanceId, $query))->test($testmode));
return $this->send($request->test($testmode));
}

/**
* Retrieve the primary balance.
* This is the balance of your account’s primary currency, where all payments are settled to by default.
*
* @param array|GetBalanceReportQuery $query
*
* @throws \Mollie\Api\Exceptions\ApiException
* @throws \Mollie\Api\Exceptions\RequestException
*/
public function getForPrimary($query = []): BalanceReport
public function getForPrimary(array $query = []): ?BalanceReport
{
return $this->getForId('primary', $query);
}

/**
* Retrieve a balance report for the provided balance resource and parameters.
*
* @throws \Mollie\Api\Exceptions\ApiException
* @throws \Mollie\Api\Exceptions\RequestException
*/
public function getFor(Balance $balance, array $parameters = []): BalanceReport
public function getFor(Balance $balance, array $query = []): ?BalanceReport
{
return $this->getForId($balance->id, $parameters);
return $this->getForId($balance->id, $query);
}
}
Loading