pointId required | string (pointId) = 8 characters ^[0-9a-f]{8}$ Identyfikator punktu płatności |
Array of objects | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Array
|
curl --location 'https://api.paymentic.com/v1/payment/points/:pointId/transactions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer {{bearerToken}}'
{- "data": [
- {
- "id": "stringstringst",
- "status": "CREATED",
- "amount": 0.1,
- "currency": "string",
- "commission": 0.1,
- "title": "string",
- "description": "string",
- "custom": "string",
- "redirect": {
- "success": "string",
- "failure": "string"
}, - "channelId": "string",
- "isTest": true,
- "whitelabel": true,
- "paidAt": "string",
- "expiresAt": "string",
- "createdAt": "string"
}
]
}
pointId required | string (pointId) = 8 characters ^[0-9a-f]{8}$ Identyfikator punktu płatności |
amount required | number <float> >= 1 Kwota netto transakcji | ||||||
title required | string [ 5 .. 32 ] characters Tytuł transakcji wyświetlany na bramce płatniczej i przesyłany do banku | ||||||
currency | number or null <ISO 4217> Default: "PLN" Waluta transakcji | ||||||
description | string <= 128 characters Szczegółowy opis transakcji wyświetlany na bramce płatniczej | ||||||
custom | string <= 128 characters Pole do wykorzystania przez partnera np. do przesłania ID transakcji sklepu | ||||||
object or null Podstawowe dane kupującego | |||||||
| |||||||
object or null Adresy URL do przekierowania klienta po transakcji | |||||||
| |||||||
channelId | string or null Id kanału płatności | ||||||
whitelabel | boolean Default: false Transakcja typu whitelabel | ||||||
expiresAt | string or null <datetime> Data ważności transakcji |
object | |||||||
|
{- "amount": 1,
- "title": "string",
- "currency": "PLN",
- "description": "string",
- "custom": "string",
- "redirect": {
- "success": "string",
- "failure": "string"
}, - "channelId": "string",
- "whitelabel": false,
- "expiresAt": "string"
}
{- "data": {
- "id": "A692-B0N-BLV-4JI0",
- "isTest": false,
}
}
pointId required | string (pointId) = 8 characters ^[0-9a-f]{8}$ Identyfikator punktu płatności |
transactionId required | string (transactionId) = 14 characters ^[A-Z0-9]{4}-[A-Z0-9]{3}-[A-Z0-9]{3}-[A-Z0-9]... Identyfikator transakcji |
object | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
curl --location 'https://api.paymentic.com/v1/payment/points/:pointId/transactions/:transactionId' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer {{bearerToken}}'
{- "data": {
- "id": "stringstringst",
- "status": "CREATED",
- "amount": 0.1,
- "currency": "string",
- "commission": 0.1,
- "title": "string",
- "description": "string",
- "custom": "string",
- "redirect": {
- "success": "string",
- "failure": "string"
}, - "channelId": "string",
- "isTest": true,
- "whitelabel": true,
- "paidAt": "string",
- "expiresAt": "string",
- "createdAt": "string"
}
}
pointId required | string (pointId) = 8 characters ^[0-9a-f]{8}$ Identyfikator punktu płatności |
Array of objects | |||||||||||||||||||||||||||||||||||
Array
|
{- "data": [
- {
- "id": "blik",
- "available": true,
- "status": "ACTIVE",
- "category": "BLIK",
- "name": "BLIK",
- "amount": {
- "minimum": 0.1,
- "maximum": 10000
}, - "commission": {
- "value": 1.4,
- "minimum": 0.1
}, - "currencies": [
- "PLN"
], - "enablingAt": null,
- "disablingAt": "2024-09-24T10:00:00+02:00"
}
]
}
Paymentic przesyła notyfikacje o zmianach np. w statusie transakcji. Każda notyfikacja zawiera swój unikalny identyfikator prezentowany w nagłówku
X-Paymentic-Notification-Id
można uznać go za klucz idempotentności ponieważ notyfikacje ponawiane są zgodnie ze schematem dostępnym poniżej.
Aby poinformować, że Partner prawidłowo odebrał i przetworzył powiadomienie należy zwrócić kod HTTP 200
z Content-Type: plain/text
i zawartością body OK
lub kod HTTP 202
z pustym body
Przykładowy request przesłany do strony partnera
GET /yourpath HTTP/1.1
Host: yourdomain.com
User-Agent: Paymentic/1.0
Content-Type: application/json
Content-Length: 170
X-Paymentic-Event: TRANSACTION_STATUS
X-Paymentic-Notification-Id: 01j96yn02bhbv8j1jjtk36zn2t
X-Paymentic-Time: 2024-09-20T09:48:03+02:00
X-Paymentic-Signature: 5Fil+PMpabLxsKwo3rWj9+o6gAi4ub93fismBewbYz46mHt7pjPHcHELUVw8McZ5nUb3feMVVBl+dPzXq2XgLQ==
{"transactionId":"FJRS-LY7-3W0-30K9","pointId":"000cb241","status":"CREATED","amount":10,"currency":"PLN","commission":null,"custom":null,"channelId":null,"isTest":false}
Wszystkie notyfikacje są ponawiane zgodnie z implementacją wzorca integracyjnego Retry Pattern
Retry Policy
)Numer powiadomienia | Czas |
---|---|
1 | natychmiast |
od 2 do 10 | co minutę |
od 11 do 15 | co 15 minut |
od 16 do 30 | co godzinę |
Jeżeli ponawianie notyfikacji nie zakończony się powodzeniem, zostanie przerwane po 30 powiadomieniach (Circuit Breaker
)
Paymentic przy każdej notyfikacji przesyła sygnaturę w nagłówku X-Paymentic-Signature
Sygnatura notyfikacji może zostać obliczona za pomocą HASH HMAC SHA512 (RFC 6234).
W strukturze należy złączyć wartości (konkatenacja) z nagłówków i body oddzielając jest |
(Unicode U+007C) w kolejności:
X-Paymentic-Event, User-Agent(Wersja z user-agenta np. 1.0), Body, X-Paymentic-Notification-Id, X-Paymentic-Time
TRANSACTION_STATUS|1.0|{"transactionId":"FJRS-LY7-3W0-30K9","pointId":"000cb241","status":"CREATED","amount":10,"currency":"PLN","commission":null,"custom":null,"channelId":null,"isTest":false}|01j96yn02bhbv8j1jjtk36zn2t|2024-09-20T09:48:03+02:00
<?php
$signatureKey = '99ab572393014a7c2f20fe53253fc37819371a033c4507055e94e816683b9c8d';
echo base64_encode(hash_hmac('sha512', 'TRANSACTION_STATUS|1.0|{"transactionId":"FJRS-LY7-3W0-30K9","pointId":"000cb241","status":"CREATED","amount":10,"currency":"PLN","commission":null,"custom":null,"channelId":null,"isTest":false}|01j96yn02bhbv8j1jjtk36zn2t|2024-09-20T09:48:03+02:00', $signatureKey, true));
import hashlib
import hmac
import base64
signatureKey = '99ab572393014a7c2f20fe53253fc37819371a033c4507055e94e816683b9c8d'
message = 'TRANSACTION_STATUS|1.0|{"transactionId":"FJRS-LY7-3W0-30K9","pointId":"000cb241","status":"CREATED","amount":10,"currency":"PLN","commission":null,"custom":null,"channelId":null,"isTest":false}|01j96yn02bhbv8j1jjtk36zn2t|2024-09-20T09:48:03+02:00'
signature = hmac.new(signatureKey.encode('utf-8'), message.encode('utf-8'), hashlib.sha512).digest()
encoded_signature = base64.b64encode(signature).decode('utf-8')
print(encoded_signature)
User-Agent required | string Example: Paymentic/1.0 Wersja notyfikacji |
X-Paymentic-Event required | string Example: TRANSACTION_STATUS Typ notyfikacji |
X-Paymentic-Notification-Id required | string <ulid> Example: 01j9wnm31m43e81p2snqn5cp6y Identyfikator notyfikacji |
X-Paymentic-Time required | string <timestamp> Example: 2024-09-20T09:48:03+02:00 Czas wysłania notyfikacji |
X-Paymentic-Signature required | string <base64> Example: 8XYkwtl7wbjf74DUPFab0GP6/us4u91xHectfnxsqr0GQ9aU8Wj/l/g7BSyuwilQ2oVY1Yppnci5/z4CaRPtWQ== Sygnatura notyfikacji |
transactionId required | string (transactionId) = 14 characters ^[A-Z0-9]{4}-[A-Z0-9]{3}-[A-Z0-9]{3}-[A-Z0-9]... Identyfikator transakcji | ||||||||||||
pointId required | string (pointId) = 8 characters ^[0-9a-f]{8}$ Identyfikator punktu płatności | ||||||||||||
status required | string (transactionStatus) Default: "CREATED" Enum: "CREATED" "PENDING" "PAID" "FAILED" "CANCELLED" Status transakcji
| ||||||||||||
amount required | number <float> Kwota transakcji | ||||||||||||
currency required | string <ISO 4217> Waluta transakcji | ||||||||||||
commission required | number or null <float> Prowizja pobrana z transakcji przez Paymentic | ||||||||||||
custom required | string or null Pole dodatkowe przeznaczone do wykorzystania przez Partnera | ||||||||||||
channelId required | string or null Id kanału płatności | ||||||||||||
isTest required | boolean Informacja czy to transakcja testowa |
{- "transactionId": "1CR6-75T-KVY-DAV3",
- "pointId": "e99ed63d",
- "status": "CREATED",
- "amount": 14.24,
- "currency": "PLN",
- "commission": null,
- "custom": null,
- "channelId": null,
- "isTest": false
}
OK
Przykładowy request przesłany do strony partnera
GET /yourpath HTTP/1.1
Host: yourdomain.com
User-Agent: Paymentic/1.0
Content-Type: application/json
Content-Length: 201
X-Paymentic-Notification-Id: 01J5SXAG3D5MZXCZQ4P567ECQ8
X-Paymentic-Time: 1724226165
X-Paymentic-Signature: 8XYkwtl7wbjf74DUPFab0GP6/us4u91xHectfnxsqr0GQ9aU8Wj/l/g7BSyuwilQ2oVY1Yppnci5/z4CaRPtWQ==
{"transactionId":"CR6-75T-KVY-DAV4","pointId":"e99ed63d","status":"PENDING","amount":14.24,"currency":"PLN","commission":null,"custom":null,"msisdn":"48987654321","mccmnc":null,"isTest":false}
Próba
Sygnatura notyfikacji może zostać obliczona za pomocą HMAC SHA512.
1.0|{"transactionId":"CR6-75T-KVY-DAV4"}|01J5SXAG3D5MZXCZQ4P567ECQ8|1724226165
Klucz do sygnatury używany do wygenerowania przykładowej sygnatury
d3d2503c-478e-405d-b453-33e63b1ce962
ZKpOXsLkxz95TL5MLK4owl6WZ66489XDR6M9BayCmH2u4zbzeePho/FsHoxlgvwO2rEZ5njJ0puxgLiCQYoi2w==
<?php
$signatureKey = 'd3d2503c-478e-405d-b453-33e63b1ce962';
echo base64_encode(hash_hmac('sha512', '1.0|{"transactionId":"CR6-75T-KVY-DAV4"}|01J5SXAG3D5MZXCZQ4P567ECQ8|1724226165', $signatureKey, true));
User-Agent required | string Example: Paymentic/1.0 Wersja notyfikacji |
X-Paymentic-Notification-Id required | string <ulid> Example: 01j5sxag3d5mzxczq4p567ecq8 Identyfikator notyfikacji |
X-Paymentic-Time required | string <ISO 8601> Example: 2024-09-20T09:48:03+02:00 Czas wysłania notyfikacji |
X-Paymentic-Signature required | string <base64> Example: 8XYkwtl7wbjf74DUPFab0GP6/us4u91xHectfnxsqr0GQ9aU8Wj/l/g7BSyuwilQ2oVY1Yppnci5/z4CaRPtWQ== Sygnatura notyfikacji |
transactionId required | string (schemas-transactionId) = 13 characters ^[A-Z0-9]{3}-[A-Z0-9]{3}-[A-Z0-9]{3}-[A-Z0-9]... Identyfikator transakcji | ||||||||||||
pointId required | string (pointId) = 8 characters ^[0-9a-f]{8}$ Identyfikator punktu płatności | ||||||||||||
status required | string (transactionStatus) Default: "CREATED" Enum: "CREATED" "PENDING" "PAID" "FAILED" "CANCELLED" Status transakcji
| ||||||||||||
amount required | number <float> Kwota transakcji | ||||||||||||
commission required | number <float> Prowizja przysługująca z transakcji Partnerowi | ||||||||||||
custom required | string or null Pole dodatkowe przeznaczone do wykorzystania przez Partnera | ||||||||||||
msisdn required | string or null^48\d{9}$ Numer telefonu | ||||||||||||
mccmnc required | number or null <int> Kod MCC MNC operatora płatności | ||||||||||||
isTest required | boolean Informacja czy to transakcja testowa |
{- "transactionId": "CR6-75T-KVY-DAV4",
- "pointId": "e99ed63d",
- "status": "PENDING",
- "amount": 14.24,
- "commission": null,
- "custom": null,
- "msisdn": "48987654321",
- "mccmnc": 26001,
- "isTest": false
}
OK
pointId required | string (pointId) = 8 characters ^[0-9a-f]{8}$ Identyfikator punktu płatności |
amount required | number <float> >= 1 Kwota netto transakcji | ||||
title required | string [ 5 .. 32 ] characters Tytuł transakcji wyświetlany na bramce płatniczej i wiadomości SMS z kodem wysyłanym do klienta | ||||
description | string <= 128 characters Szczegółowy opis transakcji wyświetlany na bramce płatniczej | ||||
custom | string <= 64 characters Pole do wykorzystania przez partnera | ||||
msisdn | string (msisdn) ^48\d{9}$ Numer telefonu | ||||
object or null Adresy URL do przekierowania klienta po transakcji | |||||
|
object | |||||||
|
{- "amount": 1,
- "title": "string",
- "description": "string",
- "custom": "string",
- "msisdn": "48987654321",
- "returns": {
- "success": "string",
- "failure": "string"
}
}
{- "data": {
- "id": "692-B0N-BLV-4JI0",
- "isTest": false,
}
}
pointId required | string (pointId) = 8 characters ^[0-9a-f]{8}$ Identyfikator punktu płatności |
transactionId required | string (schemas-transactionId) = 13 characters ^[A-Z0-9]{3}-[A-Z0-9]{3}-[A-Z0-9]{3}-[A-Z0-9]... Identyfikator transakcji |
object | |||||||||||||||||||||||||||||||||||||
|
curl -L -X GET 'https://api.paymentic.com/v1/directbilling/:pointId/transactions/:transactionId' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer {{bearerToken}}'
{- "data": {
- "id": "H9P-DC5-954-C5Q0",
- "status": "PAID",
- "amount": 10.24,
- "currency": "PLN",
- "commission": 4.3,
- "title": "Doładowanie smoczych monet",
- "description": "Gracz doładowuje 30 smocznych monet na serwerze gry",
- "msisdn": "48987654321",
- "mncmcc": 26001,
- "custom": "6d492b3a-2d5e-4fd2-a7b2-5087204f6d6d",
- "paidAt": "2019-08-24T14:15:22+02:00",
- "createdAt": "2019-08-24T14:15:22+02:00"
}
}
API DirectBilling pozwala zwracać całość pobranej kwoty za daną transakcję bezpośrednio na konto użytkownika. Zworty realizowane są przez operatorów.
Po utworzeniu zwrotu otrzyma on status CREATED
następnie musi zostać zaakceptowany przez Paymentic
W przypadku gdy spróbujemy zlecić zwrot dla starszej niż 90 dni, otrzymamy response z kodem 400 i errorCode
TRANSACTION_TOO_OLD
pointId required | string (pointId) = 8 characters ^[0-9a-f]{8}$ Identyfikator punktu płatności |
transactionId required | string (schemas-transactionId) = 13 characters ^[A-Z0-9]{3}-[A-Z0-9]{3}-[A-Z0-9]{3}-[A-Z0-9]... Identyfikator transakcji |
msisdn required | string (msisdn) ^48\d{9}$ Numer telefonu |
reason required | string Enum: "RMA" "OTHER" |
description | string or null [ 10 .. 128 ] characters Opis powodu zwrotu transakcji |
object | |||
|
{- "msisdn": "48987654321",
- "reason": "RMA",
- "description": "stringstri"
}
{- "data": {
- "id": "01J68MV9ETHAWEZS2JH7F8DQZ3"
}
}