From f2f9fcfd1bdac1fcf389b574eff63ad9638f5f3c Mon Sep 17 00:00:00 2001 From: Krishan Koenig Date: Tue, 26 Nov 2024 20:41:47 +0100 Subject: [PATCH] wip --- examples/captures/create-capture.php | 1 + examples/captures/get-capture.php | 1 + examples/captures/list-captures.php | 1 + examples/client-links/create-client-link.php | 1 + .../create-customer-first-payment.php | 1 + .../customers/create-customer-payment.php | 1 + .../create-customer-recurring-payment.php | 1 + examples/customers/create-customer.php | 1 + examples/customers/delete-customer.php | 1 + examples/customers/list-customer-payments.php | 1 + examples/customers/update-customer.php | 1 + examples/functions.php | 1 + examples/initialize.php | 1 + examples/invoices/list-invoices.php | 1 + examples/mandates/create-mandate.php | 1 + examples/mandates/list-mandates.php | 1 + examples/mandates/revoke-mandate.php | 1 + examples/pagination/backwards.php | 1 + examples/pagination/basic_usage.php | 1 + .../payment-links/create-payment-link.php | 1 + examples/payment-links/list-payment-links.php | 1 + .../payments/create-capturable-payment.php | 1 + examples/payments/create-ideal-payment.php | 1 + examples/payments/create-payment-oauth.php | 1 + examples/payments/create-payment.php | 1 + ...outed-payment-with-future-release-date.php | 1 + examples/payments/create-routed-payment.php | 1 + examples/payments/list-methods.php | 1 + examples/payments/list-payments.php | 1 + examples/payments/refund-payment.php | 1 + examples/payments/return.php | 1 + examples/payments/update-payment.php | 1 + examples/payments/webhook.php | 1 + examples/profiles/create-profile.php | 1 + examples/profiles/delete-profile.php | 1 + examples/profiles/list-profiles.php | 1 + examples/profiles/update-profile.php | 1 + examples/sessions/cancel-session.php | 1 + examples/sessions/create-session.php | 1 + examples/sessions/list-sessions.php | 1 + examples/sessions/update-session.php | 1 + examples/settlements/list-settlements.php | 1 + .../subscriptions/cancel-subscription.php | 1 + .../subscriptions/create-subscription.php | 1 + .../subscriptions/update-subscription.php | 1 + .../SingleResourceEndpointContract.php | 5 - .../CustomerEndpointCollection.php | 2 +- .../CustomerPaymentsEndpointCollection.php | 30 +++-- .../MandateEndpointCollection.php | 12 +- .../PaymentChargebackEndpointCollection.php | 2 +- .../PaymentRefundEndpointCollection.php | 4 +- .../ProfileEndpointCollection.php | 1 + .../SubscriptionPaymentEndpointCollection.php | 2 + src/Endpoints/RestEndpoint.php | 126 ------------------ src/Helpers.php | 1 - src/Http/Adapter/GuzzleMollieHttpAdapter.php | 4 +- src/Http/Adapter/PSR18MollieHttpAdapter.php | 4 +- src/Http/Middleware/Hydrate.php | 2 +- .../PendingRequest/AuthenticateRequest.php | 2 - src/Http/Request.php | 2 +- src/Http/Requests/CancelPaymentRequest.php | 2 +- .../Requests/CancelSubscriptionRequest.php | 2 +- .../Requests/CreateCustomerPaymentRequest.php | 36 ++--- src/Http/Requests/CreatePaymentRequest.php | 2 +- .../Requests/DeletePaymentLinkRequest.php | 2 +- .../GetAllPaginatedSubscriptionsRequest.php | 2 +- ...GetPaginatedPaymentLinkPaymentsRequest.php | 2 +- .../GetPaginatedPaymentLinksRequest.php | 2 +- .../GetPaginatedPaymentRefundsRequest.php | 4 +- ...etPaginatedSubscriptionPaymentsRequest.php | 2 +- .../GetPaginatedSubscriptionsRequest.php | 2 +- .../Requests/GetPaginatedTerminalsRequest.php | 2 +- src/Http/Requests/GetPaymentLinkRequest.php | 2 +- src/Http/Requests/GetSubscriptionRequest.php | 2 +- src/Http/Requests/GetTerminalRequest.php | 2 +- .../Requests/ResourceHydratableRequest.php | 2 +- .../Requests/UpdatePaymentLinkRequest.php | 2 +- src/Http/Response.php | 1 - src/MollieApiClient.php | 108 +++++++-------- src/Resources/Balance.php | 4 + src/Resources/BalanceTransaction.php | 4 + src/Resources/BaseResource.php | 2 + src/Resources/Capture.php | 4 + src/Resources/CursorCollection.php | 3 - src/Resources/Customer.php | 32 +++-- src/Resources/HasPresetOptions.php | 31 ----- src/Resources/Payment.php | 53 +++++--- src/Resources/Refund.php | 5 +- src/Resources/Session.php | 9 +- src/Traits/HasMode.php | 19 +++ src/Traits/InteractsWithResource.php | 20 --- ...Debuggable.php => IsDebuggableAdapter.php} | 2 +- src/Traits/ResolvesUri.php | 44 ------ 93 files changed, 253 insertions(+), 402 deletions(-) delete mode 100644 src/Contracts/SingleResourceEndpointContract.php delete mode 100644 src/Endpoints/RestEndpoint.php delete mode 100644 src/Resources/HasPresetOptions.php create mode 100644 src/Traits/HasMode.php delete mode 100644 src/Traits/InteractsWithResource.php rename src/Traits/{IsDebuggable.php => IsDebuggableAdapter.php} (97%) delete mode 100644 src/Traits/ResolvesUri.php diff --git a/examples/captures/create-capture.php b/examples/captures/create-capture.php index ba264366..2ccc3a5a 100644 --- a/examples/captures/create-capture.php +++ b/examples/captures/create-capture.php @@ -1,4 +1,5 @@ createForId($customer->id, $payload, $testmode); + return $this->createForId($customer->id, $payload, $query, $testmode); } /** * Create a subscription for a Customer ID * * @param string $customerId - * @param array| $payload + * @param array|CreatePaymentPayload $payload + * @param array|CreatePaymentQuery $query * * @throws ApiException */ - public function createForId($customerId, array $payload = []): Payment + public function createForId($customerId, $payload = [], $query = [], bool $testmode = false): Payment { - $testmode = Helpers::extractBool($payload, 'testmode', false); - $profileId = Arr::get($payload, 'profileId'); + if (! $payload instanceof CreatePaymentPayload) { + $testmode = Helpers::extractBool($payload, 'testmode', $testmode); + $payload = CreatePaymentPayloadFactory::new($payload) + ->create(); + } + + if (! $query instanceof CreatePaymentQuery) { + $query = CreatePaymentQuery::fromArray(Arr::wrap($query)); + } /** @var Payment */ - return $this->send((new CreateCustomerPaymentRequest($customerId, $profileId))->test($testmode)); + return $this->send((new CreateCustomerPaymentRequest($customerId, $payload, $query))->test($testmode)); } /** @@ -49,9 +59,9 @@ public function createForId($customerId, array $payload = []): Payment * * @throws ApiException */ - public function pageFor(Customer $customer, ?string $from = null, ?int $limit = null, array $parameters = []): PaymentCollection + public function pageFor(Customer $customer, ?string $from = null, ?int $limit = null, array $filters = []): PaymentCollection { - return $this->pageForId($customer->id, $from, $limit, $parameters); + return $this->pageForId($customer->id, $from, $limit, $filters); } /** diff --git a/src/EndpointCollection/MandateEndpointCollection.php b/src/EndpointCollection/MandateEndpointCollection.php index 4d754b4e..1314c54b 100644 --- a/src/EndpointCollection/MandateEndpointCollection.php +++ b/src/EndpointCollection/MandateEndpointCollection.php @@ -8,9 +8,9 @@ use Mollie\Api\Helpers; use Mollie\Api\Http\Payload\CreateMandatePayload; use Mollie\Api\Http\Requests\CreateMandateRequest; -use Mollie\Api\Http\Requests\RevokeMandateRequest; use Mollie\Api\Http\Requests\GetMandateRequest; use Mollie\Api\Http\Requests\GetPaginatedMandateRequest; +use Mollie\Api\Http\Requests\RevokeMandateRequest; use Mollie\Api\Resources\Customer; use Mollie\Api\Resources\LazyCollection; use Mollie\Api\Resources\Mandate; @@ -22,20 +22,18 @@ class MandateEndpointCollection extends EndpointCollection * Creates a mandate for a specific customer. * * @param array $payload - * @param array $filters * * @throws ApiException */ - public function createFor(Customer $customer, $payload = []): Mandate + public function createFor(Customer $customer, $payload = [], bool $testmode = false): Mandate { - return $this->createForId($customer->id, $payload); + return $this->createForId($customer->id, $payload, $testmode); } /** * Creates a mandate for a specific customer ID. * * @param array $payload - * @param array $filters * * @throws ApiException */ @@ -82,7 +80,7 @@ public function getForId(string $customerId, string $mandateId, $testmode = []): * * @throws ApiException */ - public function revokeFor(Customer $customer, string $mandateId, array $data = []): void + public function revokeFor(Customer $customer, string $mandateId, $data = []): void { $this->revokeForId($customer->id, $mandateId, $data); } @@ -94,7 +92,7 @@ public function revokeFor(Customer $customer, string $mandateId, array $data = [ * * @throws ApiException */ - public function revokeForId(string $customerId, string $mandateId, array $testmode = []): void + public function revokeForId(string $customerId, string $mandateId, $testmode = []): void { $testmode = Helpers::extractBool($testmode, 'testmode', false); diff --git a/src/EndpointCollection/PaymentChargebackEndpointCollection.php b/src/EndpointCollection/PaymentChargebackEndpointCollection.php index 8cd1b7e1..c2dd6870 100644 --- a/src/EndpointCollection/PaymentChargebackEndpointCollection.php +++ b/src/EndpointCollection/PaymentChargebackEndpointCollection.php @@ -107,7 +107,7 @@ public function iteratorForId( return $this->send( (new GetPaginatedPaymentChargebacksRequest($paymentId, $query)) - ->useIterator() + ->useIterator() ->setIterationDirection($iterateBackwards) ->test($testmode) ); diff --git a/src/EndpointCollection/PaymentRefundEndpointCollection.php b/src/EndpointCollection/PaymentRefundEndpointCollection.php index 13d03b15..9c509a23 100644 --- a/src/EndpointCollection/PaymentRefundEndpointCollection.php +++ b/src/EndpointCollection/PaymentRefundEndpointCollection.php @@ -54,9 +54,9 @@ public function createForId(string $paymentId, $payload = [], $testmode = []): R /** * @throws \Mollie\Api\Exceptions\ApiException */ - public function getFor(Payment $payment, string $refundId, array $parameters = []): Refund + public function getFor(Payment $payment, string $refundId, array $parameters = [], bool $testmode = false): Refund { - return $this->getForId($payment->id, $refundId, $parameters); + return $this->getForId($payment->id, $refundId, $parameters, $testmode); } /** diff --git a/src/EndpointCollection/ProfileEndpointCollection.php b/src/EndpointCollection/ProfileEndpointCollection.php index 39db2c17..cd4ba0e0 100644 --- a/src/EndpointCollection/ProfileEndpointCollection.php +++ b/src/EndpointCollection/ProfileEndpointCollection.php @@ -67,6 +67,7 @@ public function get(string $profileId, $testmode = []): Profile public function getCurrent($testmode = []): CurrentProfile { GetProfileRequest::$targetResourceClass = CurrentProfile::class; + /** @var CurrentProfile */ return $this->get('me', $testmode); } diff --git a/src/EndpointCollection/SubscriptionPaymentEndpointCollection.php b/src/EndpointCollection/SubscriptionPaymentEndpointCollection.php index a1055ed6..0c4a30fc 100644 --- a/src/EndpointCollection/SubscriptionPaymentEndpointCollection.php +++ b/src/EndpointCollection/SubscriptionPaymentEndpointCollection.php @@ -18,6 +18,7 @@ class SubscriptionPaymentEndpointCollection extends EndpointCollection * @param string|null $from The first payment ID you want to include in your list. * @param int|null $limit The maximum amount of results you want to retrieve per page. * @param bool|array $testmode + * * @throws ApiException */ public function pageFor(Subscription $subscription, ?string $from = null, ?int $limit = null, $testmode = []): PaymentCollection @@ -31,6 +32,7 @@ public function pageFor(Subscription $subscription, ?string $from = null, ?int $ * @param string|null $from The first payment ID you want to include in your list. * @param int|null $limit The maximum amount of results you want to retrieve per page. * @param bool|array $testmode + * * @throws ApiException */ public function pageForIds( diff --git a/src/Endpoints/RestEndpoint.php b/src/Endpoints/RestEndpoint.php deleted file mode 100644 index 7acf192b..00000000 --- a/src/Endpoints/RestEndpoint.php +++ /dev/null @@ -1,126 +0,0 @@ -client - ->send(new DynamicPostRequest( - $this->getResourcePath(), - static::getResourceClass(), - $body, - $filters - )) - ->toResource(); - } - - /** - * Sends a PATCH request to a single Mollie API object. - * - * - * @throws ApiException - */ - protected function updateResource(string $id, array $body = []): ?BaseResource - { - $id = urlencode($id); - - return $this - ->client - ->send(new DynamicPatchRequest( - $this->getPathToSingleResource($id), - static::getResourceClass(), - $body - )) - ->toResource(); - } - - /** - * Retrieves a single object from the REST API. - * - * @param string $id Id of the object to retrieve. - * - * @throws ApiException - */ - protected function readResource(string $id, array $filters): BaseResource - { - if (! $this instanceof SingleResourceEndpointContract && empty($id)) { - throw new ApiException('Invalid resource id.'); - } - - return $this - ->client - ->send(new DynamicGetRequest( - $this->getPathToSingleResource($id), - static::getResourceClass(), - $filters - )) - ->toResource(); - } - - /** - * Sends a DELETE request to a single Mollie API object. - * - * - * @throws ApiException - */ - protected function deleteResource(string $id, array $body = []): ?BaseResource - { - if (empty($id)) { - throw new ApiException('Invalid resource id.'); - } - - return $this - ->client - ->send(new DynamicDeleteRequest( - $this->getPathToSingleResource($id), - static::getResourceClass(), - null, - $body - )) - ->toResource(); - } - - protected function guardAgainstInvalidId(string $id): void - { - if (empty(static::$resourceIdPrefix)) { - throw new RuntimeException('Resource ID prefix is not set.'); - } - - if (empty($id) || strpos($id, static::$resourceIdPrefix) !== 0) { - $resourceType = $this->getResourceType(); - - throw new ApiException("Invalid {$resourceType} ID: '{$id}'. A resource ID should start with '".static::$resourceIdPrefix."'."); - } - } - - public function getResourceType(): string - { - $classBasename = basename(str_replace('\\', '/', static::getResourceClass())); - - return strtolower($classBasename); - } -} diff --git a/src/Helpers.php b/src/Helpers.php index e2524a19..d2379a80 100644 --- a/src/Helpers.php +++ b/src/Helpers.php @@ -73,7 +73,6 @@ public static function filterByProperties($class, array $array): array static::getProperties($class) ); - // Filter out the properties that are not part of the CreatePaymentData object return array_filter( $array, fn ($key) => ! in_array($key, $properties, true), diff --git a/src/Http/Adapter/GuzzleMollieHttpAdapter.php b/src/Http/Adapter/GuzzleMollieHttpAdapter.php index 3c58bb6a..c9eba669 100644 --- a/src/Http/Adapter/GuzzleMollieHttpAdapter.php +++ b/src/Http/Adapter/GuzzleMollieHttpAdapter.php @@ -17,14 +17,14 @@ use Mollie\Api\Helpers\Factories; use Mollie\Api\Http\PendingRequest; use Mollie\Api\Http\Response; -use Mollie\Api\Traits\IsDebuggable; +use Mollie\Api\Traits\IsDebuggableAdapter; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Throwable; final class GuzzleMollieHttpAdapter implements HttpAdapterContract, SupportsDebuggingContract { - use IsDebuggable; + use IsDebuggableAdapter; /** * Default response timeout (in seconds). diff --git a/src/Http/Adapter/PSR18MollieHttpAdapter.php b/src/Http/Adapter/PSR18MollieHttpAdapter.php index 377abf54..09dc2322 100644 --- a/src/Http/Adapter/PSR18MollieHttpAdapter.php +++ b/src/Http/Adapter/PSR18MollieHttpAdapter.php @@ -8,7 +8,7 @@ use Mollie\Api\Helpers\Factories; use Mollie\Api\Http\PendingRequest; use Mollie\Api\Http\Response; -use Mollie\Api\Traits\IsDebuggable; +use Mollie\Api\Traits\IsDebuggableAdapter; use Psr\Http\Client\ClientExceptionInterface; use Psr\Http\Client\ClientInterface; use Psr\Http\Message\RequestFactoryInterface; @@ -18,7 +18,7 @@ final class PSR18MollieHttpAdapter implements HttpAdapterContract, SupportsDebuggingContract { - use IsDebuggable; + use IsDebuggableAdapter; private ClientInterface $httpClient; diff --git a/src/Http/Middleware/Hydrate.php b/src/Http/Middleware/Hydrate.php index 152981a5..348b382a 100644 --- a/src/Http/Middleware/Hydrate.php +++ b/src/Http/Middleware/Hydrate.php @@ -12,7 +12,7 @@ class Hydrate public function __invoke(Response $response) { - if (! $response->getRequest()::$shouldAutoHydrate || !$response->getRequest() instanceof ResourceHydratableRequest) { + if (! $response->getRequest()::$shouldAutoHydrate || ! $response->getRequest() instanceof ResourceHydratableRequest) { return $response; } diff --git a/src/Http/PendingRequest/AuthenticateRequest.php b/src/Http/PendingRequest/AuthenticateRequest.php index 2fd310f5..bc2be737 100644 --- a/src/Http/PendingRequest/AuthenticateRequest.php +++ b/src/Http/PendingRequest/AuthenticateRequest.php @@ -2,9 +2,7 @@ namespace Mollie\Api\Http\PendingRequest; -use Mollie\Api\Contracts\HasPayload; use Mollie\Api\Exceptions\ApiException; -use Mollie\Api\Http\Auth\ApiKeyAuthenticator; use Mollie\Api\Http\PendingRequest; class AuthenticateRequest diff --git a/src/Http/Request.php b/src/Http/Request.php index 7549b13a..15bfda7b 100644 --- a/src/Http/Request.php +++ b/src/Http/Request.php @@ -9,8 +9,8 @@ abstract class Request { - use HasMiddleware; use HandlesTestmode; + use HasMiddleware; use HasRequestProperties; /** diff --git a/src/Http/Requests/CancelPaymentRequest.php b/src/Http/Requests/CancelPaymentRequest.php index 8b87d51f..6ee73d4d 100644 --- a/src/Http/Requests/CancelPaymentRequest.php +++ b/src/Http/Requests/CancelPaymentRequest.php @@ -2,9 +2,9 @@ namespace Mollie\Api\Http\Requests; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Resources\Payment; use Mollie\Api\Types\Method; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class CancelPaymentRequest extends ResourceHydratableRequest implements SupportsTestmodeInQuery { diff --git a/src/Http/Requests/CancelSubscriptionRequest.php b/src/Http/Requests/CancelSubscriptionRequest.php index 0f2fdc52..0d76f7ad 100644 --- a/src/Http/Requests/CancelSubscriptionRequest.php +++ b/src/Http/Requests/CancelSubscriptionRequest.php @@ -2,9 +2,9 @@ namespace Mollie\Api\Http\Requests; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Resources\Subscription; use Mollie\Api\Types\Method; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class CancelSubscriptionRequest extends ResourceHydratableRequest implements SupportsTestmodeInQuery { diff --git a/src/Http/Requests/CreateCustomerPaymentRequest.php b/src/Http/Requests/CreateCustomerPaymentRequest.php index b742fa96..a6f16fbd 100644 --- a/src/Http/Requests/CreateCustomerPaymentRequest.php +++ b/src/Http/Requests/CreateCustomerPaymentRequest.php @@ -4,39 +4,21 @@ use Mollie\Api\Contracts\HasPayload; use Mollie\Api\Contracts\SupportsTestmodeInPayload; -use Mollie\Api\Resources\Payment; -use Mollie\Api\Traits\HasJsonPayload; -use Mollie\Api\Types\Method; +use Mollie\Api\Http\Payload\CreatePaymentPayload; +use Mollie\Api\Http\Query\CreatePaymentQuery; -class CreateCustomerPaymentRequest extends ResourceHydratableRequest implements HasPayload, SupportsTestmodeInPayload +class CreateCustomerPaymentRequest extends CreatePaymentRequest implements HasPayload, SupportsTestmodeInPayload { - use HasJsonPayload; - - /** - * Define the HTTP method. - */ - protected static string $method = Method::POST; - - /** - * The resource class the request should be casted to. - */ - public static string $targetResourceClass = Payment::class; - protected string $customerId; - protected string $profileId; + public function __construct( + string $customerId, + CreatePaymentPayload $payload, + ?CreatePaymentQuery $query = null, + ) { + parent::__construct($payload, $query); - public function __construct(string $customerId, ?string $profileId = null) - { $this->customerId = $customerId; - $this->profileId = $profileId; - } - - protected function defaultPayload(): array - { - return [ - 'profileId' => $this->profileId, - ]; } public function resolveResourcePath(): string diff --git a/src/Http/Requests/CreatePaymentRequest.php b/src/Http/Requests/CreatePaymentRequest.php index 8cb84a9e..6f434ccd 100644 --- a/src/Http/Requests/CreatePaymentRequest.php +++ b/src/Http/Requests/CreatePaymentRequest.php @@ -3,12 +3,12 @@ namespace Mollie\Api\Http\Requests; use Mollie\Api\Contracts\HasPayload; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Http\Payload\CreatePaymentPayload; use Mollie\Api\Http\Query\CreatePaymentQuery; use Mollie\Api\Resources\Payment; use Mollie\Api\Traits\HasJsonPayload; use Mollie\Api\Types\Method; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class CreatePaymentRequest extends ResourceHydratableRequest implements HasPayload, SupportsTestmodeInQuery { diff --git a/src/Http/Requests/DeletePaymentLinkRequest.php b/src/Http/Requests/DeletePaymentLinkRequest.php index 5ae59494..4ddcc057 100644 --- a/src/Http/Requests/DeletePaymentLinkRequest.php +++ b/src/Http/Requests/DeletePaymentLinkRequest.php @@ -2,8 +2,8 @@ namespace Mollie\Api\Http\Requests; -use Mollie\Api\Types\Method; use Mollie\Api\Contracts\SupportsTestmodeInQuery; +use Mollie\Api\Types\Method; class DeletePaymentLinkRequest extends SimpleRequest implements SupportsTestmodeInQuery { diff --git a/src/Http/Requests/GetAllPaginatedSubscriptionsRequest.php b/src/Http/Requests/GetAllPaginatedSubscriptionsRequest.php index 6bc1b615..0457a1b7 100644 --- a/src/Http/Requests/GetAllPaginatedSubscriptionsRequest.php +++ b/src/Http/Requests/GetAllPaginatedSubscriptionsRequest.php @@ -3,9 +3,9 @@ namespace Mollie\Api\Http\Requests; use Mollie\Api\Contracts\IsIteratable; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Resources\SubscriptionCollection; use Mollie\Api\Traits\IsIteratableRequest; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class GetAllPaginatedSubscriptionsRequest extends PaginatedRequest implements IsIteratable, SupportsTestmodeInQuery { diff --git a/src/Http/Requests/GetPaginatedPaymentLinkPaymentsRequest.php b/src/Http/Requests/GetPaginatedPaymentLinkPaymentsRequest.php index 4e9c104a..6f2f05a4 100644 --- a/src/Http/Requests/GetPaginatedPaymentLinkPaymentsRequest.php +++ b/src/Http/Requests/GetPaginatedPaymentLinkPaymentsRequest.php @@ -3,10 +3,10 @@ namespace Mollie\Api\Http\Requests; use Mollie\Api\Contracts\IsIteratable; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Http\Query\SortablePaginatedQuery; use Mollie\Api\Resources\PaymentCollection; use Mollie\Api\Traits\IsIteratableRequest; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class GetPaginatedPaymentLinkPaymentsRequest extends PaginatedRequest implements IsIteratable, SupportsTestmodeInQuery { diff --git a/src/Http/Requests/GetPaginatedPaymentLinksRequest.php b/src/Http/Requests/GetPaginatedPaymentLinksRequest.php index fb97a1be..3f112093 100644 --- a/src/Http/Requests/GetPaginatedPaymentLinksRequest.php +++ b/src/Http/Requests/GetPaginatedPaymentLinksRequest.php @@ -3,10 +3,10 @@ namespace Mollie\Api\Http\Requests; use Mollie\Api\Contracts\IsIteratable; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Resources\PaymentLinkCollection; use Mollie\Api\Traits\IsIteratableRequest; use Mollie\Api\Types\Method; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class GetPaginatedPaymentLinksRequest extends PaginatedRequest implements IsIteratable, SupportsTestmodeInQuery { diff --git a/src/Http/Requests/GetPaginatedPaymentRefundsRequest.php b/src/Http/Requests/GetPaginatedPaymentRefundsRequest.php index acc63e6c..06291d7f 100644 --- a/src/Http/Requests/GetPaginatedPaymentRefundsRequest.php +++ b/src/Http/Requests/GetPaginatedPaymentRefundsRequest.php @@ -3,10 +3,10 @@ namespace Mollie\Api\Http\Requests; use Mollie\Api\Contracts\IsIteratable; -use Mollie\Api\Http\Query\GetPaginatedPaymentRefundQuery; -use Mollie\Api\Traits\IsIteratableRequest; use Mollie\Api\Contracts\SupportsTestmodeInQuery; +use Mollie\Api\Http\Query\GetPaginatedPaymentRefundQuery; use Mollie\Api\Resources\RefundCollection; +use Mollie\Api\Traits\IsIteratableRequest; class GetPaginatedPaymentRefundsRequest extends PaginatedRequest implements IsIteratable, SupportsTestmodeInQuery { diff --git a/src/Http/Requests/GetPaginatedSubscriptionPaymentsRequest.php b/src/Http/Requests/GetPaginatedSubscriptionPaymentsRequest.php index dde3e24c..e90b3e57 100644 --- a/src/Http/Requests/GetPaginatedSubscriptionPaymentsRequest.php +++ b/src/Http/Requests/GetPaginatedSubscriptionPaymentsRequest.php @@ -3,10 +3,10 @@ namespace Mollie\Api\Http\Requests; use Mollie\Api\Contracts\IsIteratable; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Http\Query\PaginatedQuery; use Mollie\Api\Resources\PaymentCollection; use Mollie\Api\Traits\IsIteratableRequest; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class GetPaginatedSubscriptionPaymentsRequest extends PaginatedRequest implements IsIteratable, SupportsTestmodeInQuery { diff --git a/src/Http/Requests/GetPaginatedSubscriptionsRequest.php b/src/Http/Requests/GetPaginatedSubscriptionsRequest.php index 02e9d349..62f027d3 100644 --- a/src/Http/Requests/GetPaginatedSubscriptionsRequest.php +++ b/src/Http/Requests/GetPaginatedSubscriptionsRequest.php @@ -3,10 +3,10 @@ namespace Mollie\Api\Http\Requests; use Mollie\Api\Contracts\IsIteratable; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Http\Query\PaginatedQuery; use Mollie\Api\Resources\SubscriptionCollection; use Mollie\Api\Traits\IsIteratableRequest; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class GetPaginatedSubscriptionsRequest extends PaginatedRequest implements IsIteratable, SupportsTestmodeInQuery { diff --git a/src/Http/Requests/GetPaginatedTerminalsRequest.php b/src/Http/Requests/GetPaginatedTerminalsRequest.php index a8c4730d..321d592a 100644 --- a/src/Http/Requests/GetPaginatedTerminalsRequest.php +++ b/src/Http/Requests/GetPaginatedTerminalsRequest.php @@ -3,9 +3,9 @@ namespace Mollie\Api\Http\Requests; use Mollie\Api\Contracts\IsIteratable; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Resources\TerminalCollection; use Mollie\Api\Traits\IsIteratableRequest; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class GetPaginatedTerminalsRequest extends PaginatedRequest implements IsIteratable, SupportsTestmodeInQuery { diff --git a/src/Http/Requests/GetPaymentLinkRequest.php b/src/Http/Requests/GetPaymentLinkRequest.php index aac61091..37a3b558 100644 --- a/src/Http/Requests/GetPaymentLinkRequest.php +++ b/src/Http/Requests/GetPaymentLinkRequest.php @@ -2,9 +2,9 @@ namespace Mollie\Api\Http\Requests; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Resources\PaymentLink; use Mollie\Api\Types\Method; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class GetPaymentLinkRequest extends ResourceHydratableRequest implements SupportsTestmodeInQuery { diff --git a/src/Http/Requests/GetSubscriptionRequest.php b/src/Http/Requests/GetSubscriptionRequest.php index 6a5fa6c0..c75449de 100644 --- a/src/Http/Requests/GetSubscriptionRequest.php +++ b/src/Http/Requests/GetSubscriptionRequest.php @@ -2,9 +2,9 @@ namespace Mollie\Api\Http\Requests; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Resources\Subscription; use Mollie\Api\Types\Method; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class GetSubscriptionRequest extends ResourceHydratableRequest implements SupportsTestmodeInQuery { diff --git a/src/Http/Requests/GetTerminalRequest.php b/src/Http/Requests/GetTerminalRequest.php index a9595f45..b710a300 100644 --- a/src/Http/Requests/GetTerminalRequest.php +++ b/src/Http/Requests/GetTerminalRequest.php @@ -2,8 +2,8 @@ namespace Mollie\Api\Http\Requests; -use Mollie\Api\Resources\Terminal; use Mollie\Api\Contracts\SupportsTestmodeInQuery; +use Mollie\Api\Resources\Terminal; class GetTerminalRequest extends ResourceHydratableRequest implements SupportsTestmodeInQuery { diff --git a/src/Http/Requests/ResourceHydratableRequest.php b/src/Http/Requests/ResourceHydratableRequest.php index 41642e4a..91c91f8f 100644 --- a/src/Http/Requests/ResourceHydratableRequest.php +++ b/src/Http/Requests/ResourceHydratableRequest.php @@ -2,8 +2,8 @@ namespace Mollie\Api\Http\Requests; -use Mollie\Api\Http\Request; use Mollie\Api\Contracts\SupportsResourceHydration; +use Mollie\Api\Http\Request; abstract class ResourceHydratableRequest extends Request implements SupportsResourceHydration { diff --git a/src/Http/Requests/UpdatePaymentLinkRequest.php b/src/Http/Requests/UpdatePaymentLinkRequest.php index c01d7349..2c5ee98d 100644 --- a/src/Http/Requests/UpdatePaymentLinkRequest.php +++ b/src/Http/Requests/UpdatePaymentLinkRequest.php @@ -3,11 +3,11 @@ namespace Mollie\Api\Http\Requests; use Mollie\Api\Contracts\HasPayload; +use Mollie\Api\Contracts\SupportsTestmodeInQuery; use Mollie\Api\Http\Payload\UpdatePaymentLinkPayload; use Mollie\Api\Resources\PaymentLink; use Mollie\Api\Traits\HasJsonPayload; use Mollie\Api\Types\Method; -use Mollie\Api\Contracts\SupportsTestmodeInQuery; class UpdatePaymentLinkRequest extends ResourceHydratableRequest implements HasPayload, SupportsTestmodeInQuery { diff --git a/src/Http/Response.php b/src/Http/Response.php index b2fa3d25..0a2763d1 100644 --- a/src/Http/Response.php +++ b/src/Http/Response.php @@ -3,7 +3,6 @@ namespace Mollie\Api\Http; use Mollie\Api\Contracts\Connector; -use Mollie\Api\Contracts\SupportsResourceHydration; use Mollie\Api\Exceptions\ApiException; use Mollie\Api\Http\Requests\ResourceHydratableRequest; use Mollie\Api\Traits\HandlesResourceCreation; diff --git a/src/MollieApiClient.php b/src/MollieApiClient.php index b470e7fd..5c939298 100644 --- a/src/MollieApiClient.php +++ b/src/MollieApiClient.php @@ -12,39 +12,36 @@ use Mollie\Api\EndpointCollection\ClientEndpointCollection; use Mollie\Api\EndpointCollection\ClientLinkEndpointCollection; use Mollie\Api\EndpointCollection\CustomerEndpointCollection; -use Mollie\Api\EndpointCollection\CustomerPaymentsEndpoint; +use Mollie\Api\EndpointCollection\CustomerPaymentsEndpointCollection; +use Mollie\Api\EndpointCollection\InvoiceEndpointCollection; +use Mollie\Api\EndpointCollection\MandateEndpointCollection; +use Mollie\Api\EndpointCollection\MethodEndpointCollection; +use Mollie\Api\EndpointCollection\MethodIssuerEndpointCollection; +use Mollie\Api\EndpointCollection\OnboardingEndpointCollection; use Mollie\Api\EndpointCollection\OrderEndpointCollection; +use Mollie\Api\EndpointCollection\OrderShipmentEndpointCollection; use Mollie\Api\EndpointCollection\OrganizationEndpointCollection; +use Mollie\Api\EndpointCollection\OrganizationPartnerEndpoint; +use Mollie\Api\EndpointCollection\PaymentCaptureEndpointCollection; +use Mollie\Api\EndpointCollection\PaymentChargebackEndpointCollection; use Mollie\Api\EndpointCollection\PaymentEndpointCollection; +use Mollie\Api\EndpointCollection\PaymentLinkEndpointCollection; +use Mollie\Api\EndpointCollection\PaymentLinkPaymentEndpointCollection; use Mollie\Api\EndpointCollection\PaymentRefundEndpointCollection; -use Mollie\Api\Endpoints\InvoiceEndpoint; -use Mollie\Api\Endpoints\MandateEndpoint; -use Mollie\Api\Endpoints\MethodEndpoint; -use Mollie\Api\Endpoints\MethodIssuerEndpoint; -use Mollie\Api\Endpoints\OnboardingEndpoint; -use Mollie\Api\Endpoints\OrderLineEndpoint; -use Mollie\Api\Endpoints\OrderPaymentEndpoint; -use Mollie\Api\Endpoints\OrderRefundEndpoint; -use Mollie\Api\Endpoints\OrderShipmentEndpoint; -use Mollie\Api\Endpoints\OrganizationPartnerEndpoint; -use Mollie\Api\Endpoints\PaymentCaptureEndpoint; -use Mollie\Api\Endpoints\PaymentChargebackEndpoint; -use Mollie\Api\Endpoints\PaymentLinkEndpoint; -use Mollie\Api\Endpoints\PaymentLinkPaymentEndpoint; -use Mollie\Api\Endpoints\PaymentRouteEndpoint; -use Mollie\Api\Endpoints\PermissionEndpoint; -use Mollie\Api\Endpoints\ProfileEndpoint; -use Mollie\Api\Endpoints\ProfileMethodEndpoint; -use Mollie\Api\Endpoints\RefundEndpoint; -use Mollie\Api\Endpoints\SettlementCaptureEndpoint; -use Mollie\Api\Endpoints\SettlementChargebackEndpoint; -use Mollie\Api\Endpoints\SettlementPaymentEndpoint; -use Mollie\Api\Endpoints\SettlementRefundEndpoint; -use Mollie\Api\Endpoints\SettlementsEndpoint; -use Mollie\Api\Endpoints\SubscriptionEndpoint; -use Mollie\Api\Endpoints\SubscriptionPaymentEndpoint; -use Mollie\Api\Endpoints\TerminalEndpoint; -use Mollie\Api\Endpoints\WalletEndpoint; +use Mollie\Api\EndpointCollection\PaymentRouteEndpointCollection; +use Mollie\Api\EndpointCollection\PermissionEndpointCollection; +use Mollie\Api\EndpointCollection\ProfileEndpointCollection; +use Mollie\Api\EndpointCollection\ProfileMethodEndpointCollection; +use Mollie\Api\EndpointCollection\RefundEndpointCollection; +use Mollie\Api\EndpointCollection\SettlementCaptureEndpointCollection; +use Mollie\Api\EndpointCollection\SettlementChargebackEndpointCollection; +use Mollie\Api\EndpointCollection\SettlementPaymentEndpointCollection; +use Mollie\Api\EndpointCollection\SettlementRefundEndpointCollection; +use Mollie\Api\EndpointCollection\SettlementsEndpointCollection; +use Mollie\Api\EndpointCollection\SubscriptionEndpointCollection; +use Mollie\Api\EndpointCollection\SubscriptionPaymentEndpointCollection; +use Mollie\Api\EndpointCollection\TerminalEndpointCollection; +use Mollie\Api\EndpointCollection\WalletEndpointCollection; use Mollie\Api\Http\Adapter\MollieHttpAdapterPicker; use Mollie\Api\Idempotency\DefaultIdempotencyKeyGenerator; use Mollie\Api\Resources\BalanceTransactionCollection; @@ -67,40 +64,37 @@ * @property ChargebackEndpointCollection $chargebacks * @property ClientEndpointCollection $clients * @property ClientLinkEndpointCollection $clientLinks - * @property CustomerPaymentsEndpoint $customerPayments + * @property CustomerPaymentsEndpointCollection $customerPayments * @property CustomerEndpointCollection $customers - * @property InvoiceEndpoint $invoices - * @property MandateEndpoint $mandates - * @property MethodEndpoint $methods - * @property MethodIssuerEndpoint $methodIssuers - * @property OnboardingEndpoint $onboarding + * @property InvoiceEndpointCollection $invoices + * @property MandateEndpointCollection $mandates + * @property MethodEndpointCollection $methods + * @property MethodIssuerEndpointCollection $methodIssuers + * @property OnboardingEndpointCollection $onboarding * @property OrderEndpointCollection $orders - * @property OrderLineEndpoint $orderLines - * @property OrderPaymentEndpoint $orderPayments - * @property OrderRefundEndpoint $orderRefunds * @property OrganizationEndpointCollection $organizations * @property OrganizationPartnerEndpoint $organizationPartners * @property PaymentEndpointCollection $payments - * @property PaymentCaptureEndpoint $paymentCaptures - * @property PaymentChargebackEndpoint $paymentChargebacks - * @property PaymentLinkEndpoint $paymentLinks - * @property PaymentLinkPaymentEndpoint $paymentLinkPayments + * @property PaymentCaptureEndpointCollection $paymentCaptures + * @property PaymentChargebackEndpointCollection $paymentChargebacks + * @property PaymentLinkEndpointCollection $paymentLinks + * @property PaymentLinkPaymentEndpointCollection $paymentLinkPayments * @property PaymentRefundEndpointCollection $paymentRefunds - * @property PaymentRouteEndpoint $paymentRoutes - * @property PermissionEndpoint $permissions - * @property ProfileEndpoint $profiles - * @property ProfileMethodEndpoint $profileMethods - * @property RefundEndpoint $refunds - * @property SettlementsEndpoint $settlements - * @property SettlementCaptureEndpoint $settlementCaptures - * @property SettlementChargebackEndpoint $settlementChargebacks - * @property SettlementPaymentEndpoint $settlementPayments - * @property SettlementRefundEndpoint $settlementRefunds - * @property OrderShipmentEndpoint $shipments - * @property SubscriptionEndpoint $subscriptions - * @property SubscriptionPaymentEndpoint $subscriptionPayments - * @property TerminalEndpoint $terminals - * @property WalletEndpoint $wallets + * @property PaymentRouteEndpointCollection $paymentRoutes + * @property PermissionEndpointCollection $permissions + * @property ProfileEndpointCollection $profiles + * @property ProfileMethodEndpointCollection $profileMethods + * @property RefundEndpointCollection $refunds + * @property SettlementsEndpointCollection $settlements + * @property SettlementCaptureEndpointCollection $settlementCaptures + * @property SettlementChargebackEndpointCollection $settlementChargebacks + * @property SettlementPaymentEndpointCollection $settlementPayments + * @property SettlementRefundEndpointCollection $settlementRefunds + * @property OrderShipmentEndpointCollection $shipments + * @property SubscriptionEndpointCollection $subscriptions + * @property SubscriptionPaymentEndpointCollection $subscriptionPayments + * @property TerminalEndpointCollection $terminals + * @property WalletEndpointCollection $wallets * @property HttpAdapterContract $httpClient */ class MollieApiClient implements Connector diff --git a/src/Resources/Balance.php b/src/Resources/Balance.php index f09dd5da..89b62b80 100644 --- a/src/Resources/Balance.php +++ b/src/Resources/Balance.php @@ -2,8 +2,12 @@ namespace Mollie\Api\Resources; +use Mollie\Api\Traits\HasMode; + class Balance extends BaseResource { + use HasMode; + /** * Resource id prefix. Used to validate resource id's. */ diff --git a/src/Resources/BalanceTransaction.php b/src/Resources/BalanceTransaction.php index 18c26595..42443ed2 100644 --- a/src/Resources/BalanceTransaction.php +++ b/src/Resources/BalanceTransaction.php @@ -4,8 +4,12 @@ namespace Mollie\Api\Resources; +use Mollie\Api\Traits\HasMode; + class BalanceTransaction extends BaseResource { + use HasMode; + /** * Indicates this is a balance transaction resource. The value will always be "balance_transaction" here. * diff --git a/src/Resources/BaseResource.php b/src/Resources/BaseResource.php index 6108cebc..8795427e 100644 --- a/src/Resources/BaseResource.php +++ b/src/Resources/BaseResource.php @@ -6,10 +6,12 @@ use Mollie\Api\Contracts\HasResponse; use Mollie\Api\Http\PendingRequest; use Mollie\Api\Http\Response; +use Mollie\Api\MollieApiClient; #[\AllowDynamicProperties] abstract class BaseResource implements HasResponse { + /** @var MollieApiClient */ protected Connector $connector; protected ?Response $response; diff --git a/src/Resources/Capture.php b/src/Resources/Capture.php index d1a59bd8..cd099293 100644 --- a/src/Resources/Capture.php +++ b/src/Resources/Capture.php @@ -2,8 +2,12 @@ namespace Mollie\Api\Resources; +use Mollie\Api\Traits\HasMode; + class Capture extends BaseResource { + use HasMode; + /** * Always 'capture' for this object * diff --git a/src/Resources/CursorCollection.php b/src/Resources/CursorCollection.php index f56cc655..59d7f8c6 100644 --- a/src/Resources/CursorCollection.php +++ b/src/Resources/CursorCollection.php @@ -4,12 +4,9 @@ use Generator; use Mollie\Api\Http\Requests\DynamicGetRequest; -use Mollie\Api\Traits\InteractsWithResource; abstract class CursorCollection extends BaseCollection { - use InteractsWithResource; - /** * Return the next set of resources when available * diff --git a/src/Resources/Customer.php b/src/Resources/Customer.php index c67242b8..f06adfac 100644 --- a/src/Resources/Customer.php +++ b/src/Resources/Customer.php @@ -3,10 +3,11 @@ namespace Mollie\Api\Resources; use Mollie\Api\Exceptions\ApiException; +use Mollie\Api\Traits\HasMode; class Customer extends BaseResource { - use HasPresetOptions; + use HasMode; public static string $resourceIdPrefix = 'cst_'; @@ -82,7 +83,12 @@ public function update(): ?Customer */ public function createPayment(array $options = [], array $filters = []) { - return $this->connector->customerPayments->createFor($this, $this->withPresetOptions($options), $filters); + return $this->connector->customerPayments->createFor( + $this, + $options, + $filters, + $this->isInTestmode() + ); } /** @@ -94,7 +100,7 @@ public function createPayment(array $options = [], array $filters = []) */ public function payments() { - return $this->connector->customerPayments->listFor($this, null, null, $this->getPresetOptions()); + return $this->connector->customerPayments->pageFor($this, null, null, $this->withMode()); } /** @@ -104,7 +110,7 @@ public function payments() */ public function createSubscription(array $options = [], array $filters = []) { - return $this->connector->subscriptions->createFor($this, $this->withPresetOptions($options), $filters); + return $this->connector->subscriptions->createFor($this, $options, $this->isInTestmode()); } /** @@ -113,9 +119,9 @@ public function createSubscription(array $options = [], array $filters = []) * * @throws ApiException */ - public function getSubscription($subscriptionId, array $parameters = []) + public function getSubscription($subscriptionId) { - return $this->connector->subscriptions->getFor($this, $subscriptionId, $this->withPresetOptions($parameters)); + return $this->connector->subscriptions->getFor($this, $subscriptionId, $this->isInTestmode()); } /** @@ -126,7 +132,7 @@ public function getSubscription($subscriptionId, array $parameters = []) */ public function cancelSubscription($subscriptionId) { - return $this->connector->subscriptions->cancelFor($this, $subscriptionId, $this->getPresetOptions()); + return $this->connector->subscriptions->cancelFor($this, $subscriptionId, $this->isInTestmode()); } /** @@ -138,7 +144,7 @@ public function cancelSubscription($subscriptionId) */ public function subscriptions() { - return $this->connector->subscriptions->listFor($this, null, null, $this->getPresetOptions()); + return $this->connector->subscriptions->pageFor($this, null, null, $this->withMode()); } /** @@ -146,9 +152,9 @@ public function subscriptions() * * @throws ApiException */ - public function createMandate(array $options = [], array $filters = []) + public function createMandate(array $options = []) { - return $this->connector->mandates->createFor($this, $this->withPresetOptions($options), $filters); + return $this->connector->mandates->createFor($this, $options, $this->isInTestmode()); } /** @@ -159,7 +165,7 @@ public function createMandate(array $options = [], array $filters = []) */ public function getMandate($mandateId, array $parameters = []) { - return $this->connector->mandates->getFor($this, $mandateId, $parameters); + return $this->connector->mandates->getFor($this, $mandateId, $this->withMode($parameters)); } /** @@ -170,7 +176,7 @@ public function getMandate($mandateId, array $parameters = []) */ public function revokeMandate($mandateId) { - return $this->connector->mandates->revokeFor($this, $mandateId, $this->getPresetOptions()); + return $this->connector->mandates->revokeFor($this, $mandateId, $this->withMode()); } /** @@ -182,7 +188,7 @@ public function revokeMandate($mandateId) */ public function mandates() { - return $this->connector->mandates->listFor($this, null, null, $this->getPresetOptions()); + return $this->connector->mandates->pageFor($this, null, null, $this->withMode()); } /** diff --git a/src/Resources/HasPresetOptions.php b/src/Resources/HasPresetOptions.php deleted file mode 100644 index 7ee972f6..00000000 --- a/src/Resources/HasPresetOptions.php +++ /dev/null @@ -1,31 +0,0 @@ -client->usesOAuth()) { - $options['testmode'] = $this->mode === 'test' ? true : false; - } - - return $options; - } - - /** - * Apply the preset options. - */ - protected function withPresetOptions(array $options): array - { - return array_merge($this->getPresetOptions(), $options); - } -} diff --git a/src/Resources/Payment.php b/src/Resources/Payment.php index d4b6b23e..43487123 100644 --- a/src/Resources/Payment.php +++ b/src/Resources/Payment.php @@ -4,13 +4,18 @@ use Mollie\Api\Contracts\EmbeddedResourcesContract; use Mollie\Api\Exceptions\ApiException; +use Mollie\Api\Http\Payload\Metadata; +use Mollie\Api\Http\Payload\UpdatePaymentPayload; use Mollie\Api\Http\Requests\DynamicGetRequest; +use Mollie\Api\Http\Requests\UpdatePaymentRequest; +use Mollie\Api\Traits\HasMode; +use Mollie\Api\Types\PaymentMethod; use Mollie\Api\Types\PaymentStatus; use Mollie\Api\Types\SequenceType; class Payment extends BaseResource implements EmbeddedResourcesContract { - use HasPresetOptions; + use HasMode; /** * Resource id prefix. Used to validate resource id's. @@ -610,7 +615,7 @@ public function refunds(): RefundCollection */ public function getRefund($refundId, array $parameters = []): Refund { - return $this->connector->paymentRefunds->getFor($this, $refundId, $this->withPresetOptions($parameters)); + return $this->connector->paymentRefunds->getFor($this, $refundId, $parameters, $this->isInTestmode()); } /** @@ -621,9 +626,11 @@ public function listRefunds(array $parameters = []): RefundCollection return $this ->connector ->paymentRefunds - ->listFor( + ->pageFor( $this, - $this->withPresetOptions($parameters) + null, + null, + $this->withMode($parameters), ); } @@ -656,7 +663,8 @@ public function getCapture($captureId, array $parameters = []): Capture return $this->connector->paymentCaptures->getFor( $this, $captureId, - $this->withPresetOptions($parameters) + $parameters, + $this->isInTestmode() ); } @@ -691,7 +699,8 @@ public function getChargeback($chargebackId, array $parameters = []): Chargeback return $this->connector->paymentChargebacks->getFor( $this, $chargebackId, - $this->withPresetOptions($parameters) + $parameters, + $this->isInTestmode() ); } @@ -712,22 +721,26 @@ public function refund($data): Refund */ public function update(): ?Payment { - $body = [ - 'description' => $this->description, - 'cancelUrl' => $this->cancelUrl, - 'redirectUrl' => $this->redirectUrl, - 'webhookUrl' => $this->webhookUrl, - 'metadata' => $this->metadata, - 'restrictPaymentMethodsToCountry' => $this->restrictPaymentMethodsToCountry, - 'locale' => $this->locale, - 'dueDate' => $this->dueDate, - ]; + $additional = []; + if ($this->method === PaymentMethod::BANKTRANSFER) { + $additional['dueDate'] = $this->dueDate; + } - /** @var null|Payment */ - return $this->connector->payments->update( - $this->id, - $this->withPresetOptions($body) + $payload = new UpdatePaymentPayload( + $this->description, + $this->redirectUrl, + $this->cancelUrl, + $this->webhookUrl, + new Metadata($this->metadata), + $this->method, + $this->locale, + $this->restrictPaymentMethodsToCountry, + $additional ); + + return $this + ->connector + ->send((new UpdatePaymentRequest($this->id, $payload))->test($this->isInTestmode())); } /** diff --git a/src/Resources/Refund.php b/src/Resources/Refund.php index 1c74c24b..f4d2acb0 100644 --- a/src/Resources/Refund.php +++ b/src/Resources/Refund.php @@ -3,11 +3,12 @@ namespace Mollie\Api\Resources; use Mollie\Api\Http\Requests\CancelPaymentRefundRequest; +use Mollie\Api\Traits\HasMode; use Mollie\Api\Types\RefundStatus; class Refund extends BaseResource { - use HasPresetOptions; + use HasMode; public static string $resourceIdPrefix = 're_'; @@ -167,6 +168,6 @@ public function cancel(): void ->send((new CancelPaymentRefundRequest( $this->paymentId, $this->id - ))->test($this->mode === 'test')); + ))->test($this->isInTestmode())); } } diff --git a/src/Resources/Session.php b/src/Resources/Session.php index 6913d5c9..01d71483 100644 --- a/src/Resources/Session.php +++ b/src/Resources/Session.php @@ -2,11 +2,12 @@ namespace Mollie\Api\Resources; +use Mollie\Api\Traits\HasMode; use Mollie\Api\Types\SessionStatus; class Session extends BaseResource { - use HasPresetOptions; + use HasMode; /** * The session's unique identifier, @@ -153,9 +154,7 @@ public function update() 'shippingAddress' => $this->shippingAddress, ]; - $result = $this->client->sessions->update($this->id, $this->withPresetOptions($body)); - - return ResourceFactory::createFromApiResult($result, new Session($this->client)); + return $this->connector->sessions->update($this->id, $this->withMode($body)); } /** @@ -167,7 +166,7 @@ public function update() */ public function cancel() { - return $this->client->sessions->cancel($this->id, $this->getPresetOptions()); + return $this->connector->sessions->cancel($this->id, $this->withMode()); } /** diff --git a/src/Traits/HasMode.php b/src/Traits/HasMode.php new file mode 100644 index 00000000..85b44257 --- /dev/null +++ b/src/Traits/HasMode.php @@ -0,0 +1,19 @@ +mode === 'test'; + } + + public function withMode(array $options = []): array + { + return array_merge($options, ['testmode' => $this->isInTestmode()]); + } +} diff --git a/src/Traits/InteractsWithResource.php b/src/Traits/InteractsWithResource.php deleted file mode 100644 index a763d2d5..00000000 --- a/src/Traits/InteractsWithResource.php +++ /dev/null @@ -1,20 +0,0 @@ -resolveResourcePath(); - - $query = $this->buildQuery($request->query()); - - return $path.$query; - } - - private function buildQuery(ArrayRepository $query): string - { - if ($query->isEmpty()) { - return ''; - } - - $query = $this->transformQuery($query->all()); - - return '?'.http_build_query($query, '', '&'); - } - - private function transformQuery(array $query): array - { - return array_map(function ($value) { - if ($value === true) { - return 'true'; - } - - if ($value === false) { - return 'false'; - } - - return $value; - }, $query); - } -}