Skip to content

Commit

Permalink
Merge pull request #759 from mollie/v3-without-dedicated-payloads-and…
Browse files Browse the repository at this point in the history
…-queries

V3 without dedicated payloads and queries
  • Loading branch information
Naoray authored Feb 5, 2025
2 parents 4065ae1 + dc8b59c commit e32e1a2
Show file tree
Hide file tree
Showing 358 changed files with 6,671 additions and 4,426 deletions.
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

0 comments on commit e32e1a2

Please sign in to comment.