Hlavní nastavení

Aktivace platební brány

Po aktivaci licence, je třeba aktivovat platební bránu GoPay

To najdete v nastavení WooCommerce, nastavení pokladny.

Jakmile metodu aktivujete, budete mít tuto platbu k dispozici.

 

Nastavení GoPay údajů

Nastavení pro GoPay

GoId – id eshopu, které jste obdrželi od GoPay

Client Id – vaše přidělené klientské číslo

Client secret – kód, pro spojení s api GoPay

Test mód – nastavení určuje, zda provádíte testovací platby, či již nastavujete ostrý provoz

Upozornění!

Pro testovací a ostrý provoz dostanete odlišné údaje.

Při komunikaci s GoPay po Vás bude vyžadována notifikační URL. Je potřeba jim sdělit, že plugin GoPay Inline používá technologii Rest API, což znamená, že si tuto notifikační URL vygeneruje a pošle sám.

Nastavení EET

Přestože GoPay vyřeší velkou část starostí s EET za vás, pokud jste plátce DPH a máte více sazeb daně, určitou implementaci potřebujete.

Proto je k dispozici nastavení pro EET

Jako první musíte aktivovat odesílání údajů o EET do GoPay

Následně zaškrtněte, zda používáte jen jednu szabu daně, do GoPay se tak bude posílat jen údaj o částce bez DPH a DPH samotné.

V případě, že používáte více sazeb, musíte sazbám, jenž jsou definované, přiřadit ty vaše.

Bez toho, nebude plugin vědět, podle čeho roztřídit a rozepsat položky jednotlivých sazeb.

Následně to musíte udělat i pro dopravu, příplatky a kupóny.

A to je vše. O ostatní se postará plugin a GoPay.

Povolení dopravních metod

GoPay, kromě platební karty, nabízí celou řadu dalších možností.

Je potřeba nastavit ty, které budete používat. slovenské platební metody se automaticky zobrazí, při změně vybrané země.

Na pokladně to pak vypadá takto.

 

Testování plateb

Pro vyzkoušení funkčnosti pluginu, můžete použít tyto testovací karty:

Typ karty Číslo karty Stav autorizace
MasterCard 5447380000000006 Úspěšná – platba uhrazena
VISA 4444444444444448 Úspěšná – platba uhrazena
VISA 4188030000000011 Nedostatek peněžních prostředků na kartě – platba zamítnuta
Maestro 6705040000000019 Zamítnuto v autorizačním centru banky – platba zamítnuta
MasterCard 5160000000000013 Špatné číslo karty – platba zamítnuta

 

Pro úspěšnou platbu zadejte:

Číslo karty: 4188030000000003
Platnost: jakýkoliv měsíc v budoucnosti, například 01/22
CVV: jakékoliv číslo, například 123

Kompatibilita s WPML

WPML je jeden z nejpoužívanějších pluginů pro vytváření jazykových verzí WordPress stránek.

Plugin pro platební bránu je plně přeložitelný, pomocí MO souborů, s kterými umí pracovat program PoEdit a plugin Loco Translate.

Plugin obsahuje detekci zvoleného jazyka a podle něj nastaví jazyk dialogu platební brány.

Akceptovány jsou tyto jazyky:

  • Angličtina
  • Němčina
  • Ruština
  • Polština
  • Slovenština
  • Čeština

Při jiném jazyce je automaticky nastavena čeština.

Plugin obsahuje také filtr pro možnost změna jazyka. Příklad pro WPML najdete zde https://woo-inline-gopay.toret.cz/zmena-jazyka-brany-pomoci-filtru/

Omezení platebních metod pomocí filtru

Výběr platebních metod, které GoPay nabízí, umožňuje select s ikonami každé platební metody.
V pokladně to vypadá takto:

Protože má GoPay nastavení, které umožňuje vybrat, pro které země se bude nabídka zobrzovat, můžete výběr povolit například pro Českou Republiku, ale pro Slovensko ne.

Což může být problematické, pokud potřebujete pro některé případy, vypnout určité platební metody.

 

Proto plugin obsahuje filter gopay_checkout_enabled_methods, který umožňuje upravovat pole platebních metod pro GoPay.

Jsou to:

  • PAYMENT_CARD
  • BANK_ACCOUNT
  • PRSMS
  • MPAYMENT
  • PAYSAFECARD
  • SUPERCASH
  • GOPAY
  • PAYPAL
  • BITCOIN

 

