insightbase / revolut-merchant-api-nette
Revolut Merchant API client for PHP / Nette
Package info
github.com/insightbase/RevolutMerchantApi-nette
pkg:composer/insightbase/revolut-merchant-api-nette
Requires
- php: >=8.1
- ext-curl: *
- nette/di: ^3.1
- tracy/tracy: ^2.10
This package is auto-updated.
Last update: 2026-03-11 15:39:12 UTC
README
PHP client pro Revolut Merchant API s podporou Nette DI a Tracy panelu.
Instalace
Pomocí Composeru:
composer require insightbase/revolut-merchant-api-nette
Požadavky
PHP >= 8.1
ext-curl
Nette DI
Tracy (pro debug panel)
Použití
use RevolutMerchantApi\Api\RevolutHttpClient;
use RevolutMerchantApi\Api\RevolutApi;
use RevolutMerchantApi\Dto\RevolutOrder;
use RevolutMerchantApi\Enum\CaptureMode;
use RevolutMerchantApi\Enum\ChallengeMode;
$client = new RevolutHttpClient('TVUJ_API_KEY', 'https://merchant.revolut.com/api');
$api = new RevolutApi($client);
$order = (new RevolutOrder())
->setAmount(50.25)
->setCurrency('GBP')
->setCaptureMode(CaptureMode::AUTOMATIC)
->setEnforceChallenge(ChallengeMode::AUTOMATIC)
->setDescription('Ukázková platba');
$response = $api->createOrder($order);
var_dump($response);
Order payments:
try {
$payments = $revolut->getOrderPayments($orderId);
foreach ($payments->items as $payment) {
dump($payment['id'], $payment['state'], $payment['payment_method']);
}
} catch (RevolutException $e) {
dump($e->errorCode, $e->httpStatus, $e->getMessage());
}
Payment detail
use RevolutMerchantApi\Api\RevolutApi;
use RevolutMerchantApi\Dto\Response\RevolutPaymentResponse;
use RevolutMerchantApi\Dto\Response\RevolutException;
/** @var RevolutApi $api */
$api = $this->revolutMerchantApi; // v Nette přes DI
$paymentId = '6633855a-0e4f-a768-8b2c-e765d8872505';
$response = $api->getPayment($paymentId);
if ($response instanceof RevolutPaymentResponse) {
dump($response->state, $response->amount, $response->paymentMethod);
} elseif ($response instanceof RevolutException) {
dump($response->statusCode, $response->raw); // raw['errorId'], raw['code'] atd.
}
Nette DI Extension
extensions:
revolutMerchantApi: RevolutMerchantApi\Nette\RevolutMerchantApiExtension
revolutMerchantApi:
apiKey: %revolutApiKey%
apiUrl: https://merchant.revolut.com/api
debug: true
Tracy Panel
Automaticky zobrazí všechny požadavky v Tracy debug baru.
Webhook verification + auto-dispatch (Nette)
revolutMerchantApi:
webhook:
signingSecret: %revolutWebhookSigningSecret%
timestampToleranceMs: 300000
<?php
use RevolutMerchantApi\Dto\OrderCompletedWebhook;
use RevolutMerchantApi\Dto\WebhookPayload;
use RevolutMerchantApi\Enum\WebhookEvent;
use RevolutMerchantApi\Webhook\WebhookEventHandlerInterface;
final class OrderCompletedHandler implements WebhookEventHandlerInterface
{
public static function event(): WebhookEvent
{
return WebhookEvent::ORDER_COMPLETED;
}
public function handle(WebhookPayload $payload): void
{
if ($payload instanceof OrderCompletedWebhook) {
// business logic
}
}
}
Tag handler service as revolut.webhookHandler, then call
RevolutMerchantApi\Nette\RevolutWebhookRouter::handleVerifiedRequest($httpRequest).
Sample endpoint presenter (200/400 flow)
File: examples/RevolutWebhookPresenter.php
Minimal route example:
# RouterFactory
$router->addRoute('revolut/webhook', 'Webhook:Revolut:in');
Service tag example:
services:
- App\Revolut\Webhook\OrderCompletedHandler
tags: [revolut.webhookHandler]
Controller service variant (outside presenter)
File: examples/RevolutWebhookController.php
Usage in API presenter:
<?php
use App\Api\RevolutWebhookController;
use Nette\Application\UI\Presenter;
final class RevolutWebhookPresenter extends Presenter
{
public function __construct(
private readonly RevolutWebhookController $controller
) {
parent::__construct();
}
public function actionIn(): void
{
$result = $this->controller->handle($this->getHttpRequest());
$this->sendJson($result->body, $result->statusCode);
}
}
More runnable examples
examples/CreateOrderExample.php
examples/GetOrderPaymentsExample.php
examples/GetPaymentDetailExample.php