Přejít na stahování transakcí | Přejít na hlavní stránku Fio API třídy
Pro připojení této třídy k FIO bance potřebujete token, který získáte v internetovém bankovnictví (Informace o účtu → Správa účtu přes API → Nastavení API). Pro zadávání transakcí potřebujete token s nastavením „Sledovat účet a zadávat platební příkazy a inkasa“.
Chraňte svůj soubor nebo uložená data s konfigurací k API proti jejich zneužití, zejména proti odcizení, okopírování apod. Zneužitím Vašich konfiguračních údajů (zejména tokenu) může jiná osoba předstírat Vaši identitu a zadávat pokyny Vaším jménem či získávat informace o pohybech. Zneužití souboru s konfigurací nebo dat Vám může způsobit škodu.
Zadané transakce je nutné potvrdit (podepsat) přes SMS v internetovém bankovnictví (Přehledy – K podpisu).
PHP třída využívá knihovny CURL, SSL a SimpleXML. Bez toho ji na svém serveru nerozjedete. Samozřejmostí jsou komentáře jednotlivých metod PHPDoc, díky kterým je použití třídy ještě snazší.
Zadání standardní domácí transakce.
require_once 'fioapi.class.php';
require_once 'fioapiupload.class.php';
try {
$fioapi = new FioApi\FioApiUpload('TOKEN');
$transaction=new FioApi\DomesticTransaction();
$transaction->setAccountFrom(2900072500)
->setAccountTo(2900072746)
->setBankCode(2010)
->setAmount(200)
->setCurrency('CZK')
->setDate(new Datetime());
$result=$fioapi->addTransaction($transaction)
->upload();
print_r($result);
} catch (FioApi\FioApiException $e) {
echo 'Exception '.$e->getCode().': '.$e->getMessage();
}
Výsledkem je následující pole:
Array
(
[status] => ok
[transactions] => Array
(
[0] => Array
(
[status] => ok
[message] => OK
)
)
)
Spuštění je podobné jako u stahování transakcí.
$fioapi = new FioApi\FioApiUpload('TOKEN');
Jestliže server nezná certifikační autoritu, tak je nutné stáhnout certifikát ze stránky http://www.geotrust.com/…ertificates/ (Root 5 – GeoTrust Primary Certification Authority – G3). Certifikát si uložte např. do stejného adresáře, jako skript. Odkazujete pak na jeho plnou cestu. Na localhostu doporučuji certifikát nevyužívat.
$fioapi = new FioApi\FioApiUpload('TOKEN',__DIR__ . '/certificate.pem');
Certifikát můžete případně doplnit (před zadáním transakcí, potom už je zbytečný) následující metodou. Obě možnosti jsou rovnocenné.
$fioapi = new FioApi\FioApiUpload('TOKEN');
$fioapi->setCertificate(__DIR__ . '/certificate.pem');
Při posílání plateb se využívají dočasné soubory, můžete proto nastavit TEMP adresář. Defaultně je nastaven TEMP adresář z PHP (není tedy nutné jej nastavovat).
$fioapi->setTempDir(__DIR__.'/temp');
Do TEMP adresáře musí mít skript zapisovací právo – jinak systém vyhodí výjimku č. 7: „Temp directory is not writeable“. Tato situace nastává, pokud necháte výchozí TEMP adresář, ale defaultně je zároveň nastaveno omezení open_basedir.
Transakce se vytvářejí jako samostatné objekty:
FioApi\DomesticTransaction, FioApi\Target2Transaction a
FioApi\ForeignTransaction.
Tedy domácí transakce, Europlatba (Target2Transaction) a zahraniční
transakce.
$transaction=new FioApi\DomesticTransaction();
$transaction->setAccountFrom(2900072500)
->setAccountTo(2900072746)
->setBankCode(2010)
->setAmount(202)
->setCurrency('CZK')
->setDate(new Datetime());
Všechny metody pro nastavení domácí transakce jsou:
//POVINNÉ: číslo účtu, ze kterého chcete poslat peníze
$transaction->setAccountFrom($value);
//POVINNÉ: kód měny, např. CZK
$transaction->setCurrency($value);
//POVINNÉ: částka
$transaction->setAmount($value);
//POVINNÉ: číslo účtu příjemce
$transaction->setAccountTo($value);
//POVINNÉ: kód banky příjemce
$transaction->setBankCode($value);
//POVINNÉ: datum, kdy bude provedená transakce (dnes nebo v budoucnosti)
$transaction->setDate(new Datetime());
//komentář transakce
$transaction->setComment($value);
//variabilní symbol
$transaction->setVariableSymbol($value);
//konstantní symbol
$transaction->setConstantSymbol($value);
//specifický symbol
$transaction->setSpecificSymbol($value);
//zpráva pro příjemce
$transaction->setMessage($value);
//typ platby: 431001 standardní; 431005 prioritní; 431022 příkaz k inkasu
$transaction->setPaymentType($value);
$transaction=new FioApi\Target2Transaction();
$transaction->setAccountFrom(2900072500)
->setAccountTo('AT611904300234573201')
->setAmount(100)
->setCurrency('EUR')
->setBic('ABAGATWWXXX')
->setBenefName('Hans Gruber')
->setBenefStreet('Gugitzgasse 2')
->setBenefCity('Wien')
->setBenefCountry('AT')
->setDate(new Datetime());
Všechny metody pro nastavení Target2 transakce jsou:
//POVINNÉ: číslo účtu, ze kterého chcete poslat peníze
$transaction->setAccountFrom($value);
//POVINNÉ: kód měny, např. EUR
$transaction->setCurrency($value);
//POVINNÉ: částka
$transaction->setAmount($value);
//POVINNÉ: číslo účtu příjemce
$transaction->setAccountTo($value);
//POVINNÉ: datum, kdy bude provedená transakce (dnes nebo v budoucnosti)
$transaction->setDate(new Datetime());
//POVINNÉ: jméno příjemce
$transaction->setBenefName($value);
//komentář transakce
$transaction->setComment($value);
//platební titul – POVINNÝ jen u účtů vedených Fio bankou pobočce zahraniční banky v SR pouze při platbě nad 50 000 EUR
$transaction->setPaymentReason($value);
//variabilní symbol
$transaction->setVariableSymbol($value);
//konstantní symbol
$transaction->setConstantSymbol($value);
//specifický symbol
$transaction->setSpecificSymbol($value);
//BIC (Bank Identifier Code)
$transaction->setBic($value);
//ulice příjemce
$transaction->setBenefStreet($value);
//město příjemce
$transaction->setBenefCity($value);
//stát příjemce (dvoupísmenný kód - viz tabulka na http://www.fio.cz/docs/cz/API_Bankovnictvi.pdf str. 37)
$transaction->setBenefCountry($value);
//informace pro příjemce
$transaction->setRemittanceInfo1($value);
$transaction->setRemittanceInfo2($value);
$transaction->setRemittanceInfo3($value);
//typ platby: 431008 standardní; 431009 prioritní
$transaction->setPaymentType($value);
$transaction=new FioApi\ForeignTransaction();
$transaction->setAccountFrom(2900072500)
->setAccountTo('PK36SCBL0000001123456702')
->setAmount(100)
->setCurrency('USD')
->setBic('ALFHPKKAXXX')
->setBenefName('Amir Khan')
->setBenefStreet('Nishtar Rd 13')
->setBenefCity('Karachi')
->setBenefCountry('PK')
->setDetailsOfCharges(470502)
->setPaymentReason(348)
->setRemittanceInfo1('Payment for hotel')
->setDate(new Datetime('+1 day'));
Všechny metody pro nastavení zahraniční transakce jsou:
//POVINNÉ: číslo účtu, ze kterého chcete poslat peníze
$transaction->setAccountFrom($value);
//POVINNÉ: kód měny, např. EUR
$transaction->setCurrency($value);
//POVINNÉ: částka
$transaction->setAmount($value);
//POVINNÉ: číslo účtu příjemce
$transaction->setAccountTo($value);
//POVINNÉ: datum, kdy bude provedená transakce (dnes nebo v budoucnosti)
$transaction->setDate(new Datetime());
//POVINNÉ: důvod platby - kód z tabulky na http://www.fio.cz/docs/cz/API_Bankovnictvi.pdf str. 45
$transaction->setPaymentReason($value);
//POVINNÉ: BIC (Bank Identifier Code)
$transaction->setBic($value);
//komentář transakce
$transaction->setComment($value);
//POVINNÉ: jméno příjemce
$transaction->setBenefName($value);
//POVINNÉ: ulice příjemce
$transaction->setBenefStreet($value);
//POVINNÉ: město příjemce
$transaction->setBenefCity($value);
//POVINNÉ: stát příjemce (dvoupísmenný kód - viz tabulka na http://www.fio.cz/docs/cz/API_Bankovnictvi.pdf str. 37)
$transaction->setBenefCountry($value);
//informace pro příjemce
$transaction->setRemittanceInfo1($value); //POVINNÉ
$transaction->setRemittanceInfo2($value);
$transaction->setRemittanceInfo3($value);
$transaction->setRemittanceInfo4($value);
//POVINNÉ: kdo bude platit poplatky: 470501 - vše plátce; 470502 - vše příjemce; 470503 - každý sám své
$transaction->setDetailsOfCharges($value);
Nejdříve přidáte vytvořenou transakci:
$fioapi->addTransaction($transaction);
Tímto způsobem můžete přidat více transakcí zaráz (klidně
i rozdílných – jednu domácí, druhou zahraniční, …).
Následně transakce zadáte a výstup uložíte do proměnné, kterou poté
můžete vypsat:
$result=$fioapi->upload();
print_r($result);
Pokud vše proběhne v pořádku, výstup bude následující (pro 2 transakce):
Array
(
[status] => ok
[transactions] => Array
(
[0] => Array
(
[status] => ok
[message] => OK
)
[1] => Array
(
[status] => ok
[message] => OK
)
)
)
Při statusu error bude vyvolána výjimka FioApi\FioApiException. Pokud byste ji chtěli nevyvolávat, stačí před uploadem zadat:
$fioapi->setExceptionOnError(false);
Při statusu warning se výjimka nevyvolává (protože transakce se uloží). Pokud byste ji vyvolat chtěli, tak zadejte před uploadem:
$fioapi->setExceptionOnWarning(true);
Pro zachytávání můžete používat následující kód:
try{
//zadání transakcí
}
catch (FioApi\FioApiException $e) {
echo 'Exception '.$e->getCode().': '.$e->getMessage();
}
Pokud nastane nějaká chyba v transakci, objeví se výjimka:
Exception 3: Error in transaction(s). See $e->getTransactions();
Abyste zjistili, kde se chyba nachází, je vhodné mít při zachytávání v „catch“ navíc řádek:
print_r($e->getTransactions());
Díky němu zjistíte, kde nastala chyba:
Array
(
[status] => error
[transactions] => Array
(
[0] => Array
(
[status] => ok
[message] => OK
)
[1] => Array
(
[status] => error
[message] => Payment date is in the past
)
)
)
Chybová zpráva se přebírá z odpovědi z Fio banky. Ta odpovědi předává vesměs v angličtině, ale i tak se občas může objevit čeština. Následující je chyba ve struktuře, konkrétně chybí v zahraniční transakci parametr paymentReason:
Array
(
[status] => error
[message] => Soubor má chyby ve struktuře: cvc-complex-type.2.4.b: The content of element 'ForeignTransaction' is not complete. One of '{paymentReason}' is expected. řádek: 2 pozice: 915.
)
Častou výjimkou je časté stahování/zadávání transakcí. FIO banka umožňuje přístup do API s jedním tokenem pouze každých 30 sekund.
V případě problému s certifikátem zkuste následující postup doporučený FIO bankou:
Metody můžete řetězit. Např.
$result=$fioapi->addTransaction($transaction)->addTransaction($transaction2)->upload();