Následující funkce umístěná do souboru functions.php, zobrazí pro angličtinu a němčinu ( při použití WPML ), jen PayPal a platební kartu:

 

add_filter( 'gopay_checkout_enabled_methods', 'custom_en_payments' );
function custom_en_payments( $payment_methods ){

    if( ICL_LANGUAGE_CODE == 'en' || ICL_LANGUAGE_CODE == 'de' ){

        $new_array = array();

        foreach( $payment_methods as $key => $item ){
             if( $key == 'PAYMENT_CARD' ){
                  $new_array[$key] = $item;
             }
             elseif( $key == 'PAYPAL' ){
                  $new_array[$key] = $item;
             }

         }

         if( !empty( $new_array ) ){
              return $new_array;
         }


     }
     return $payment_methods;

}
Povolení doprav a zemí

Pro správné fungování platebního procesu, je často nutné, omezit platební bránu jen na určité země, nebo dopravní metody.

Například, pro osobní vyzvednutí, můžete chtít zakázat platební kartu.

V nastavení najdete dvě pole, do kterých, když kliknete, budete moci vložit položky, kterých se oezení bude týkat.

Výchozí jazyk platební brány

Platební brána GoPay podporuje několik jazyků a z toho důvodu, určuje plugin, dle zvolené země, v jakém jazyce se bude brána zobrazovat.

Můžete si vyzkoušet, že při zvoleném Slovensku, bude rozhraní ve Slovenštině.

Avšak, je možné, že zákazník bude i z jiné země, než je nadefinováno v pluginu ( GB, DE, PL, SK a CZ).

Z toho důvodu je možné v nastavení pluginu Toret plugins -> GoPay Inline, zvolit výchozí jazyk, pro všechny ostatní země. Zde na testovacím eshopu je pro otestování dostupná Siera Leone.

V případě, že vám toto nebude dostačující, obsahuje plugin i filter, který umožňuje manipulovat s jazykem brány:

return apply_filters( ‚gopay_inline_default_lang‘, $lang, $order );

Filtr se nachází v souboru gopay-functions.php ve složce includes/gopay/.

Překlad pluginu pomocí WPML

Pokud překládáme plugin pomocí WPML, nejprve musíme přeložit řetězce, které plugin obsahuje.

V položce menu String Translation vyhledáme to co chceme přeložit a pokud je to přiřazené špatnému jazyku, změníme to.

 

Na konci videa je vidět že se nepodařil přeložit text popisu platební metody. To proto, že se jedná o uložené options a nebyl nakonfigurován překlad WooCommerce.

Poté, co byl přeložen jeden produkt a vytvořeny EN verze pro WooCommerce stránky, přidali jsme produkt do košíku a dokončili překlad popisu platební metody:

Jazyk platební brány

 

Vyvolání dialogu platební brány lze provést v různých jazycích. Gopay tak umožňuje používat platební bránu i v zahraničí.

Bohužel, WordPress nemá v sobě zakomponovaný mechanismus pro změnu jazyka. Proto se na toto používají různé doplňkové pluginy.

Ty sice umožňují mít vícejazyčný web a většinou spolupracují s WooCommerce, ale protože je jich více, není možné zjistit, v jakém jazyce je přepnutý eshop, ve chvíli, kdy je uskutečněna ojednávka.

U většiny pluginů je možné zjistit aktuální jazyk a dle toho upravit i jazyk vyvolaného dialogu pro GoPay.

Pro tento případ je v pluginu připraven filtr, s názvem gopay_inline_default_lang.

Ten přijímá argumenty $default_lang a $order.

Defaultní jazyk platební brány je stanovován následovně:

  • zkontroluje se nastavení pluginu a pokud není nastaven výchozí jazyk, je označen jako CS.
  • Následně se zkontroluje země zákazníka a pro GB, PL, SK, DE a RU se nastaví odpovídající jazyk. Pokud je země jiná, použije se v prvním kroku nastavený výchozí jazyk.
  • v posledním kroku se vrací nastavený jazyk, přes výše zmíněný filtr gopay_inline_default_lang

Kód funkce pro stanovení jazyka:


