Brzi start...

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

Primer za Shopify

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){....


receipt_data - fiskalni zahtev u json fromatu
auth_data - ili je {fronttoken: fronttoken} ili {webpermissionstring: webpermissionstring}
placeholder - HTML element u koji se ubacuje iframe za PDF-a
callback - funkcija za poziv pri zavrsetku zahteva, argumenti: (is_error, resp, method, path, data, headers)

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)

Kad ovako lako API moze da se integrise sa Shopify platformom koja je nezahvalana za dopune onda mozete zakljuciti da onda moze bilo gde...