Skip to content
For AI agents: the complete documentation index is available at llms.txt; this page is also available as Markdown at index.md.

Payment API

To get payments and manage them, use the Ibexa\Contracts\Payment\PaymentServiceInterface interface.

By default, UUID is used to generate payment identifiers. You can change that by providing a custom payment identifier in Ibexa\Contracts\Payment\Payment\PaymentCreateStruct or Ibexa\Contracts\Payment\Payment\PaymentUpdateStruct.

Get single payment

Get single payment by ID

To access a single payment by using its numerical ID, use the PaymentServiceInterface::getPayment method:

1
2
3
4
$paymentId = 1;
$payment = $this->paymentService->getPayment($paymentId);

$output->writeln(sprintf('Payment %d has status %s', $paymentId, $payment->getStatus()));

Get single payment by identifier

To access a single payment by using its string identifier, use the PaymentServiceInterface::getPaymentByIdentifier method:

1
2
$paymentIdentifier = '4ac4b8a0-eed8-496d-87d9-32a960a10629';
$payment = $this->paymentService->getPaymentByIdentifier($paymentIdentifier);

Get multiple payments

To fetch multiple payments, use the PaymentServiceInterface::findPayments method. It follows the same search query pattern as other APIs:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$paymentCriterions = [
    new Currency('USD'),
    new Currency('CZK'),
];

$paymentQuery = new PaymentQuery(new LogicalOr(...$paymentCriterions));
$paymentQuery->setLimit(10);

$paymentsList = $this->paymentService->findPayments($paymentQuery);

$paymentsList->getPayments();
$paymentsList->getTotalCount();

foreach ($paymentsList as $payment) {
    $output->writeln($payment->getIdentifier() . ': ' . $payment->getOrder()->getIdentifier() . ': ' . $payment->getOrder()->getValue()->getTotalGross()->getAmount());
}

Create payment

To create a payment, use the PaymentServiceInterface::createPayment method and provide it with the Ibexa\Contracts\Payment\Payment\PaymentCreateStruct object that takes the following arguments: method, order and amount.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$context = [
    'transaction_id' => '5e5fe187-c865-49£2-b407-a946fd7b5be0',
];

$paymentCreateStruct = new PaymentCreateStruct(
    $this->paymentMethodService->getPaymentMethodByIdentifier('bank_transfer_EUR'),
    $this->orderService->getOrder(135),
    new Money\Money(100, new Money\Currency('EUR'))
);
$paymentCreateStruct->setContext(new ArrayMap($context));

$payment = $this->paymentService->createPayment($paymentCreateStruct);

$output->writeln(sprintf('Created payment %s for order %s', $payment->getIdentifier(), $payment->getOrder()->getIdentifier()));

Update payment

You can update payment information after the payment is created. You could do it to support a scenario when, for example, an online payment failed, has been processed by using other means, and its status has to be updated in the system. The Ibexa\Contracts\Payment\Payment\PaymentUpdateStruct object takes the following arguments: transition, identifier, and context. To update payment information, use the PaymentServiceInterface::updatePayment method:

1
2
3
4
5
6
$paymentUpdateStruct = new PaymentUpdateStruct();
$paymentUpdateStruct->setTransition('pay');

$this->paymentService->updatePayment($payment, $paymentUpdateStruct);

$output->writeln(sprintf('Changed payment status to %s', $payment->getStatus()));

Delete payment

To delete a payment from the system, use the PaymentServiceInterface::deletePayment method:

1
$this->paymentService->deletePayment($payment);