200 lines
6.2 KiB
PHP
200 lines
6.2 KiB
PHP
<?php
|
|
|
|
namespace Mollie\Api\EndpointCollection;
|
|
|
|
use Mollie\Api\Exceptions\RequestException;
|
|
use Mollie\Api\Factories\CreatePaymentRefundRequestFactory;
|
|
use Mollie\Api\Factories\CreatePaymentRequestFactory;
|
|
use Mollie\Api\Factories\GetPaymentRequestFactory;
|
|
use Mollie\Api\Factories\SortablePaginatedQueryFactory;
|
|
use Mollie\Api\Factories\UpdatePaymentRequestFactory;
|
|
use Mollie\Api\Http\Requests\CancelPaymentRequest;
|
|
use Mollie\Api\Http\Requests\GetPaginatedPaymentsRequest;
|
|
use Mollie\Api\Http\Requests\ReleasePaymentAuthorizationRequest;
|
|
use Mollie\Api\Http\Response;
|
|
use Mollie\Api\Resources\AnyResource;
|
|
use Mollie\Api\Resources\LazyCollection;
|
|
use Mollie\Api\Resources\Payment;
|
|
use Mollie\Api\Resources\PaymentCollection;
|
|
use Mollie\Api\Resources\Refund;
|
|
use Mollie\Api\Utils\Utility;
|
|
|
|
class PaymentEndpointCollection extends EndpointCollection
|
|
{
|
|
/**
|
|
* Retrieve a single payment from Mollie.
|
|
*
|
|
* Will throw a ApiException if the payment id is invalid or the resource cannot be found.
|
|
*
|
|
* @throws RequestException
|
|
*/
|
|
public function get(string $id, array $query = [], bool $testmode = false): Payment
|
|
{
|
|
$testmode = Utility::extractBool($query, 'testmode', $testmode);
|
|
|
|
$request = GetPaymentRequestFactory::new($id)
|
|
->withQuery($query)
|
|
->create();
|
|
|
|
return $this->send($request->test($testmode));
|
|
}
|
|
|
|
/**
|
|
* Creates a payment in Mollie.
|
|
*
|
|
* @param array $payload An array containing details on the payment.
|
|
* @param array $query An array of strings or a single string containing the details to include.
|
|
*
|
|
* @throws RequestException
|
|
*/
|
|
public function create(array $payload = [], array $query = [], bool $testmode = false): Payment
|
|
{
|
|
$testmode = Utility::extractBool($query, 'testmode', $testmode);
|
|
|
|
$request = CreatePaymentRequestFactory::new()
|
|
->withPayload($payload)
|
|
->withQuery($query)
|
|
->create();
|
|
|
|
/** @var Payment */
|
|
return $this->send($request->test($testmode));
|
|
}
|
|
|
|
/**
|
|
* Update the given Payment.
|
|
*
|
|
* Will throw a ApiException if the payment id is invalid or the resource cannot be found.
|
|
*
|
|
* @throws RequestException
|
|
*/
|
|
public function update(string $id, array $data = [], bool $testmode = false): ?Payment
|
|
{
|
|
$testmode = Utility::extractBool($data, 'testmode', $testmode);
|
|
|
|
$request = UpdatePaymentRequestFactory::new($id)
|
|
->withPayload($data)
|
|
->create();
|
|
|
|
/** @var null|Payment */
|
|
return $this->send($request->test($testmode));
|
|
}
|
|
|
|
/**
|
|
* Deletes the given Payment.
|
|
*
|
|
* Will throw a ApiException if the payment id is invalid or the resource cannot be found.
|
|
* Returns with HTTP status No Content (204) if successful.
|
|
*
|
|
* @throws RequestException
|
|
*/
|
|
public function delete(string $id, $data = []): Payment
|
|
{
|
|
return $this->cancel($id, $data);
|
|
}
|
|
|
|
/**
|
|
* Cancel the given Payment. This is just an alias of the 'delete' method.
|
|
*
|
|
* Will throw a ApiException if the payment id is invalid or the resource cannot be found.
|
|
* Returns with HTTP status No Content (204) if successful.
|
|
*
|
|
* @param array|bool $testmode
|
|
*
|
|
* @throws RequestException
|
|
*/
|
|
public function cancel(string $id, $testmode = false): Payment
|
|
{
|
|
$testmode = Utility::extractBool($testmode, 'testmode', false);
|
|
|
|
/** @var Payment */
|
|
return $this->send((new CancelPaymentRequest($id))->test($testmode));
|
|
}
|
|
|
|
/**
|
|
* Issue a refund for the given payment.
|
|
*
|
|
* The $data parameter may either be an array of endpoint
|
|
* parameters, or an instance of CreateRefundPaymentData.
|
|
*
|
|
*
|
|
* @throws RequestException
|
|
*/
|
|
public function refund(Payment $payment, array $payload = [], bool $testmode = false): Refund
|
|
{
|
|
$testmode = Utility::extractBool($payload, 'testmode', $testmode);
|
|
|
|
$request = CreatePaymentRefundRequestFactory::new($payment->id)
|
|
->withPayload($payload)
|
|
->create();
|
|
|
|
return $this->send($request->test($testmode));
|
|
}
|
|
|
|
/**
|
|
* Release the authorization for the given payment.
|
|
*
|
|
* @param Payment|string $paymentId
|
|
* @return AnyResource|Response
|
|
*
|
|
* @throws RequestException
|
|
*/
|
|
public function releaseAuthorization($paymentId)
|
|
{
|
|
$paymentId = $paymentId instanceof Payment ? $paymentId->id : $paymentId;
|
|
|
|
return $this->send(new ReleasePaymentAuthorizationRequest($paymentId));
|
|
}
|
|
|
|
/**
|
|
* Get the balance endpoint.
|
|
*/
|
|
public function page(?string $from = null, ?int $limit = null, array $filters = []): PaymentCollection
|
|
{
|
|
$testmode = Utility::extractBool($filters, 'testmode', false);
|
|
|
|
$query = SortablePaginatedQueryFactory::new()
|
|
->withQuery([
|
|
'from' => $from,
|
|
'limit' => $limit,
|
|
'filters' => $filters,
|
|
])
|
|
->create();
|
|
|
|
return $this->send((new GetPaginatedPaymentsRequest(
|
|
$query->from,
|
|
$query->limit,
|
|
$query->sort,
|
|
))->test($testmode));
|
|
}
|
|
|
|
/**
|
|
* Create an iterator for iterating over payments retrieved from Mollie.
|
|
*
|
|
* @param string $from The first resource ID you want to include in your list.
|
|
* @param bool $iterateBackwards Set to true for reverse order iteration (default is false).
|
|
*/
|
|
public function iterator(?string $from = null, ?int $limit = null, array $filters = [], bool $iterateBackwards = false): LazyCollection
|
|
{
|
|
$testmode = Utility::extractBool($filters, 'testmode', false);
|
|
|
|
$query = SortablePaginatedQueryFactory::new()
|
|
->withQuery([
|
|
'from' => $from,
|
|
'limit' => $limit,
|
|
'filters' => $filters,
|
|
])
|
|
->create();
|
|
|
|
return $this->send(
|
|
(new GetPaginatedPaymentsRequest(
|
|
$query->from,
|
|
$query->limit,
|
|
$query->sort,
|
|
))
|
|
->useIterator()
|
|
->setIterationDirection($iterateBackwards)
|
|
->test($testmode)
|
|
);
|
|
}
|
|
}
|