function gopay_inline_get_lang( $order, $order_meta ){

$country = $order_meta[‚_billing_country‘][0];
$option = get_option( ‚woo_gopay_inline‘ );
if( !empty( $option[‚default-lang‘]) && $option[‚default-lang‘] != ‚-‚ ){
$default_lang = $option[‚default-lang‘];
}else{
$default_lang = ‚CS‘;
}

if( $country == ‚CZ‘ ){ $lang = ‚CS‘; }
elseif( $country == ‚GB‘ ){ $lang = ‚EN‘; }
elseif( $country == ‚SK‘ ){ $lang = ‚SK‘; }
elseif( $country == ‚DE‘ ){ $lang = ‚DE‘; }
elseif( $country == ‚RU‘ ){ $lang = ‚RU‘; }
elseif( $country == ‚PL‘ ){ $lang = ‚PL‘; }
else{
//Get default language
$lang = $default_lang;
}

return apply_filters( ‚gopay_inline_default_lang‘, $lang, $order );
}

 

Ovlivnění jazyka pomocí vlastní funkce

Jazyk platební brány můžete ovlivnit právě pomocí filtru v posledním kroku.

Do pluginu, nebo do functions.php aktivní šablony vložte funkci:


// Custom filter from payment Gateway developers
add_filter( 'gopay_inline_default_lang', 'gopay_create_payment_lang' );
function gopay_create_payment_lang(){
return 'EN';
}
// End of custom filter from payment Gateway developers

Nyní bude vaše platební brána vždy v angličtině. V případě, že chcete zobrazovat dialog podle zvoleného jazyka, musíte kód funkce upravit tak, aby reflektovala aktuální jazyk. Což je ale již záležitost použitého pluginu.

Filtr pro změnu čísla objednávky v GoPay

V případě, že potřebujete manipulovat s číslem objednávky, jenž je odesláno do systému GoPay, můžete využít filtr „gopay_inline_invoice_number

 

$gopay_invoice = apply_filters( ‚gopay_inline_invoice_number‘, $order_id );

 

Filtr pro jazyk platební brány:

apply_filters( ‚gopay_inline_default_lang‘, $lang, $order );

Viz. https://woo-inline-gopay.toret.cz/vychozi-jazyk-platebni-brany/

Změna jazyka brány pomocí filtru

Přestože se snažíme co nejvíce usnadnit používání pluginu, není možné být připraven na všechny možnosti, které WordPress nabízí.

Proto plugin obsahuje filter, pomocí kterého je možné změnit nastavení jazyka platební brány.

Pomocí následující funkce, kterou můžete vložit do functions.php a změnit jazyk brány. Příklad je pro WPML.

add_filter( 'gopay_create_payment_lang', 'my_custom_gopay_function' );
function my_custom_gopay_function( $lang ){
    //Získáme aktuální jazyk
    $current_lang = ICL_LANGUAGE_CODE;
    if( $current_lang == 'en' ){
        return 'EN';
    }else{
        return 'CS';
    }
}

Tato funkce pro zvolenou angličtinu, nastaví dialog platební brány na angličtinu. Pro jiné jazyky bude brána v češtině.

Změna klientských údajů pomocí filtru

Klientskými údaji jsou myšleny Go id, client id a client secret. 

Tyto údaje slouží k navázání spojení s GoPay. Pomocí filtrů můžete ovlivnit jejich volání a můžete je změnit. Je tak možné, mít několik účtů na GoPay a podle předem definovaných podmínek tyto účty přepínat. 

My si ukážeme, jak změnit údaje podle toho, jaká dopravní metoda byla použita v objednávce. 

Samotná definice filtrů vypadá takto:

$client_id = apply_filters( ‚gopay_inline_client_id‘, $client_id, $order_id );
$client_secret = apply_filters( ‚gopay_inline_client_secret‘, $client_secret, $order_id );
$goid = apply_filters( ‚gopay_inline_goid‘, $goid, $order_id );

Každy z filtrů kromě hodnoty, obsahuje i id objednávky. Pomoci id objednávky pak můžete zůskat objekt objednávky a řešit různé případy a podmínky. 

Příklad je psaný na zjištění id dopravní metody, avšak, pokud použijete stejnou dporavní metodu vícekrát, musíte zjistit ii její instance, pomocí $shipping->get_instance_id();

 

