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)