{"id":10455,"date":"2023-08-29T15:35:47","date_gmt":"2023-08-29T15:35:47","guid":{"rendered":"https:\/\/www.qly.docs.pay.sibs.com\/powiadomienia\/webhooks\/obsluga-powiadomien\/"},"modified":"2024-04-23T14:23:18","modified_gmt":"2024-04-23T14:23:18","slug":"obsluga-powiadomien","status":"publish","type":"page","link":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/sibs-gateway-dokumentacja\/powiadomienia\/webhooki\/obsluga-powiadomien\/","title":{"rendered":"Obs\u0142uga powiadomie\u0144"},"content":{"rendered":"<!-- wp:themify-builder\/canvas \/-->\n<p>Webhook to interfejs API (FULL CODE), kt\u00f3ry dostarcza w czasie rzeczywistym informacje dotycz\u0105ce zmian w statusie p\u0142atno\u015bci transakcji.<\/p>\n\n<p>Sprzedawcy mog\u0105 otrzymywa\u0107 powiadomienia <strong>drog\u0105 elektroniczn\u0105<\/strong> lub za po\u015brednictwem <strong>punktu ko\u0144cowego<\/strong> (powiadomienie zmontowane dla zapytania o status &#8211; Checkout Status). Dla ka\u017cdej transakcji zostanie jednak wys\u0142ane tylko jedno powiadomienie.<\/p>\n\n<p>Powiadomienia s\u0105 wysy\u0142ane bezpo\u015brednio do punktu ko\u0144cowego (URL) skonfigurowanego przez sprzedawc\u0119. Parametryzacja tego punktu ko\u0144cowego musi by\u0107 wykonana w SIBS BackOffice.<\/p>\n\n<p>Za ka\u017cdym razem, gdy SIBS Gateway otrzyma aktualizacj\u0119 statusu p\u0142atno\u015bci transakcji, zostanie wys\u0142ane powiadomienie z nowym <mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">statusem p\u0142atno\u015bci transakcji.<\/mark> <\/p>\n\n<p>Ka\u017cdego dnia SIBS Gateway wysy\u0142a podsumowuj\u0105c\u0105 wiadomo\u015b\u0107 e-mail z najnowszymi nieudanymi powiadomieniami (wiadomo\u015b\u0107 e-mail musi by\u0107 zarejestrowana w SIBS BackOffice).<\/p>\n\n<p>Nie ma gwarancji co do kolejno\u015bci wiadomo\u015bci, zw\u0142aszcza je\u015bli r\u00f3\u017cnica czasu mi\u0119dzy powiadomieniami jest mniejsza ni\u017c czas potrzebny na ich przetworzenie lub z powodu jakichkolwiek problem\u00f3w komunikacyjnych lub systemowych. Gdy problemy zostan\u0105 rozwi\u0105zane, nowe powiadomienia b\u0119d\u0105 przychodzi\u0107 w czasie rzeczywistym, a stare b\u0119d\u0105 wysy\u0142ane ponownie. Je\u015bli nie otrzymano \u017cadnego powiadomienia, przed odrzuceniem jakiejkolwiek transakcji nale\u017cy skorzysta\u0107 z opcji &#8222;Status realizacji transakcji&#8221;.<\/p>\n\n<p>Powiadomienia s\u0105 wysy\u0142ane jako wywo\u0142ania zwrotne HTTPS (webhooks) do punktu ko\u0144cowego na serwerze. Upewnij si\u0119, \u017ce posiadasz wa\u017cny \u0142a\u0144cuch certyfikat\u00f3w SSL. Certyfikaty z podpisem w\u0142asnym nie s\u0105 wa\u017cne.<\/p>\n\n<h3 class=\"wp-block-heading\">Jak to dzia\u0142a?<\/h3>\n\n<p>Do otrzymywania powiadomie\u0144 potrzebny jest serwer, kt\u00f3ry posiada nast\u0119puj\u0105ce funkcje:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Punkt ko\u0144cowy (Endpoint) zdolny do odbierania \u017c\u0105da\u0144 HTTP <mark style=\"background-color:#d6e9ff\" class=\"has-inline-color\">POST<\/mark>.<\/li>\n\n\n\n<li>Otwarty port TCP dla ruchu HTTPS (port 443 lub 80) z szyfrowaniem TLSv1.2.<\/li>\n<\/ul>\n\n<p>W zale\u017cno\u015bci od sieci i wymaga\u0144 bezpiecze\u0144stwa mo\u017ce by\u0107 r\u00f3wnie\u017c konieczne umieszczenie naszej sieci na bia\u0142ej li\u015bcie zapory sieciowej. Aby upewni\u0107 si\u0119, \u017ce serwer poprawnie obs\u0142uguje powiadomienia, wymagamy potwierdzenia ka\u017cdego typu powiadomienia za pomoc\u0105 HTTP 200 i odpowiedzi zawieraj\u0105cej:<\/p>\n\n<pre class=\"wp-block-code\"><code>{\n      <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"statusCode\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"200\"<\/mark>,\n      <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"statusMsg\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"Success\"<\/mark>,\n      <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"notificationID\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"2533e456-5e36-42c8-9eea-7961902f185e\"<\/mark>\n}<\/code><\/pre>\n\n<p>Gdy serwer otrzyma powiadomienie, powinien:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>odszyfrowa\u0107 powiadomienie<\/li>\n\n\n\n<li>przechowa\u0107 powiadomienie w bazie danych<\/li>\n\n\n\n<li>potwierdzi\u0107 powiadomienie za pomoc\u0105 HTTP 200 OK, jak wyja\u015bniono wcze\u015bniej.<\/li>\n<\/ul>\n\n<h3 class=\"wp-block-heading\">Deszyfrowanie<\/h3>\n\n<p>Tre\u015b\u0107 powiadomienia jest szyfrowana w celu ochrony danych przed pr\u00f3bami oszustwa. Konwertuj\u0105c ci\u0105g znak\u00f3w czytelny dla cz\u0142owieka na format szesnastkowy, u\u017cywamy UTF-8.<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Algorytm szyfrowania: AES<\/li>\n\n\n\n<li>Tryb blokowy: GCM<\/li>\n\n\n\n<li>Wype\u0142nienie: None<\/li>\n\n\n\n<li>Wektor inicjalizacji: w nag\u0142\u00f3wku HTTP (X-Initialization-Vector)<\/li>\n\n\n\n<li>Znacznik uwierzytelniania : W nag\u0142\u00f3wku HTTP (X-Authentication-Tag)<\/li>\n\n\n\n<li>Format tre\u015bci: Base64<\/li>\n\n\n\n<li>Format wektora inicjalizacji: Base64<\/li>\n<\/ul>\n\n<h5 class=\"wp-block-heading\"><strong>Przyk\u0142ad powiadomienia testowego:<\/strong><\/h5>\n\n<pre class=\"wp-block-code singleline\"><code>Secret<strong>:<\/strong> O0Bur9uhZkS54NkwFhVyeutED6DhLbOQUBDt3i3W\/C4=<strong>\n<\/strong>X-Authentication-Tag: Ytw9bzOS1pXqizAKMGXVQ==\nContent-Type: text\/plain\nX-Initialization-Vector: Ldo3OyWNgRchSF3C<\/code><\/pre>\n\n<h5 class=\"wp-block-heading\"><strong>Tre\u015b\u0107 przed odszyfrowaniem:<em> <\/em><\/strong><\/h5>\n\n<pre class=\"wp-block-code singleline\"><code>WgErmJOV6wg3BuRkrgZLUUnh57BYzhIzvBFdpadHRsc43UcjtZEevRGDIDu3YxocXMXe8O+xQpMRxwTJPv766IaNqUiUEjAIjZSMEYCZ0pBursUYB+9nB4eqNUiAS2MJ9sR+Cj2iBf6G6KXLfp9K6dK7c0UED5XrJwbovY8X8pMyxktFTEaflp0e76ZywsCQvtqEtqNz9uYEyqmAANbsBwbwyWpkCC8H1kZN2fV3CYetW1CTPmWdPp3C18Yfh826NN4XlKu1VmUmea70PyjmRKSsjPXpfrRX8udelVIK2WTFtnRxD4x588d1nlGY5D5DQmJ8KYZzfvjTmDXGAPiRIEGuXp8h6rBQXS8P\/m1llBtboGgQv4MmW3zvq0G6KFlYIcM=<\/code><\/pre>\n\n<h5 class=\"wp-block-heading\"><strong>Tre\u015b\u0107 po odszyfrowaniu:<em> <\/em><\/strong><\/h5>\n\n<pre class=\"wp-block-code\"><code>{\n  <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"returnStatus\"<\/mark>: {\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"statusMsg\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"Success\"<\/mark>,\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"statusCode\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"000\"<\/mark>\n  },\n  <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"paymentStatus\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"Success\"<\/mark>,\n  <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"paymentMethod\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"CARD\"<\/mark>,\n  <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"transactionID\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"WebhookTest\"<\/mark>,\n  <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"amount\"<\/mark>: {\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"currency\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"EUR\"<\/mark>,\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"value\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">10.0<\/mark>\n  },\n  <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"merchant\"<\/mark>: {\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"terminalId\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">1000000<\/mark>\n  },\n  <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"paymentType\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"PURS\"<\/mark>,\n  <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"notificationID\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"f153c248-e7be-4c12-8d88-6c9f1f3b83e4\"<\/mark>\n}<\/code><\/pre>\n\n<h5 class=\"wp-block-heading\">Przyk\u0142ady<\/h5>\n\n<p>Poni\u017cej znajduje si\u0119 kilka przyk\u0142ad\u00f3w pokazuj\u0105cych, jak odszyfrowa\u0107 powiadomienie webhook:<\/p>\n\n<div class=\"wp-block-atbs-tabs atbs-tabs-228a152d atbs-tabs-edc02681 atbs-tabs-cd0a91b7\"><div class=\"tabs-container\"><div class=\"tabs-nav\"><ul class=\"tabs-titles\"><li class=\"tab-title icon_left\" data-title-tab-id=\"1\" role=\"button\"><span class=\"tab-title-text\">C#<\/span><\/li><li class=\"tab-title icon_left\" data-title-tab-id=\"2\" role=\"button\"><span class=\"tab-title-text\">Java<\/span><\/li><li class=\"tab-title icon_left\" data-title-tab-id=\"3\" role=\"button\"><span class=\"tab-title-text\">PHP<\/span><\/li><li class=\"tab-title icon_left\" data-title-tab-id=\"4\" role=\"button\"><span class=\"tab-title-text\">Python<\/span><\/li><\/ul><\/div><div class=\"tabs-content\">\n<div class=\"wp-block-atbs-tab\"><div class=\"single-tab\" data-tab-id=\"1\" data-tab-parent-id=\"atbs-tabs-228a152d\">\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">using<\/mark> System;\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">using<\/mark> System.Security.Cryptography;\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">using <\/mark>System.Text; <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">public static class<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">Program<\/mark> {<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">public static void<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">Main<\/mark>() {<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;] secret = System.Convert.FromBase64String(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"6fNDiYU0T0\/evFpmfycNai\/AqF24i+rT0OmuVw0\/sGQ=\"<\/mark>);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;] ciphertext = System.Convert.FromBase64String(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"9bIjURJIcwoKvQr+ifOTH3HbMX+IqmsRqHuG\/I1GfbSX89JE5DcWh\/p8QROC5pRAuYZ7\"<\/mark>+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"ln7RSkHXJdZpVz1LFQ2859WsetvHHui7qYmfxATOO1j0AQuPdAD3FeRH0kR4s\/v3c2nV8\"<\/mark>+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"1DnUXFCnQER\/+VWrYdbu5vn8gm+diSE6CHvkK+ODy0ebVi5O6VBnWVjgBUG33VwWiAyIl\"<\/mark>+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"7Ik435V55WnZgynH3GfbVYoGwZ5UhYtn3yw2yruiLAKu6VTBvnh\/ZJP21cHCJSF6NPSd+8\"<\/mark>+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"1gzWFU\/+ECm3cf3uBbCkmKmL7HxRhRxhG0lMtX6ELZOXuw3eDJ1BTu+sSMkV\/5Xk+5XX48\"<\/mark>+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"XmP6CGZ7KmP7Q3Fw1kZmhn0unFyv0Gw8PjT1Ohny\/HMgNl16I=\"<\/mark>);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;] nonce = System.Convert.FromBase64String(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"RYjpCMtUmK54T6Lk\"<\/mark>);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;] tag = System.Convert.FromBase64String(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"FUajWHmZjP4A5qaa1G0kxw==\"<\/mark>);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">using<\/mark> (<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">var<\/mark> aes = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">new<\/mark> AesGcm(secret))\n\n\t\t{<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">var<\/mark> plaintextBytes = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">new<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;ciphertext.Length];\n\naes.Decrypt(nonce, ciphertext, tag, plaintextBytes);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">string<\/mark> decrypt = Encoding.UTF8.GetString(plaintextBytes);\n\n\t\t\tConsole.WriteLine(decrypt);\n\t\t}\n\t}\n}<\/code><\/pre>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-atbs-tab\"><div class=\"single-tab\" data-tab-id=\"2\" data-tab-parent-id=\"atbs-tabs-228a152d\">\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">import<\/mark> java.security.Security;\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">import<\/mark> java.util.Base64;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">import<\/mark> javax.crypto.Cipher;\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">import<\/mark> javax.crypto.spec.IvParameterSpec;\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">import<\/mark> javax.crypto.spec.SecretKeySpec;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">import<\/mark> com.google.common.base.Charsets;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">import<\/mark> org.apache.commons.lang3.ArrayUtils;\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">import <\/mark>org.bouncycastle.jce.provider.BouncyCastleProvider;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">\/\/ For Java and JVM-based languages, you might need to install unrestricted policy file for JVM,\n\/\/ which is provided by Sun. Please refer BouncyCastle FAQ if you get\n\/\/ java.lang.SecurityException: Unsupported keysize or algorithm parameters or\n\/\/ java.security.InvalidKeyException: Illegal key size.\n\n\/\/ If you cannot install unrestricted policy file for JVM because of some reason, you can try with reflection: See here.<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">public class<\/mark> Test {<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">public static void<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">main<\/mark>(String&#91;] args) {<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">try<\/mark> {\n Security.addProvider(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">new<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">BouncyCastleProvider<\/mark>());<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">\/\/ Data from configuration<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">String keyFromConfiguration<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"6fNDiYU0T0\/evFpmfycNai\/AqF24i+rT0OmuVw0\/sGQ=\"<\/mark>;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">\/\/<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">Data from server<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">String ivFromHttpHeader<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"RYjpCMtUmK54T6Lk\"<\/mark>;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">String authTagFromHttpHeader<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"FUajWHmZjP4A5qaa1G0kxw==\"<\/mark>;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">String<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">httpBody<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"9bIjURJIcwoKvQr+ifOTH3HbMX+IqmsRqHuG\/I1GfbSX89JE5DcWh\/p8QROC5pRAuYZ7\"<\/mark>\n+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"ln7RSkHXJdZpVz1LFQ2859WsetvHHui7qYmfxATOO1j0AQuPdAD3FeRH0kR4s\/v3c2nV8\"<\/mark>\n+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"1DnUXFCnQER\/+VWrYdbu5vn8gm+diSE6CHvkK+ODy0ebVi5O6VBnWVjgBUG33VwWiAyIl\"<\/mark>\n+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"7Ik435V55WnZgynH3GfbVYoGwZ5UhYtn3yw2yruiLAKu6VTBvnh\/ZJP21cHCJSF6NPSd+8\"<\/mark>\n+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"1gzWFU\/+ECm3cf3uBbCkmKmL7HxRhRxhG0lMtX6ELZOXuw3eDJ1BTu+sSMkV\/5Xk+5XX48\"<\/mark>\n+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"XmP6CGZ7KmP7Q3Fw1kZmhn0unFyv0Gw8PjT1Ohny\/HMgNl16I=\"<\/mark>;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">\/\/ Convert data to process<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;] key = Base64.getDecoder().decode(keyFromConfiguration);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;] iv = Base64.getDecoder().decode(ivFromHttpHeader);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;] authTag = Base64.getDecoder().decode(authTagFromHttpHeader);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;] encryptedText = Base64.getDecoder().decode(httpBody);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">\/\/ Unlike other programming language, We have to append auth tag at the end of\n \/\/ encrypted text in Java<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;] cipherText = ArrayUtils.addAll(encryptedText, authTag);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">\/\/ Prepare decryption<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">SecretKeySpec keySpec<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">new<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">SecretKeySpe<\/mark>c(key, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">0<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">32<\/mark>, \"AES\");<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">Cipher cipher<\/mark> = Cipher.getInstance(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"AES\/GCM\/NoPadding\"<\/mark>);\n cipher.init(Cipher.DECRYPT_MODE, keySpec, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">new<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">IvParameterSpec<\/mark>(iv));\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">\/\/ Decrypt<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;] bytes = cipher.doFinal(cipherText);\n System.out.println(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">new<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">String<\/mark>(bytes, Charsets.UTF_8));\n\n } <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">catch<\/mark> (Exception e) {\n e.printStackTrace();\n }\n }\n}<\/code><\/pre>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-atbs-tab\"><div class=\"single-tab\" data-tab-id=\"3\" data-tab-parent-id=\"atbs-tabs-228a152d\">\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">function<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">sodium_decrypt<\/mark>( <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$webhookSecret<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$iv_from_http_header<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$http_body<\/mark> , <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$auth_tag_from_http_header<\/mark> ){<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$key<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">mb_convert_encoding<\/mark>(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$webhookSecret<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"UTF-8\"<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"BASE64\"<\/mark>);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$iv<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">mb_convert_encoding<\/mark>(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$iv_from_http_header<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"UTF-8\"<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"BASE64\"<\/mark>);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$cipher_text<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">mb_convert_encoding<\/mark>(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$http_body<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"UTF-8\"<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"BASE64\"<\/mark>) . <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">mb_convert_encoding<\/mark>(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$auth_tag_from_http_header<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"UTF-8\"<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"BASE64\"<\/mark>);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$result<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">sodium_crypto_aead_aes256gcm_decrypt<\/mark>(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$cipher_text<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$iv<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$key<\/mark>);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">return<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$result<\/mark>;\n\n}<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$webhookSecret<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"6fNDiYU0T0\/evFpmfycNai\/AqF24i+rT0OmuVw0\/sGQ=\"<\/mark>;\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$iv_from_http_header<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"RYjpCMtUmK54T6Lk\"<\/mark>;\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$auth_tag_from_http_header<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"FUajWHmZjP4A5qaa1G0kxw==\"<\/mark>;\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$http_body<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"9bIjURJIcwoKvQr+ifOTH3HbMX+IqmsRqHuG\/I1GfbSX89JE5DcWh\/p8QROC5pRAuYZ7\"<\/mark> .\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"ln7RSkHXJdZpVz1LFQ2859WsetvHHui7qYmfxATOO1j0AQuPdAD3FeRH0kR4s\/v3c2nV8\"<\/mark> .\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"1DnUXFCnQER\/+VWrYdbu5vn8gm+diSE6CHvkK+ODy0ebVi5O6VBnWVjgBUG33VwWiAyIl\"<\/mark> .\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"7Ik435V55WnZgynH3GfbVYoGwZ5UhYtn3yw2yruiLAKu6VTBvnh\/ZJP21cHCJSF6NPSd+8\"<\/mark> .\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"1gzWFU\/+ECm3cf3uBbCkmKmL7HxRhRxhG0lMtX6ELZOXuw3eDJ1BTu+sSMkV\/5Xk+5XX48\"<\/mark> .\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"XmP6CGZ7KmP7Q3Fw1kZmhn0unFyv0Gw8PjT1Ohny\/HMgNl16I=\"<\/mark>;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">\/\/ Decrypt message<\/mark>\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$result<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">sodium_decrypt<\/mark>(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$webhookSecret<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$iv_from_http_header<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$http_body<\/mark> , <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$auth_tag_from_http_header<\/mark>);<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">print<\/mark>(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">$result<\/mark>);<\/code><\/pre>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-atbs-tab\"><div class=\"single-tab\" data-tab-id=\"4\" data-tab-parent-id=\"atbs-tabs-228a152d\">\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">import<\/mark> base64\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">from<\/mark> Cryptodome.Cipher <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">import<\/mark> AES <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">def<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">decrypt_AES_GCM<\/mark>(encryptedMsg, authTag, secretKey, iv):\n iv = base64.b64decode(iv)\n encryptedMsg = base64.b64decode(encryptedMsg)\n secretKey = base64.b64decode(secretKey)\n authTag = base64.b64decode(authTag)\n aesCipher = AES.new(secretKey, AES.MODE_GCM, iv)\n plaintext = aesCipher.decrypt_and_verify(encryptedMsg, authTag)<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">return<\/mark> plaintext\n\n example = {<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"encoded\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"9bIjURJIcwoKvQr+ifOTH3HbMX+IqmsRqHuG\/I1GfbSX89JE5DcWh\/p8QROC5pRAuYZ7\"<\/mark> \\\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"ln7RSkHXJdZpVz1LFQ2859WsetvHHui7qYmfxATOO1j0AQuPdAD3FeRH0kR4s\/v3c2nV8\"<\/mark> \\\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"1DnUXFCnQER\/+VWrYdbu5vn8gm+diSE6CHvkK+ODy0ebVi5O6VBnWVjgBUG33VwWiAyIl\"<\/mark> \\\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"7Ik435V55WnZgynH3GfbVYoGwZ5UhYtn3yw2yruiLAKu6VTBvnh\/ZJP21cHCJSF6NPSd+8\"<\/mark> \\\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"1gzWFU\/+ECm3cf3uBbCkmKmL7HxRhRxhG0lMtX6ELZOXuw3eDJ1BTu+sSMkV\/5Xk+5XX48\"<\/mark>\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"XmP6CGZ7KmP7Q3Fw1kZmhn0unFyv0Gw8PjT1Ohny\/HMgNl16I=\"<\/mark>,<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"iv\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"RYjpCMtUmK54T6Lk\"<\/mark>,<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"tag\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"FUajWHmZjP4A5qaa1G0kxw==\"<\/mark>,<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"secret\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"6fNDiYU0T0\/evFpmfycNai\/AqF24i+rT0OmuVw0\/sGQ=\"<\/mark>}\n\n\nresult = decrypt_AES_GCM(example&#91;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">'encoded'<\/mark>], example&#91;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">'tag'<\/mark>], example&#91;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">'secret'<\/mark>], example&#91;'iv'])\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">print<\/mark>(result)<\/code><\/pre>\n<\/div><\/div>\n<\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Webhook to interfejs API (FULL CODE), kt\u00f3ry dostarcza w czasie rzeczywistym informacje dotycz\u0105ce zmian w statusie p\u0142atno\u015bci transakcji. Sprzedawcy mog\u0105 otrzymywa\u0107 powiadomienia drog\u0105 elektroniczn\u0105 lub za po\u015brednictwem punktu ko\u0144cowego (powiadomienie zmontowane dla zapytania o status &#8211; Checkout Status). Dla ka\u017cdej transakcji zostanie jednak wys\u0142ane tylko jedno powiadomienie. Powiadomienia s\u0105 wysy\u0142ane bezpo\u015brednio do punktu ko\u0144cowego (URL) [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":10428,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_eb_attr":"","footnotes":""},"class_list":["post-10455","page","type-page","status-publish","hentry","has-post-title","has-post-date","has-post-category","has-post-tag","has-post-comment","has-post-author",""],"acf":[],"builder_content":"","_links":{"self":[{"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/pages\/10455","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/comments?post=10455"}],"version-history":[{"count":2,"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/pages\/10455\/revisions"}],"predecessor-version":[{"id":10685,"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/pages\/10455\/revisions\/10685"}],"up":[{"embeddable":true,"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/pages\/10428"}],"wp:attachment":[{"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/media?parent=10455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}