<?php
add_filter( ‚gopay_inline_client_id‘, ‚toret_change_client_id‘, 10, 2 );
function toret_change_client_id( $client_id, $order_id ){
$order = wc_get_order( $order_id );
$shipping = $order->get_items( ‚shipping‘ );
$shipping = array_shift( $shipping );
if( $shipping->get_method_id() == ‚flat_rate‘ ){
return ‚my_custom_client_id‘;
}
return $client_id;
}
add_filter( ‚gopay_inline_client_secret‘, ‚toret_change_client_secret‘, 10, 2 );
function toret_change_client_secret( $client_secret, $order_id ){
$order = wc_get_order( $order_id );
$shipping = $order->get_items( ‚shipping‘ );
$shipping = array_shift( $shipping );
if( $shipping->get_method_id() == ‚flat_rate‘ ){
return ‚my_custom_client_secret‘;
}
return $client_secret;
}
add_filter( ‚gopay_inline_goid‘, ‚toret_change_goid‘, 10, 2 );
function toret_change_goid( $goid, $order_id ){
$order = wc_get_order( $order_id );
$shipping = $order->get_items( ‚shipping‘ );
$shipping = array_shift( $shipping );
if( $shipping->get_method_id() == ‚flat_rate‘ ){
return ‚my_custom_goid‘;
}
return $goid;
}
Blokované stavy objednávek

WooCommerce obsahuje dva  základní stavy objednávek, u kterých není žádoucí, dále je zpracovávat. Je to processing a completed. Proto plugin blokuje změnu stavu objednávky při těchto stavech. V případě, že by tomu tak nebylo, docházelo by ke změnám objednávek například ze stavu dokončeno na stav zpracovává se. 

Problémem ale je použití pluginů pro vlastní stavy objednávek. 

Proces může vypadat takto:

  1. Vytvoří se objednávka
  2. Zákazník zaplatí, objednávka se uvede do stavu zpracovává se
  3. Vy máte vlastní stav objednávky – zaplaceno a do něj objednávku uvedete
  4. Přijde notifikace z GoPay, plugin zjistí, že objednávka není ve stavu zpracovává se, nebo dokončena a znova ji do toho stavu přepne

 

Předejít tomu můžeme rozšířením blokovaných stavů, pomocí filtru gopay_blocked_statuses.

Ukázka snippetu pro rozšíření blokovaných stavů:

 

<?php
//Defined
$default_blocked_statuses = array( ‚processing‘, ‚completed‘ );
$blocked_statuses = apply_filters( ‚gopay_blocked_statuses‘, $default_blocked_statuses );
//Snippet
add_filter( ‚gopay_blocked_statuses‘, ‚extend_gopay_blocked_statuses‘ );
function extend_gopay_blocked_statuses( $statuses ){
$statuses[] = ‚nezaplaceno‘;
return $statuses;
}
Změna stavu objednávky u zaplacené transakce

Plugin při zaplacení transakce uvede objednávku do stavu completed a nebo processing. To podle toho, zda se jedná o virtuální produkt ke stažení (completed), nebo ne (processing).

Protože to není vždy žádoucí, obsahuje plugin filtry, které to dokáží ovlivnit. Difince filtrů vypadá takto:

$set_status = apply_filters( ‚gopay_notify_virtual_product_status‘, $status, $order );
$set_status = apply_filters( ‚gopay_notify_normal_product_status‘, $status, $order );

Každy z filtrů kromě hodnoty, obsahuje i objekt objednávky. Pomoci objednávky pak můžete řešit různé případy a podmínky. 

 

<?php
add_filter(‚gopay_notify_virtual_product_status‘, ‚toret_gopay_custom_paid_status‘, 10, 2 );
add_filter(‚gopay_notify_normal_product_status‘, ‚toret_gopay_custom_paid_status‘, 10, 2 );
if ( !function_exists( ‚toret_gopay_custom_paid_status‘ ) ) {
function toret_gopay_custom_paid_status( $status, $order ) {
return ‚paid-order‘;
}
}
Změna stavu objednávky pro zrušenou nebo neplatnou platbu

V případě, že nechcete u zrušené nebo neplatné platby používat výchozí stav Cancelled, můžete si pomocí filtru upravit stav na vlastní.

add_filter( 'gopay_notify_payment_canceled', 'toret_gopay_set_completed', 10, 2 );

function toret_gopay_set_completed( $status, $order ){

 

return ‚completed‘;

}

Místo „completed“ si pak vložte jakýkoliv jiný stav objednávky.