{"id":11901,"date":"2021-12-09T20:14:37","date_gmt":"2021-12-09T19:14:37","guid":{"rendered":"https:\/\/www.tomislavstankovic.com\/blog\/?p=11901"},"modified":"2021-12-10T18:33:07","modified_gmt":"2021-12-10T17:33:07","slug":"corvuspay-payment-gateway-nodejs","status":"publish","type":"post","link":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/","title":{"rendered":"Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular"},"content":{"rendered":"<p>U ovom blog postu mo\u017eete saznati kako implementirati <em>CorvusPay<\/em> karti\u010dno pla\u0107anje koriste\u0107i <em><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/node-js-resursi\/\" rel=\"noopener noreferrer\" target=\"_blank\">Node.js<\/a><\/em> tj. <em>Express.js<\/em> i <em><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/angular-framework-resursi\/\" rel=\"noopener noreferrer\" target=\"_blank\">Angular Framework<\/a><\/em>.<\/p>\n<p>Karti\u010dno pla\u0107anje provodi se kroz <em><strong>Corvus Form Service<\/strong><\/em> \u0161to zna\u010di da korisnik nakon odabira artikala bude <strong>preusmjeren na URL za autorizaciju kreditne kartice<\/strong>. Na tom URL-u ispunjava se obrazac s potrebnim podacima o kreditnoj kartici nakon \u010dega korisnik ponovno bude preusmjeren na web shop gdje se naj\u010de\u0161\u0107e prikazuje poruka o ne\/uspje\u0161noj kupovini.<\/p>\n<blockquote><p>Tijek transakcije kroz CorvusPay sustav odvija se na sljede\u0107i na\u010din:<\/p>\n<ul>\n<li>Kupac u web trgovini odabire proizvod ili uslugu koju \u017eeli platiti karticom.<\/li>\n<li>Kupac se preusmjerava sa stranice trgovca na CorvusPay platnu formu (stranicu) gdje unosi podatke potrebne za realizaciju karti\u010dne transakcije.<\/li>\n<li>CorvusPay \u0161alje banci zahtjev za autorizacijom.<\/li>\n<li>Banka \u0161alje odgovor na zahtjev za autorizacijom na CorvusPay.<\/li>\n<li>CorvusPay preusmjerava kupca na cancel ili success url kojeg definira trgovac ovisno o ishodu transakcije.<\/li>\n<\/ul>\n<\/blockquote>\n<p>Mogu\u0107a je i integracija tog obrasca unutar web shopa, ali u tom slu\u010daju trgovac mora imati <em>PCI DSS<\/em> certifikat.<\/p>\n<h2>Tijek implementacije<\/h2>\n<p><a href=\"https:\/\/cps.corvus.hr\/public\/corvuspay\/\" rel=\"noopener\" target=\"_blank\">Proces se istovremeno odvija u dva smjera<\/a>. Prvi se ti\u010de <strong>administrativnih poslova<\/strong> u kojima <em>Corvus<\/em> od trgovca prikuplja potrebnu dokumentaciju za pokretanje procesa aktivacije karti\u010dnog pla\u0107anje koju proslje\u0111uje prema bankama\/karti\u010dnim ku\u0107ama.<\/p>\n<p>Paralelno <strong>trgovac (<em>web shop<\/em>) postavlja obavezan sadr\u017eaj na web trgovinu (uvjeti kori\u0161tenja i pla\u0107anja, logo <em>CorvusPaya<\/em>,&#8230;), vr\u0161i implementaciju prema dostupnim uputama i testira<\/strong> sustav pomo\u0107u razvojnog certifikata. Nakon obavljenih testova postavlja se produkcijski certifikat \u010dime se proces implementacije zavr\u0161ava.<\/p>\n<h2>Uvod<\/h2>\n<p>Komunikacija izme\u0111u trgovca i usluge <em>CorvusPay<\/em> vr\u0161i se putem <em>HTTPS POST<\/em> web zahtjeva.<\/p>\n<p>Svaki web zahtjev prema <em>Corvusu<\/em> treba <strong>obavezno sadr\u017eavati tri parametra<\/strong>, a to su: <\/p>\n<p>&#8211; <em>Store ID<\/em><br \/>\n&#8211; <em>Secret Key<\/em><br \/>\n&#8211; <em>Client Certificate (.p12)<\/em>. <\/p>\n<p>Dobiju se dva seta ovih podataka. Jedan set za testiranje, a drugi za produkciju.<\/p>\n<h2>Obavezni CorvusPay parametri<\/h2>\n<p>Obavezni parametri su: <em>version<\/em>, <em>store_id<\/em>, <em>order_number<\/em>, <em>language<\/em>, <em>currency<\/em>, <em>amount<\/em>, <em>cart<\/em>, <em>signature<\/em> i <em>require_complete<\/em>.<\/p>\n<p>U slu\u010daju gre\u0161ke pri kreiranju parametara prikazat \u0107e se sljede\u0107i ekran:<\/p>\n<figure id=\"attachment_14533\" aria-describedby=\"caption-attachment-14533\" style=\"width: 974px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-greska.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-greska.png\" alt=\"CorvusPay gre\u0161ka\" width=\"974\" height=\"401\" class=\"size-full wp-image-14533\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-greska.png 974w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-greska-300x124.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-greska-768x316.png 768w\" sizes=\"auto, (max-width: 974px) 100vw, 974px\" \/><\/a><figcaption id=\"caption-attachment-14533\" class=\"wp-caption-text\">Va\u0161 zahtjev ne mo\u017ee biti obra\u0111en &#8211; CorvusPay<\/figcaption><\/figure>\n<p><em><strong>order_number<\/strong><\/em> mora biti jedinstven jer sustav \u0107e provjeriti i odbiti svaki upit na <em>Corvus API<\/em> ako narud\u017eba s istim brojem narud\u017ebe ve\u0107 postoji.<\/p>\n<p><em><strong>signature<\/strong><\/em> se kreira koriste\u0107i <em><a href=\"https:\/\/en.wikipedia.org\/wiki\/HMAC\" rel=\"noopener noreferrer\" target=\"_blank\">HMAC-SHA256<\/a><\/em>. On se sastoji od svih obaveznih i opcionalnih vrijednosti (<em>key-value field pairs<\/em>), poredanih abecedno i spojenih bez razmaka.<\/p>\n<p>To onda izgleda ovako:  <\/p>\n<pre class=\"lang:default decode:true \" >amount10.00cartkindlepaperwhitecurrencyHRKlanguagehrorder_number1537270065109require_completefalsestore_id2029version1.3<\/pre>\n<p> na osnovu \u010dega se dobije <em>signature<\/em> <\/p>\n<pre class=\"lang:default decode:true \" >6cc62fa239555f790b5665d4b002faa5b1d90ded5e4caa3e70d37a4db88d6d51<\/pre>\n<p><em>signature<\/em> = HMAC-256(key, key-value field pairs)<\/p>\n<p>~ klju\u010d: UNV3-i2otJw0rUWzA2lpcNRqTOYRWdAeTw<br \/>\n~ parametri:<br \/>\n   &#8211; version : 1.3<br \/>\n   &#8211; store_id : 2029<br \/>\n   &#8211; order_number : 1537270065109<br \/>\n   &#8211; amount : 10.00<br \/>\n   &#8211; currency : HRK<br \/>\n   &#8211; cart : <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/kindle-paperwhite-4-2018-8gb\/\" rel=\"noopener noreferrer\" target=\"_blank\">kindle paperwhite<\/a><br \/>\n   &#8211; require_complete : false<br \/>\n   &#8211; language : hr<\/p>\n<figure id=\"attachment_12804\" aria-describedby=\"caption-attachment-12804\" style=\"width: 666px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-HTTPS-POST.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-HTTPS-POST.jpg\" alt=\"CorvusPay HTTPS POST\" width=\"666\" height=\"881\" class=\"size-full wp-image-12804\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-HTTPS-POST.jpg 666w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-HTTPS-POST-227x300.jpg 227w\" sizes=\"auto, (max-width: 666px) 100vw, 666px\" \/><\/a><figcaption id=\"caption-attachment-12804\" class=\"wp-caption-text\">CorvusPay Integration Manual v5.1.0<\/figcaption><\/figure>\n<h2>Neobavezni CorvusPay parametri<\/h2>\n<p>Osim obaveznih parametara mogu\u0107e je koristiti i neobavezne. U ovom slu\u010daju to \u0107e biti <strong>parametri vezani uz pla\u0107anje na rate<\/strong>.<\/p>\n<p>Tri su na\u010dina pokretanja transakcije na rate:<br \/>\n\u2022 Fiksni broj rata<br \/>\n\u2022 Fleksibilan broj rata<br \/>\n\u2022 Samostalan odabir rata za odre\u0111enu karticu<\/p>\n<p>Napomene:<br \/>\n\u2022 Ako se za odre\u0111enu platnu karticu ne po\u0161alje parametar <em>payment_brandName<\/em> kartica ne\u0107e biti dostupna za odabir<br \/>\n\u2022 Prvi znak parametra <em>payment_<brandName><\/em> trebao bi biti jednak N ili Y jer to ozna\u010dava je li dozvoljeno jednokratno pla\u0107anje ili ne<br \/>\n\u2022 Posljednja \u010detiri znaka odre\u0111uju raspon broja rata. Kupac mo\u017ee odabrati broj rata u rasponu izme\u0111u prvog dvoznamenkastog broja i drugog dvoznamenkastog broja<\/p>\n<figure id=\"attachment_12829\" aria-describedby=\"caption-attachment-12829\" style=\"width: 617px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-rate.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-rate.jpg\" alt=\"CorvusPay pla\u0107anje na rate\" width=\"617\" height=\"606\" class=\"size-full wp-image-12829\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-rate.jpg 617w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-rate-300x295.jpg 300w\" sizes=\"auto, (max-width: 617px) 100vw, 617px\" \/><\/a><figcaption id=\"caption-attachment-12829\" class=\"wp-caption-text\">CorvusPay Integration Manual v5.1.0<\/figcaption><\/figure>\n<h2>Web aplikacija (<em>Angular<\/em>)<\/h2>\n<p>Unutar forme pomo\u0107u <em>POST<\/em> metode poziva se <em>API<\/em> za pokretanje karti\u010dnog pla\u0107anja.<\/p>\n<p>Sve navedene vrijednosti su promjenjive tako da ih prilikom svake promjene unutar <span class=\"lang:default decode:true  crayon-inline \" >.ts<\/span> datoteke treba osvje\u017eiti i unutar forme  <span class=\"lang:xhtml decode:true  crayon-inline \" >&lt;\/form&gt;<\/span>.<\/p>\n<p>Parametri <span class=\"lang:default decode:true  crayon-inline\">signature<\/span> i <span class=\"lang:default decode:true  crayon-inline\">payment_<\/span> mogu se kreirati na <em>frontendu<\/em> i <em>backendu<\/em>. U ovom slu\u010daju oni \u0107e se kreirati na <em>frontendu<\/em> i proslje\u0111ivati kroz formu na <em>API<\/em>.<\/p>\n<pre class=\"lang:html decode:true\">\r\n<form [action]=\"'https:\/\/localhost:3000\/api\/corvus\/'\" ngNoForm method=\"POST\" target=\"_self\">\r\n  <button [disabled]=\"disableSecondClick\" class=\"btn-pay\" type=\"submit\">Plati karticom<\/button>\r\n  <div hidden>\r\n       <input name='order_number' value='{{orderNumber}}'>\r\n       <input name='amount' value='{{paymentForm.value.amount}}'>\r\n       <input name='cart' value='{{paymentForm.value.cart}}'>\r\n       <input name='signature' value='{{paymentForm.value.signature}}'>\r\n       <input name='payment_visa' value='{{paymentForm.value.payment_visa}}'>\r\n       <input name='payment_master' value='{{paymentForm.value.payment_master}}'>\r\n       <input name='payment_maestro' value='{{paymentForm.value.payment_maestro}}'>\r\n       <input name='payment_diners' value='{{paymentForm.value.payment_diners}}'>\r\n  <\/div>\r\n<\/form><\/pre>\n<p>Za potrebu kreiranja <em>HmacSHA256<\/em> potpisa koristi se <a href=\"https:\/\/www.npmjs.com\/package\/crypto-js\" rel=\"noopener\" target=\"_blank\"><em>crypto-js<\/em><\/a>. Uz to, unutar <em><a href=\"https:\/\/angular.io\/guide\/build#configuring-application-environments\" rel=\"noopener\" target=\"_blank\">environment<\/a><\/em> varijable nalaze se razvojni i produkcijski parametri <em>secretKey<\/em> i <em>storeId<\/em>.<\/p>\n<pre class=\"lang:js decode:true\">\r\nimport * as crypto from 'crypto-js';\r\nimport * as HmacSHA256 from 'crypto-js\/hmac-sha256';\r\n\r\nimport { environment } from '.\/..\/..\/environments\/environment';\r\n\r\n...\r\n<\/pre>\n<p>Glavna razlika u ovom dijelu ti\u010de se ukupne cijene tj. ovisno o tome prelazi li iznos od 500kn pla\u0107anje na rate biti \u0107e odobreno ili onemogu\u0107eno. U oba slu\u010daja kreira se razli\u010dit <span class=\"lang:default decode:true  crayon-inline \" >signature<\/span>.<\/p>\n<p>Za ukupan iznos ve\u0107i ili jednak 500kn koristi se sljede\u0107e:<\/p>\n<pre class=\"lang:js decode:true\">\r\nthis.value_pairs=\"amount\"+this.amountTotal.toFixed(2)+\r\n                 \"cart\"+this.orderedItem+\r\n                 \"currencyHRK\"+\r\n                 \"languagehr\"+\r\n                 \"order_number\"+this.orderNumber+\r\n                 \"payment_all_dynamictrue\"+\r\n                 \"payment_dinersY0112\"+\r\n                 \"payment_maestroY0112\"+\r\n                 \"payment_masterY0112\"+\r\n                 \"payment_visaY0112\"+\"require_completefalse\"+\r\n                 \"store_id\"+environment.storeId+\r\n                 \"version1.3\";\r\nthis.signature = HmacSHA256(this.value_pairs,environment.secretKey).toString(crypto.enc.Hex);\r\nthis.paymentForm.patchValue({\r\n        amount: this.amountTotal.toFixed(2),\r\n        signature: this.signature,\r\n        payment_visa: 'Y0112',\r\n        payment_master: 'Y0112',\r\n        payment_maestro: 'Y0112',\r\n        payment_diners: 'Y0112'\r\n});\r\n<\/pre>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-rate.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-rate.png\" alt=\"CorvusPay - pla\u0107anje na rate\" width=\"1312\" height=\"620\" class=\"aligncenter size-full wp-image-14535\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-rate.png 1312w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-rate-300x142.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-rate-1024x484.png 1024w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-rate-768x363.png 768w\" sizes=\"auto, (max-width: 1312px) 100vw, 1312px\" \/><\/a><\/p>\n<p>Dok se za iznose manje od 500kn koristi:<\/p>\n<pre class=\"lang:js decode:true\">\r\nthis.value_pairs=\"amount\"+this.amountTotal.toFixed(2)+\r\n                 \"cart\"+this.orderedItem+\r\n                 \"currencyHRK\"+\r\n                 \"languagehr\"+\r\n                 \"order_number\"+this.orderNumber+\r\n                 \"payment_all_dynamictrue\"+\r\n                 \"payment_dinersY0000\"+\r\n                 \"payment_maestroY0000\"+\r\n                 \"payment_masterY0000\"+\r\n                 \"payment_visaY0000\"+\r\n                 \"require_completefalse\"+\r\n                 \"store_id\"+environment.storeId+\r\n                 \"version1.3\";\r\nthis.signature = HmacSHA256(this.value_pairs,environment.secretKey).toString(crypto.enc.Hex);\r\nthis.paymentForm.patchValue({\r\n         amount: this.amountTotal.toFixed(2),\r\n         signature: this.signature,\r\n         payment_visa: 'Y0000',\r\n         payment_master: 'Y0000',\r\n         payment_maestro: 'Y0000',\r\n         payment_diners: 'Y0000'\r\n});\r\n<\/pre>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-jednokratno.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-jednokratno.png\" alt=\"CorvusPay - jednokratno pla\u0107anje\" width=\"1296\" height=\"599\" class=\"aligncenter size-full wp-image-14537\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-jednokratno.png 1296w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-jednokratno-300x139.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-jednokratno-1024x473.png 1024w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-jednokratno-768x355.png 768w\" sizes=\"auto, (max-width: 1296px) 100vw, 1296px\" \/><\/a><\/p>\n<h2>Backend API (<em>Express.js<\/em>)<\/h2>\n<p><em>Backend<\/em> logika nalazit \u0107e se u <em><strong>server.js<\/strong><\/em> datoteci. Kako ju kreirati mo\u017eete se vidjeti u blog postu &#8220;<a href=\"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/\" rel=\"noopener\" target=\"_blank\">Izrada RESTful API-ja koriste\u0107i Node.js i Express.js<\/a>&#8220;. Razlika izme\u0111u primjera iz tog blog posta i ovoga sada je \u0161to <a href=\"https:\/\/medium.com\/@mmajdanski\/express-body-parser-and-why-may-not-need-it-335803cd048c\" rel=\"noopener\" target=\"_blank\">vi\u0161e nije potrebno koristiti <em>body-parser<\/em><\/a>.<\/p>\n<pre class=\"lang:js decode:true \" title=\"server.js\" >var express = require('express');\r\nvar app = express();\r\n\r\napp.use(express.json());\r\napp.use(express.urlencoded({ extended: true }));\r\napp.use('\/api', apiRoutes);\r\n\r\nvar port = process.env.PORT || 3000;\r\n \r\nvar apiRoutes = express.Router();\r\n\r\napiRoutes.get('\/', function(req, res) {\r\n    res.json({ message: 'CorvusPay API je pokrenut!' });\r\n});\r\n\r\n...\r\n\r\napp.listen(port);<\/pre>\n<p>Ova \u0107e se datoteka sastojati od tri krajnje to\u010dke (<em><a href=\"https:\/\/en.wikipedia.org\/wiki\/Web_API#Endpoints\" rel=\"noopener\" target=\"_blank\">API endpoints<\/a><\/em>).<\/p>\n<p>Prva krajnja to\u010dka, <span class=\"lang:js decode:true  crayon-inline\">&#8216;\/corvusPay&#8217;<\/span>, preusmjerit \u0107e korisnika na formu za pla\u0107anje.<\/p>\n<pre class=\"lang:js decode:true \" >apiRoutes.post('\/corvusPay', function(req, res) {\r\n    if(req.body.order_number &amp;&amp; req.body.amount){\r\n        res.status(301).redirect(307, 'https:\/\/test-wallet.corvuspay.com\/checkout\/?store_id=2029&amp;order_number='+req.body.order_number+'&amp;language=hr&amp;currency=HRK&amp;amount='+req.body.amount+'&amp;cart='+req.body.cart+'&amp;signature='+req.body.signature+'&amp;require_complete=false&amp;version=1.3&amp;payment_all_dynamic=true&amp;payment_visa='+req.body.payment_visa+'&amp;payment_master='+req.body.payment_master+'&amp;payment_maestro='+req.body.payment_maestro+'&amp;payment_diners='+req.body.payment_diners)\r\n    } else {\r\n        res.json({\r\n            success: false,\r\n            status: 502,\r\n            message: 'Gre\u0161ka, ne \u0161aljete sve potrebne podatke za pla\u0107anje!'\r\n        });\r\n    }\r\n});<\/pre>\n<p>Nakon unosa i obrade podataka o kartici<\/p>\n<figure id=\"attachment_14539\" aria-describedby=\"caption-attachment-14539\" style=\"width: 975px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-obrada.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-obrada.png\" alt=\"CorvusPay - obrada u tijeku\" width=\"975\" height=\"477\" class=\"size-full wp-image-14539\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-obrada.png 975w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-obrada-300x147.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-obrada-768x376.png 768w\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" \/><\/a><figcaption id=\"caption-attachment-14539\" class=\"wp-caption-text\">CorvusPay &#8211; obrada u tijeku<\/figcaption><\/figure>\n<p>korisnik je preusmjeren na dodatnu sigurnosnu autentifikaciju kartice.<\/p>\n<figure id=\"attachment_14542\" aria-describedby=\"caption-attachment-14542\" style=\"width: 1025px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Erste-Visa-SMS.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Erste-Visa-SMS.png\" alt=\"CorvusPay - sigurnosna autentifikacija kartice\" width=\"1025\" height=\"421\" class=\"size-full wp-image-14542\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Erste-Visa-SMS.png 1025w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Erste-Visa-SMS-300x123.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Erste-Visa-SMS-768x315.png 768w\" sizes=\"auto, (max-width: 1025px) 100vw, 1025px\" \/><\/a><figcaption id=\"caption-attachment-14542\" class=\"wp-caption-text\">CorvusPay &#8211; sigurnosna autentifikacija kartice<\/figcaption><\/figure>\n<p>Ako je sve pro\u0161lo uspje\u0161no korisniku \u0107e se prikazati obavijest <\/p>\n<figure id=\"attachment_14548\" aria-describedby=\"caption-attachment-14548\" style=\"width: 972px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-transakcija-uspjela.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-transakcija-uspjela.png\" alt=\"CorvusPay - transakcija-uspjela\" width=\"972\" height=\"189\" class=\"size-full wp-image-14548\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-transakcija-uspjela.png 972w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-transakcija-uspjela-300x58.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-transakcija-uspjela-768x149.png 768w\" sizes=\"auto, (max-width: 972px) 100vw, 972px\" \/><\/a><figcaption id=\"caption-attachment-14548\" class=\"wp-caption-text\">CorvusPay &#8211; transakcija uspjela<\/figcaption><\/figure>\n<p>i na e-mail \u0107e dobiti obavijest o uspje\u0161noj narud\u017ebi.<\/p>\n<figure id=\"attachment_14545\" aria-describedby=\"caption-attachment-14545\" style=\"width: 826px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-email-obavijest.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-email-obavijest.png\" alt=\"CorvusPay - obavijest o uspje\u0161noj narud\u017ebi\" width=\"826\" height=\"448\" class=\"size-full wp-image-14545\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-email-obavijest.png 826w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-email-obavijest-300x163.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-email-obavijest-768x417.png 768w\" sizes=\"auto, (max-width: 826px) 100vw, 826px\" \/><\/a><figcaption id=\"caption-attachment-14545\" class=\"wp-caption-text\">CorvusPay &#8211; obavijest o uspje\u0161noj narud\u017ebi<\/figcaption><\/figure>\n<p>Druga krajnja to\u010dka,  <span class=\"lang:js decode:true  crayon-inline \" >&#8216;\/corvusPaySuccess&#8217;<\/span> , prihva\u0107a odgovor od <em>Corvusa<\/em> kada je pla\u0107anje uspje\u0161no provedeno.<\/p>\n<pre class=\"lang:js decode:true   \" >apiRoutes.post('\/corvusPaySuccess', function(req, res) {\r\n    res.status(200).redirect(301, 'https:\/\/localhost\/success\/'+req.body.order_number)\r\n    ...\r\n});<\/pre>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Success-URL.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Success-URL.png\" alt=\"CorvusPay - uspje\u0161no pla\u0107anje\" width=\"743\" height=\"262\" class=\"aligncenter size-full wp-image-14557\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Success-URL.png 743w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Success-URL-300x106.png 300w\" sizes=\"auto, (max-width: 743px) 100vw, 743px\" \/><\/a><\/p>\n<p>Tre\u0107a krajnja to\u010dka,  <span class=\"lang:js decode:true    crayon-inline \" >&#8216;\/corvusPayCancel&#8217;<\/span> , prihva\u0107a odgovor od <em>Corvusa<\/em> kada je pla\u0107anje neuspje\u0161no ili otkazano.<\/p>\n<pre class=\"lang:js decode:true     \" >apiRoutes.post('\/corvusPayCancel', function(req, res) {\r\n    res.status(200).redirect(301, 'https:\/\/localhost\/cancel\/'+req.body.order_number)\r\n    ...\r\n});<\/pre>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Cancel-URL.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Cancel-URL.png\" alt=\"CorvusPay - neuspjelo pla\u0107anje\" width=\"743\" height=\"262\" class=\"aligncenter size-full wp-image-14555\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Cancel-URL.png 743w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/CorvusPay-Cancel-URL-300x106.png 300w\" sizes=\"auto, (max-width: 743px) 100vw, 743px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>U ovom blog postu mo\u017eete saznati kako implementirati CorvusPay karti\u010dno pla\u0107anje koriste\u0107i Node.js tj. Express.js i Angular Framework. Karti\u010dno pla\u0107anje provodi se kroz Corvus Form Service \u0161to zna\u010di da korisnik nakon odabira artikala bude preusmjeren na URL za autorizaciju kreditne kartice. Na tom URL-u ispunjava se obrazac s potrebnim podacima o kreditnoj kartici nakon \u010dega &hellip; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/\" class=\"more-link\">Nastavi \u010ditati <span class=\"screen-reader-text\">Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":12760,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[351],"tags":[600,659,375,660,661],"class_list":["post-11901","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-razvoj","tag-angular-framework","tag-corvuspay","tag-express-js","tag-karticno-placanje","tag-payment-gateway"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular - Tomislav Stankovi\u0107<\/title>\n<meta name=\"description\" content=\"U ovom blog postu mo\u017eete saznati kako implementirati CovrusPay karti\u010dno pla\u0107anje koriste\u0107i Node.js tj. Express.js i Angular Framework.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular - Tomislav Stankovi\u0107\" \/>\n<meta property=\"og:description\" content=\"U ovom blog postu mo\u017eete saznati kako implementirati CovrusPay karti\u010dno pla\u0107anje koriste\u0107i Node.js tj. Express.js i Angular Framework.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/\" \/>\n<meta property=\"og:site_name\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-09T19:14:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-10T17:33:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/Corvus-Pay-implementacija.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisao\/la\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomislav Stankovi\u0107\" \/>\n\t<meta name=\"twitter:label2\" content=\"Procijenjeno vrijeme \u010ditanja\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/\"},\"author\":{\"name\":\"Tomislav Stankovi\u0107\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"headline\":\"Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular\",\"datePublished\":\"2021-12-09T19:14:37+00:00\",\"dateModified\":\"2021-12-10T17:33:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/\"},\"wordCount\":966,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/Corvus-Pay-implementacija.jpg\",\"keywords\":[\"Angular Framework\",\"CorvusPay\",\"Express.js\",\"karti\u010dno pla\u0107anje\",\"Payment Gateway\"],\"articleSection\":[\"Razvoj\"],\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/\",\"name\":\"Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular - Tomislav Stankovi\u0107\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/Corvus-Pay-implementacija.jpg\",\"datePublished\":\"2021-12-09T19:14:37+00:00\",\"dateModified\":\"2021-12-10T17:33:07+00:00\",\"description\":\"U ovom blog postu mo\u017eete saznati kako implementirati CovrusPay karti\u010dno pla\u0107anje koriste\u0107i Node.js tj. Express.js i Angular Framework.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/Corvus-Pay-implementacija.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/Corvus-Pay-implementacija.jpg\",\"width\":1280,\"height\":720,\"caption\":\"Implementacija CorvusPay karti\u010dnog pla\u0107anja\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/corvuspay-payment-gateway-nodejs\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Po\u010detna stranica\",\"item\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"name\":\"Tomislav Stankovi\u0107\",\"description\":\"Sam svoj bloger\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"hr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\",\"name\":\"Tomislav Stankovi\u0107\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"width\":248,\"height\":165,\"caption\":\"Tomislav Stankovi\u0107\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\"},\"description\":\"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.\",\"sameAs\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/tomislavstankovic\\\/\"],\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/author\\\/tomislavstankovic\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular - Tomislav Stankovi\u0107","description":"U ovom blog postu mo\u017eete saznati kako implementirati CovrusPay karti\u010dno pla\u0107anje koriste\u0107i Node.js tj. Express.js i Angular Framework.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/","og_locale":"hr_HR","og_type":"article","og_title":"Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular - Tomislav Stankovi\u0107","og_description":"U ovom blog postu mo\u017eete saznati kako implementirati CovrusPay karti\u010dno pla\u0107anje koriste\u0107i Node.js tj. Express.js i Angular Framework.","og_url":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/","og_site_name":"Tomislav Stankovi\u0107","article_published_time":"2021-12-09T19:14:37+00:00","article_modified_time":"2021-12-10T17:33:07+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/Corvus-Pay-implementacija.jpg","type":"image\/jpeg"}],"author":"Tomislav Stankovi\u0107","twitter_card":"summary_large_image","twitter_misc":{"Napisao\/la":"Tomislav Stankovi\u0107","Procijenjeno vrijeme \u010ditanja":"7 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/#article","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/"},"author":{"name":"Tomislav Stankovi\u0107","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"headline":"Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular","datePublished":"2021-12-09T19:14:37+00:00","dateModified":"2021-12-10T17:33:07+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/"},"wordCount":966,"commentCount":0,"publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/Corvus-Pay-implementacija.jpg","keywords":["Angular Framework","CorvusPay","Express.js","karti\u010dno pla\u0107anje","Payment Gateway"],"articleSection":["Razvoj"],"inLanguage":"hr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/","url":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/","name":"Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular - Tomislav Stankovi\u0107","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/#primaryimage"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/Corvus-Pay-implementacija.jpg","datePublished":"2021-12-09T19:14:37+00:00","dateModified":"2021-12-10T17:33:07+00:00","description":"U ovom blog postu mo\u017eete saznati kako implementirati CovrusPay karti\u010dno pla\u0107anje koriste\u0107i Node.js tj. Express.js i Angular Framework.","breadcrumb":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/"]}]},{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/#primaryimage","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/Corvus-Pay-implementacija.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2021\/02\/Corvus-Pay-implementacija.jpg","width":1280,"height":720,"caption":"Implementacija CorvusPay karti\u010dnog pla\u0107anja"},{"@type":"BreadcrumbList","@id":"https:\/\/www.tomislavstankovic.com\/blog\/corvuspay-payment-gateway-nodejs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Po\u010detna stranica","item":"https:\/\/www.tomislavstankovic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Implementacija CorvusPay karti\u010dnog pla\u0107anja koriste\u0107i Node.js, Express.js i Angular"}]},{"@type":"WebSite","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website","url":"https:\/\/www.tomislavstankovic.com\/blog\/","name":"Tomislav Stankovi\u0107","description":"Sam svoj bloger","publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.tomislavstankovic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"hr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d","name":"Tomislav Stankovi\u0107","image":{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","width":248,"height":165,"caption":"Tomislav Stankovi\u0107"},"logo":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg"},"description":"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.","sameAs":["https:\/\/www.tomislavstankovic.com\/blog\/","https:\/\/www.linkedin.com\/in\/tomislavstankovic\/"],"url":"https:\/\/www.tomislavstankovic.com\/blog\/author\/tomislavstankovic\/"}]}},"_links":{"self":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/11901","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/comments?post=11901"}],"version-history":[{"count":226,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/11901\/revisions"}],"predecessor-version":[{"id":14564,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/11901\/revisions\/14564"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media\/12760"}],"wp:attachment":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media?parent=11901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/categories?post=11901"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/tags?post=11901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}