U članku Woocommerce – HRK kao valuta trgovine + PayPal pisao sam o tome kako omogućiti istovremeno korištenje kune kao valute trgovine bazirane na WooCommerceu i PayPala (koji ne podržava HRK kao valutu).
U spomenutom članku možete pronaći kod u kojem se definira fiksna stopa konverzije iz HRK u Euro. U Facebook grupi WordPress Hrvatska pokrenula se rasprava o mogućim malverzacijama koje otvara solucija definiranja fiksne stope.
Stoga sam kreirao plugin koji će vam omogućiti konverziju valute koristeći tečajnu listu Hrvatske narodne banke (HNB). Za dohvaćanje tečaja koristiti ćemo HNB Exchange Rate Lookup API koji ljubazno nude dečki i cure iz Good Code-a.
Also, while we will do our best to ensure the availability of the API service and correctness of data, we can’t provide any guarantees or warranties about either.
Drugim riječima, Good Code će se truditi osigurati dostupnost API usluge i točnost podataka, no, ne mogu pružiti nikakve garancije ili jamstva. Znači, koristiti na vlastitu odgovornost. Bez brige, radi se o standardnom odricanju od odgovornosti. 😉
Kako istovremeno koristiti HRK kao valutu trgovine i PayPal uz konverziju valute preko tečaja HNB-a ?
Prvo ćemo dohvatiti srednji tečaj valute za Euro, reći WooCommerceu da se opameti i prizna HRK kako valutu podržanu od strane PayPala te zatim, prije slanja iznosa prema PayPalu, konvertira iznos u kunama u euro te konačan iznos pošalje PayPalu.
EDIT 13-03-2015: dodana opcija keširanja pomoću Transients API-ja (na period od 6 sati) , error logging i fallback na fiksni conversion rate (7.5). Veliko hvala Goranu Šeriću na asistenciji 😉
EDIT 15-04-2016: dodana opcija konverzije poreza + testirano na WP 4.5 & WC 2.5.5
EDIT 23-06-2016: dodana opcija konverzije cijene dostave (usklađeno s novim Zonama dostave od WC verzije 2.6) + testirano na WordPress 4.5.3 & WooCommerce 2.6.1
function get_currency() { $eur_rate = get_transient( 'eur_rate' ); if ( empty( $eur_rate ) ){ $response = wp_remote_get( 'http://hnbex.eu/api/v1/rates/daily'); if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) $eur_rate = '7.5'; try { $result = wp_remote_retrieve_body( $response ); $currency_list = json_decode( $result, true); foreach ($currency_list as $item) { if ($item['currency_code'] === 'EUR') { $eur_rate = $item['median_rate']; } } set_transient( 'eur_rate', $eur_rate, 6 * HOUR_IN_SECONDS ); } catch ( Exception $ex ) { error_log( 'HNBEX API REQUEST ERROR : ' . $ex->getMessage() ); $eur_rate = '7.5'; } } return $eur_rate; } add_filter( 'woocommerce_paypal_supported_currencies', 'mx_add_hrk_paypal_valid_currency' ); function mx_add_hrk_paypal_valid_currency( $currencies ) { array_push ( $currencies , 'HRK' ); return $currencies; } add_filter('woocommerce_paypal_args', 'mx_convert_hrk_to_eur'); function mx_convert_hrk_to_eur($paypal_args){ if ( $paypal_args['currency_code'] == 'HRK'){ $convert_rate = get_currency(); $paypal_args['currency_code'] = 'EUR'; $i = 1; while (isset($paypal_args['amount_' . $i])) { $paypal_args['amount_' . $i] = round( $paypal_args['amount_' . $i] / $convert_rate, 2); ++$i; } if ( $paypal_args['discount_amount_cart'] > 0 ) { $paypal_args['discount_amount_cart'] = round( $paypal_args['discount_amount_cart'] / $convert_rate, 2); } if ( $paypal_args['tax_cart'] > 0 ) { $paypal_args['tax_cart'] = round( $paypal_args['tax_cart'] / $convert_rate, 2); } if ( $paypal_args['shipping_1'] > 0 ) { $paypal_args['shipping_1'] = round( $paypal_args['shipping_1'] / $convert_rate, 2); } } return $paypal_args; }
Gore navedeni kod možete zalijepiti u functions.php datoteku (po mogućnosti) child teme. Na taj način nećete izgubiti novu funkcionalnost ukoliko nadogradite temu.
Plugin za Woocommerce (HRK valuta + PayPal + HNB konverzija)
Alternativno, možete skinuti besplatan plugin koji sam kreirao za ovaj članak a omogućuje vam gore navedene funkcionalnosti. Downloadajte ga, instalirajte ga kao svaki drugi plugin (upload zip datoteke) i aktivirajte. Slobodno ga koristite u svojim projektima. Plugin je objavljen pod GPL3 licencom.
Plugin za istovremeno korištenje HRK kao valute trgovine i PayPal gatewaya. Konverzija valute sukladno tečaju HNB-a.
NAPOMENA: testirano na WordPressu 4.5.3, WooCommerce inačica 2.6.1, koristeći Storefront temu.
KVAKA: Ako koristite Instant Payment Notifications (IPN) za povratak s PayPala u WooCommerce, izbaciti će vam error i to zato jer se neće podudarati iznosi. Naime, vi ste prema PayPalu poslali iznos u Eurima a cijena proizvoda je realno u kunama. Dogoditi će se to da će status narudžbe umjesto Procesuiranje (Processing) biti Na čekanju (On-hold). To znači da ćete nakon primljene uplate ručno morati promjeniti status narudžbe u Završeno.
Jako koristan plugin koji nam je uštedio puno vremena u implementaciji web shopa.
Uz plugin velika pohvala i za support 🙂
Puno pozdrava!
Siniša,
hvala na komentaru. Želim vam puno poslovnih uspjeha 😉
Pozdrav
Molim jednu informaciju, nisam još isprobao plugin no zanima me kakva je mogućnost da se plugin koristi uz WPML tj. da se za odabir ENG ili SLO jezika vide konvertirane cijene u EUR koje ovaj plugin daje? Nadam se da sam bio razumljiv.
Znači bazna cijena je HRK a za sve ostale jezike odabrane preko WPMLa da se prikazuje konvertirana cijena u EUR.
Pozdrav Nikola,
svrha ovog plugina je da preračunava , odnosno vrši konverziju HRK u EUR u zadnjoj, checkout fazi, znači prije slanja podataka o iznosu naplate prema PayPal serverima.
Za višejezični WooCommerce shop, sugeriram korištenje WooCommerce multilingual plugina. Jedna od opcija spomenutog plugina je mogućnost korištenja više valuta (neovisno o jeziku). Info.
Na taj način bi mogao definirati cijene/valute za ENG i SLO, a za HR bi konverziju cijene i slanje prema PayPalu posao odradio moj plugin. Sounds ok?
Instalirao vas plugin, no kad odem na wooCommerce-settings-Checkout i dalje mi pise Gateway Disabled: PayPal does not support your store currency.
Bok Nick. Koji ti je store currency postavljen?
Woocommerce -> Settings -> General -> Currency Options-> Currency
Može mala pomoć.
Imam problem sa porezom. Ne radi konverziju valute nego samo promjeni simbol iz kn u €.
Ako je porez 5 kn na pay pal-u on stavi porez 5 €. Dali nešto krivo radim, ako da kako mogu to rješit.
Unaprijed se zahvljaujem
BTW – Super plugin i velika pohvala
Ivane,
teško mi je dijagnosticirati u čemu je problem ako ne vidim postavke shopa. Ako želiš, pošalji mi pristupne podatke za web, account s admin ovlastima na info(at)media-x.hr pa mogu provjeriti.
Evo prvi put problem koji do sada nisam susretao, a uredno koristim ovaj plugin.. znači kad shop koristi više valuta (multicurrency) onda na paypalu izbacuje čudne cifre.. kako to riješiti? Npr. Imam EUR i USD uz HRK… treba mi više ifova 🙂 ( $paypal_args[‘currency_code’] == ‘HRK’). Ako plaćam sa EUR valute onda je sve ok.. no problem je sad u HRK jer izbacuje recimo za narudžbu ukupne vrijednosti 400,00 kn (uključuje 80,00 kn PDV) da kupac mora platiti €42.12 + €80.00 što je ukupno €122.12 EUR. Molim pomoć ako ste se susreli ikad s ovim.
Nikola, tvoj slučaj je sličan onome iz prethodnih komentara Ivice. Naime, prema PayPalu treba slati ukupan iznos koji uključuje porez.
EUR i USD bi trebali raditi normalno jer su to valute podržane od strane PayPala. Plugin je složen tako da radi na shopu kojem je glavna valuta HRK. Da li je to kod tebe slučaj?
Javi.
Pozdrav,
Plugin koristimo na našem web shopu već jako dugo i radio je bez greške. Shop je na adresi http://www.volimljuto.com
U novoj verziji WooCommerca (2.6) mi prilikom checkout-a na paypalu dobro preračuna cijene proizvoda ali shipping ne preračuna nego ga umjesto 25kn naplati 25 eura. Vjerujem da je to povezano s novim shipping zonama pa me zanima da li je moguće to ispraviti da ne tražimo drugo rješenje za konverziju?
LP.
Gorane,
nadogradio sam plugin i sad podržava konverziju cijene dostave (baziranih na novim Shipping zonama). Instaliraj verziju 1.2 i javi kako radi 😉
Borko
Radi bez greške. Hvala puno na brzom odgovoru!
Pozdrav,
imam pitanje u vezi konverzije i kako paypal gleda na to. Dakle proizvod bi koštao 99kn, no iznos u eur/usd bi se neprestano mijenjao ovisno o tečaju HNB-a. Je li to u redu što se tiče paypala, pošto bi isti proizvod neprestano bio drugačije cijene?
Hvala!
P.S. u ovoj formi za komentiranje u prva dva inputa piše ime.
Bok Antonio,
ne vidim problem da cijena varira s obzirom na tečaj. PayPal zasigurno ne brine nešto takvo. I oni preračunavaju cijene sukladno nekom tečaju kad recimo kupuješ iz US a imaš definiran Euro kao preferiranu valutu plaćanja.
Možeš koristiti drugi plugin koji uzima fiksni iznos za konverziju (https://media-x.hr/woocommerce-hrk-kao-valuta-trgovine-i-paypal/) .
P.S. hvala što si mi skrenuo pažnju na to. Bila je to greškica u prijevodu.
Pozdrav
Super stvarčica. Da li ovo radi i na express checkoutu?
Jer meni izbacuje error: “Payment error:An error (10605) occurred while processing your PayPal payment. Please contact the store owner for assistance.”
Bok Vedrane,
plugin je napravljen za (defaultni) PayPal Standard gateway. Nisam istraživao kako ga upogoniti s Express checkoutom.
Lp,
Borko
Bok, da li ovo radi s zadnjim inačicama WP-a i Woo-a
Bok Darko,
da, koristim ovaj plugin na nekoliko shopova sa zadnim verzijama WP-a i Woo-a i sve radi kako spada.
Lp
Pozdrav,
Može mala pomoć. Zanima me da li je normalno na PayPal ubacuje u izračun Tax. Inače cijene su postavljene u shopu kao jedan iznos. Koji uključuje PDV. Izračun napravi dobro, međutim ubaci jos Tax, koji se podudara sa PDV-om.
Bok,
plugin je izvrstan fix i riješenje za webshop sa HRK a da ipak ima EURe
Međutim, nakon uspješnog plaćanja ako je koiršten IPN notifikacije (kao u kvaci na kraju članka) onda je potrebno ručno mjenjati status narudžbe..
Ja sam to riješio ovako: https://stackoverflow.com/questions/30765934/validation-error-paypal-currencies-do-not-match-in-woocommerce
go to “plugins/woocommerce/includes/gateways/paypal/includes/class-wc-gateway-paypal-ipn-handler.php” and comment two lines (line number : 176 and 177 ) like this
//$this->validate_currency( $order, $posted[‘mc_currency’] );
//$this->validate_amount( $order, $posted[‘mc_gross’] );
Pozdrav Borko! Hvala na izuzetno korisnom kodu! Kod radi odlično za jednostavne i varijabilne proizvode, no imam jedan membership site koji koristi Woo subscriptions. Nakon checkouta redirecta se na Paypal, ali se valuta ne konvertita. 75kn postane 75€. Imaš li možda ideju što bi moglo biti u pitanju? Unaprijed hvala!
Bok Ivana, trebalo bi vidjeti kako subscriptions plugins hendla cijelu priču. Koji točno plugin koristiš? Službeni od WooCommercea? https://woocommerce.com/products/woocommerce-subscriptions/
Bok! Hvala ti na odgovoru. Da, službeni od Woocommerce-a.
Možeš li mi poslati zazipan plugin mailom da proučim kôd? Bez toga ne mogu dalje.
Bok! Poslala sam na info mail, ali se vratilo kao security issue 🙂
Pozdrav Borko,
hvala za super rešitev.
Zanima me ali ste mogoče ugotovili kako bi ta custom implementacija delovala tudi za Paypal express?
Za paypal standard deluje odlično, svaka čast!
Lp,
Jan
Jan, hvala na komentaru. Vjerujem da bi se moglo složiti i za PP express ali implementacija je kompleksnija nego za PP Standard i trenutno, zbog velikog broja aktivnih projekata, nisam u mogućnosti odraditi takvo što.
Lp,
Borko
Službeni Paypal plugin od woocommerce-a je zamijenjen WooCommerce PayPal Payments pluginom od 1.3.2022. Postoji li verzija MX Woocommerce HRK + PP + HNB plugina koji funkcionira sa WooCommerce PayPal Payments pluginom?
Meni javlja trenutno grešku CURRENCY_NOT_SUPPORTED
Bok Igore,
od WooCommerce verzije 5.5 sve nove instalacije koriste novi PP gateway. No, podrška za “stari” PayPal standard još uvijek postoji. Treba u datoteku functions.php aktivne teme dodati:
add_filter( 'woocommerce_should_load_paypal_standard', '__return_true' );
Mislim da će “stari” PP plugin biti aktivan dovoljno dugo dok se i mi ne prebacimo na Euro pa ovakve vratolomije više neće biti potrebne 😉
Probaj, javi.
Lp, Borko
Odlično, tenkju 🙂
Pozdrav,
da li je moguće EUR zamijeniti sa USD da sve radi kako i sada?
Unaprijed hvala!
Bok Vedrana,
Moguće je, uz nekoliko izmjena u kôdu. Promijeni se valuta za koju se dohvaća tečaj i na par mjesta oznaka valute.
Lp,
Borko