Ovaj interaktivni prirucnik ima jednu jedinu javaskript funkciju koja komunicaira sa API-jem (NAPOMENA: ovo je demo te se svi pozivi cak i oni koji nebi smeli da se izvrsavaju iz browser-a izvrasavaju preko nje - zbog sigurnosti, jer sadrze backtoken).
Ako bi iz nje uklonili deo za logovanje u desni panel ona bi izgledala ovako:
const FISCAL_API_URL = "https://fiscalization.holest.com/apiv1"; function doAPiCall(method, path, data, headers, callback){ method = String(method).toUpperCase().trim(); if(!/^\//.test(path)){ path = "/" + path; } let endpoint = FISCAL_API_URL + path; let raw = ""; fetch(endpoint,{ method: method, headers: headers ? headers: undefined, body: data ? JSON.stringify(data, null, 2) : undefined }).then(raw_resp => { raw_resp.clone().text().then(r => { raw = r }); return raw_resp.json() }).then(resp => { if(resp.error){ if(callback){ setTimeout(function(){ callback(true, resp, method, path, data, headers ); },50); } }else{ if(callback){ setTimeout(function(){ callback(false, resp, method, path, data, headers ); },50); } } }) .catch(err => { if(callback){ setTimeout(function(){ callback(true, err, method, path, data, headers ); },250); } console.error(err); }); }
Ovu funkciju mozete koristiti u istom obliku u NodeJs serverskom programu
1. Preko demo naloga registurjte neki SITEUID (potrebno je da se jednom prijavite preko /auth).
2. Podesite 'secret key'
3. Uđite u /admin svog Shopify shopa
4. Idite na Settings > Checkout
5. U 'Additional scripts' sekciji (pri dnu) ubacite sledeci kod:
{% if checkout.billing_address.country_code == "RS" %} <!-- SAMO AKO JE SRBIJA --> <br/> <br/> <div id="fiscal_placeholder">Pravimo fiskalni racun za vas...</div> <script src="https://cdn.payments.holest.com/fiscalscripts/frontendcreatereceipt.js"></script> <script> //OPCIONO GORE U IF USLOVU DODAJTE: and !checkout.billing_address.company DA BI PRESKOCILI FIRME var moja_glavna_poreska_stopa = "F"; //F je poreska stopa sa DEMO naloga. Vi mozete da ispitate line u checkout.line_items i dodelite duge po potrebi var moja_nulta_poreska_stopa = "N";//N nulta stopa za pib 000000000 var fiscal_request = { fiscal_order_id: "{{checkout.order_id}}", fiscal_items:[], fiscal_total: {{checkout.total_price}} / 100, fiscal_order_currency: "{{checkout.currency}}", fiscal_order_currency_correction:1 //+1% S.K. NBS }; var transaction_info = "{{ checkout.transactions[0].kind}}:{{ checkout.transactions[0].status}}";//KOD POUZECA NEBI TREBALO DA PRVIS RACUN OVDE. MOZES DA PROVERIS transaction_info var fitem = null; {% for line in checkout.line_items %} fitem = { fiscal_amount: {{line.final_line_price}} / 100, fiscal_name: "{{line.title}}", fiscal_quantity: "{{line.quantity}}", fiscal_gtin:"{{line.sku}}" }; {% if line.taxable %} fitem.fiscal_tax_label = moja_glavna_poreska_stopa; {% else %} fitem.fiscal_tax_label = moja_nulta_poreska_stopa; {% endif %} fiscal_request.fiscal_items.push(fitem); {% endfor %} {% if checkout.shipping_price > 0 %} //DOSTAVA fitem = { fiscal_amount: {{checkout.shipping_price}} / 100, fiscal_name: "DOSTAVA", fiscal_quantity: "1", fiscal_gtin:"_DOSTAVA" }; fitem.fiscal_tax_label = moja_glavna_poreska_stopa; fiscal_request.fiscal_items.push(fitem); {% endif %} fiscalapi_do_receipt(fiscal_request, { webpermissionstring: "VAS_PIB|VAS_SITEUID|{{ "VAS_SECRET_KEY|VAS_SITEUID|" | append: checkout.order_id | md5 }}" }, fiscal_placeholder, function(is_error, resp, method, path, data, headers){ //OPCIONO URADI NESTO DODATNO OVDE }); </script> {% endif %}
6. To je to. Napomena: ako kiijent osvezi stranu NECE se kreirati drugi racun. API zna da je to isto i samo ce vratiti prethodni.
U primeru smo koristi ovaj skript https://cdn.payments.holest.com/fiscalscripts/frontendcreatereceipt.js
U njemu je definisana funkcija fiscalapi_do_receipt koja ima sledece argumente:
function fiscalapi_do_receipt(receipt_data, auth_data, placeholder, callback){....
U primeru je data variabla transaction_info koja nije upotrebljena. Posle uspesnog placanja karicom ima vrednost 'sale:success' i to se moze koristiti npr. da se ne prave racuni ako je 'authorization:success' (rezervisano ali nije kompletirano)