Integruoti Paysera sistemą į Jūsų svetainę galima atsisiuntus mūsų parengtą atviro kodo programinę biblioteką – libwebtopay. Per ją galima patikrinti visus reikalingus perduodamų ir gaunamų duomenų saugumo parametrus:

  • WebToPay skirta PHP (iš BitBucket).
    $ hg clone https://bitbucket.org/paysera/libwebtopay
  • WebToPay skirta .NET (iš GitHub).
    $ git clone https://github.com/evp/webtopay-lib-dotnet.git

Atsisiuntus biblioteką PHP kalba, iš archyvo pasiimkite failą libwebtopay/WebToPay.php. Kiti failai skirti testams, pavyzdžiams ir paaiškinimams. Naujausią tik vieno libwebtopay/WebToPay.php failo versiją galite atsisiųsti šiuo adresu:WebToPay.php

Integruoti Paysera sistemą į Jūsų svetainę taip pat galima atsisiuntus trečiosios šalies paruoštą atviro kodo programinę biblioteką:

  • Omnipay 2.x - mokėjimų apdorojimo PHP biblioteka (iš GitHub).
    $ git clone https://github.com/povils/omnipay-paysera.git
  • Omnipay 3.x - mokėjimų apdorojimo PHP biblioteka (iš GitHub).
    $ git clone https://github.com/semyonchetvertnyh/omnipay-paysera.git
Pastaba libwebtopay tinka ir mikro, ir makro paslaugoms. Jums pakanka iškviesti du metodus, iš kurių vienas parengia duomenis išsiuntimui, o kitas patikrina gautą atsakymą apie įvykdytą mokėjimą.

Žemiau pateiktas veikiantis pavyzdys naudojant WebToPay biblioteką. Vietos, kuriose reikia įrašyti Jūsų Paysera prieigos duomenis, pažymėtos komentarais.

1. Susikurkite katalogą.

SUSIKURKITE katalogą, PAVADINKITE jį libwebtopay. Jame bus laikomi visi failai, susiję su mokėjimų integracija.

2. Atsisiųskite libwebtopay biblioteką.

Į sukurtą libwebtopay katalogą ATSISIŲSKITE WebToPay.php failą.

3. Sukurkite failą, nukreipiantį vartotoją į Paysera svetainę.

Kataloge libwebtopay SUKURKITE failą redirect.php. Šio failo turinys galėtų būti toks:

<?php

require_once('WebToPay.php');

function get_self_url() {
    $s = substr(strtolower($_SERVER['SERVER_PROTOCOL']), 0,
                strpos($_SERVER['SERVER_PROTOCOL'], '/'));

    if (!empty($_SERVER["HTTPS"])) {
        $s .= ($_SERVER["HTTPS"] == "on") ? "s" : "";
    }

    $s .= '://'.$_SERVER['HTTP_HOST'];

    if (!empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] != '80') {
        $s .= ':'.$_SERVER['SERVER_PORT'];
    }

    $s .= dirname($_SERVER['SCRIPT_NAME']);

    return $s;
}

try {
    $self_url = get_self_url();

    $request = WebToPay::redirectToPayment(array(
        'projectid'     => 0,
        'sign_password' => 'd41d8cd98f00b204e9800998ecf8427e',
        'orderid'       => 0,
        'amount'        => 1000,
        'currency'      => 'EUR',
        'country'       => 'LT',
        'accepturl'     => $self_url.'/accept.php',
        'cancelurl'     => $self_url.'/cancel.php',
        'callbackurl'   => $self_url.'/callback.php',
        'test'          => 0,
    ));
} catch (WebToPayException $e) {
    // handle exception
} 
            

Vietoj WebToPay::redirectToPayment metodo galite naudoti WebToPay::buildRequest, kuris priima tokius pačius parametrus ir grąžina reikiamų siuntimui duomenų masyvą.

WebToPay::buildRequest() metodo pilnas parametrų sąrašas su aprašymais:

Parametras Ilgis Būtinas Aprašymas
projectid 11 Taip Unikalus projekto numeris. Tik patvirtinti projektai, gali priimti įmokas.
orderid 40 Taip Užsakymo numeris iš jūsų sistemos.
accepturl 255 Taip Pilnas interneto adresas (URL), į kurį klientas nukreipiamas sėkmingai atlikus mokėjimą.
cancelurl 255 Taip Pilnas interneto adresas (URL), į kurį klientas nukreipiamas atšaukus ar nepavykus atlikti mokėjimą.
callbackurl 255 Taip Pilnas adresas (URL), kuriuo pardavėjui pateikiama informacija apie atliktą mokėjimą.

Skriptas turi grąžinti tekstą "OK". Tik tuomet mūsų sistema užfiksuos, kad apie apmokėjimą sėkmingai informavome.

Jeigu atsakymo "OK" nėra, tai pranešimą siunčiame 4 kartus (kai tik gauname, po valandos, po trijų ir po paros).
version 9 Taip Paysera mokėjimų sistemos specifikacijos (API) versijos numeris.
lang 3 Ne Galima nurodyti naudotojo kalbą (ISO 639-2/B: LIT, RUS, ENG ir pan.). Jeigu tokios kalbos Paysera nepalaiko bus parinkta kalba pagal lankytojo IP adresą arba anglų kalba pagal nutylėjimą.
amount 11 Ne Suma centais, kurią klientas turi apmokėti
currency 3 Ne Mokėjimo valiuta (pvz. USD, EUR ir pan.), kuria pageidaujate, kad klientas mokėtų. Jeigu nurodyta valiuta per pasirinktą mokėjimo būdą negali būti priimta, sistema automatiškai pagal dienos kursą konvertuos į palaikomą valiutą. Atsakyme į Jūsų svetainę bus paduoti payamount ir paycurrency.
payment 20 Ne Mokėjimo būdas. Jei nurodytas, mokėjimas bus atliekamas konkrečiai per tą mokėjimo būdą. Jei nenurodytas, vartotojui bus pateikiama galimų mokėjimo būdų lentelė. Mokėjimo būdus galite gauti ir realiu laiku, naudojantis WebToPay biblioteka.
country 2 Ne Mokėtojo šalis (LT, EE, LV, GB, PL, DE). Nurodžius šalį mokėtojui iš karto pateikiami mokėjimo būdai, kurie galimi toje šalyje. Jeigu šalis nenurodoma, sistema pagal mokėtojo IP adresą nustato jo šalį. Mokėtojui paliekama galimybė pasikeisti šalį.
paytext 255* Ne Mokėjimo paskirtis, kuri matosi darant pavedimą. Nenurodžius naudojamas tekstas pagal nutylėjimą:
Apmokėjimas už prekes ir paslaugas (už nr. [order_nr]) ([site_name]).

Jeigu nurodote mokėjimo paskirtį, būtina įtraukti šiuos kintamuosius, kurie galutiniame paskirties tekste bus pakeisti į atitinkamas reikšmes:

  • [order_nr] - užsakymo numeris.
  • [site_name] arba [owner_name] - svetainės adresas arba įmonės pavadinimas.

Nenurodžius šių kintamųjų, bus naudojamas paskirties tekstas pagal nutylėjimą.

Mokėjimo paskirties pavyzdys:

Apmokėjimas už prekes pagal užsakymą [order_nr] svetainėje [site_name].
p_firstname 255 Ne Pirkėjo vardas. Pageidautina daugumoje mokėjimo būdų. Privaloma mokėjimą atliekant tam tikrais mokėjimo būdais.
p_lastname 255 Ne Pirkėjo pavardė. Pageidautina daugumoje mokėjimo būdų. Privaloma mokėjimą atliekant tam tikrais mokėjimo būdais.
p_email 255 Ne Pirkėjo el. paštas privalomas. Jeigu adresas nebus gautas, kliento bus prašoma jį įvesti. Šiuo adresu Paysera sistema informuos mokėtoją apie apmokėjimo būklę.
p_street 255 Ne Pirkėjo adresas, kuriuo bus siunčiamos prekės (pvz: Mėnulio g. 7 - 7). Pageidautina. Privaloma mokėjimą atliekant tam tikrais mokėjimo būdais.
p_city 255 Ne Pirkėjo miestas, į kurį bus siunčiamos prekės. (pvz: Vilnius). Pageidautina. Privaloma mokėjimą atliekant tam tikrais mokėjimo būdais.
p_state 20 Ne Pirkėjo valstijos kodas (privalomas tik perkant JAV valstijoje). Pageidautina. Privaloma mokėjimą atliekant tam tikrais mokėjimo būdais.
p_zip 20 Ne Pirkėjo pašto kodas. Lietuvos pašto kodus galite rasti čia. Pageidautina. Privaloma mokėjimą atliekant tam tikrais mokėjimo būdais.
p_countrycode 2 Ne Pirkėjo šalies kodas. Šalies sutrumpintus kodus galite rasti čia. Pageidautina. Privaloma mokėjimą atliekant tam tikrais mokėjimo būdais.
only_payments 0 Ne Rodyti tik kableliais išskirtą mokėjimo tipų sąrašą.
disalow_payments 0 Ne Nerodyti kableliais išskirto mokėjimo tipų sąrašų.
test 1 Ne Parametras, kuriam esant galima testuoti sujungimą, tokiu būdu apmokėjimas nevykdomas ir rezultatas grąžinamas iš karto, tartum būtų sumokėta. Norint testuoti, būtina aktyvuoti testavimo režimą prie konkretaus projekto, kai prisijungiate: "Projektų valdymas" -> "Įmokų surinkimo paslauga" (prie konkretaus projekto) -> "Leisti testinius mokėjimus" (pažymėkite).
time_limit 19 Ne Parametras nurodantis iki kada galima apmokėti užklausą, data pateikiama "yyyy-mm-dd HH:MM:SS" formatu. Minimali reikšmė 15 min. nuo esamo laiko, maksimali 3 dienos. Pastaba: veikia tik su tam tikrais mokėjimų tipais.
personcode 255 Ne Šį parametrą galima naudoti, norint atlikti naudotojo autentifikaciją. Jei perduosite naudotojo asmens kodą, kartu su callback Paysera grąžins personcodestatus parametrą, kuris nurodys, ar asmens kodas atitinka perduotą.
developerid 11 Ne Tuo atveju, kai Jūs mūsų sistemoje esate pažymėtas kaip diegėjas, savo įdiegtame projekte (projektuose) turite perdavinėti šį parametrą. Parametro reikšmė – Jūsų vartotojo unikalus numeris.

4. Sukurkite accept.php

Kataloge libwebtopay SUKURKITE failą accept.php. Šio failo turinys turėtų būti toks:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
        <title></title>
</head>
<body>
        Thank you for buying
</body>
</html> 
    

5. Sukurkite cancel.php

Kataloge libwebtopay SUKURKITE failą cancel.php. Šio failo turinys turėtų būti toks:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
        <title></title>
</head>
<body>
        Payment canceled
</body>
</html>
    

6. Įvykdytų mokėjimų apdorojimas

Kataloge libwebtopay SUKURKITE failą callback.php. Šio failo turinys turėtų būti toks:

<?php

require_once('WebToPay.php');

try {
        $response = WebToPay::checkResponse($_GET, array(
            'projectid'     => 0,
            'sign_password' => 'd41d8cd98f00b204e9800998ecf8427e',
        ));

        if ($response['test'] !== '0') {
            throw new Exception('Testing, real payment was not made');
        }
        if ($response['type'] !== 'macro') {
            throw new Exception('Only macro payment callbacks are accepted');
        }

        $orderId = $response['orderid'];
        $amount = $response['amount'];
        $currency = $response['currency'];
        //@todo: patikrinti, ar užsakymas su $orderId dar nepatvirtintas (callback gali būti pakartotas kelis kartus)
        //@todo: patikrinti, ar užsakymo suma ir valiuta atitinka $amount ir $currency
        //@todo: patvirtinti užsakymą

        echo 'OK';
} catch (Exception $e) {
        echo get_class($e) . ': ' . $e->getMessage();
} 
    
Pastaba! Perduotus parametrus grąžina WebToPay::checkResponse arba WebToPay::validateAndParseData. Patys duomenys yra užkoduoti, dėl to iš GET parametrų jų paprastai pasiimti negalima.
Pastaba! Callback skriptas sėkmės atveju turi grąžinti atsakymą, prasidedantį arba lygų "OK" Callback grąžinamus parametrus galite rasti detaliojoje specifikacijoje.

Užkoduojami parametrai

Parametras Aprašymas
projectid Unikalus projekto numeris. Tik patvirtinti projektai, gali priimti įmokas.
orderid Užsakymo numeris iš jūsų sistemos.
lang Galima nurodyti naudotojo kalbą (ISO 639-2/B: LIT, RUS, ENG ir pan.). Jeigu tokios kalbos Paysera nepalaiko bus parinkta kalba pagal lankytojo IP adresą arba anglų kalba pagal nutylėjimą.
amount Suma centais, kurią klientas turi apmokėti
currency Mokėjimo valiuta (pvz. USD, EUR ir pan.), kuria pageidaujate, kad klientas mokėtų. Jeigu nurodyta valiuta per pasirinktą mokėjimo būdą negali būti priimta, sistema automatiškai pagal dienos kursą konvertuos į palaikomą valiutą. Atsakyme į Jūsų svetainę bus paduoti payamount ir paycurrency.
payment Mokėjimo būdas. Jei nurodytas, mokėjimas bus atliekamas konkrečiai per tą mokėjimo būdą. Jei nenurodytas, vartotojui bus pateikiama galimų mokėjimo būdų lentelė. Mokėjimo būdus galite gauti ir realiu laiku, naudojantis WebToPay biblioteka.
country Mokėtojo šalis (LT, EE, LV, GB, PL, DE). Nurodžius šalį mokėtojui iš karto pateikiami mokėjimo būdai, kurie galimi toje šalyje. Jeigu šalis nenurodoma, sistema pagal mokėtojo IP adresą nustato jo šalį. Mokėtojui paliekama galimybė pasikeisti šalį.
paytext Mokėjimo paskirtis, kuri matosi darant pavedimą.
name Mokėtojo vardas, gautas iš mokėjimo sistemos. Siunčiamas tik jeigu mokėjimo sistema tokį suteikia.
surename Mokėtojo pavardė, gauta iš mokėjimo sistemos. Siunčiamas tik jeigu mokėjimo sistema tokį suteikia.
status Mokėjimo būklė:
  • 0 - apmokėjimas neįvyko
  • 1 - apmokėta sėkmingai
  • 2 - mokėjimo nurodymas priimtas, bet dar neįvykdytas (šis statusas negarantuoja, kad mokėjimas bus įvykdytas)
  • 3 - papildoma mokėjimo informacija
test Parametras, kuriam esant galima testuoti sujungimą, tokiu būdu apmokėjimas nevykdomas ir rezultatas grąžinamas iš karto, tartum būtų sumokėta. Norint testuoti, būtina aktyvuoti testavimo režimą prie konkretaus projekto, kai prisijungiate: "Projektų valdymas" -> "Įmokų surinkimo paslauga" (prie konkretaus projekto) -> "Leisti testinius mokėjimus" (pažymėkite).
payment_country Mokėjimo būdo šalis. Jei mokėjimo būdas yra aptarnaujamas daugiau nei vienoje šalyje (tarptautinis) - parametras nesiunčiamas. Šalis pateikiama 2 simbolių (ISO 3166-1 alpha-2) formatu. PVZ.: LT, PL, RU, EE.
payer_ip_country Mokėtojo šalis, kuri nustatoma pagal mokėtojo IP adresą. Šalis pateikiama 2 simbolių (ISO 3166-1 alpha-2) formatu. PVZ.: LT, PL, RU, EE.
payer_country Mokėtojo šalis, kuri nustatoma pagal mokėjimo būdo šalį, o jeigu būdas yra tarptautinis pagal mokėtojo IP adresą. Šalis pateikiama 2 simbolių (ISO 3166-1 alpha-2) formatu. PVZ.: LT, PL, RU, EE.
p_email Pirkėjo el. paštas privalomas. Jeigu adresas nebus gautas, kliento bus prašoma jį įvesti. Šiuo adresu Paysera sistema informuos mokėtoją apie apmokėjimo būklę.
requestid Tai užklausos numeris, kurį gauname, kai žmogus nuspaudžia ant banko ir kurį pateikiame į "callbackurl" laukelyje nurodytą nuorodą.
payamount Suma centais, kurią pervedė. Gali skirtis jeigu buvo konvertuota į kitą valiutą.
paycurrency Mokėjimo valiuta (pvz. USD, EUR ir pan.), kurią pervedė. Gali skirtis nuo tos kurios prašėte, jeigu pasirinktas mokėjimo būdas negalėjo priimti prašomos valiutos.
version Paysera mokėjimų sistemos specifikacijos (API) versijos numeris.
account Sąskaitos numeris, iš kurio buvo atliktas mokėjimas.
personcodestatus Jei užklausos metu buvo paduotas personcode, šis parametras nurodo, ar sutampa paduotas asmens kodas su tikruoju mokėtojo asmens kodu. Galimos reikšmės:
  • 0 - asmens kodas dar nežinomas
  • 1 - asmens kodas sutampa
  • 2 - asmens kodas nesutampa
  • 3 - asmens kodas nėra žinomas
Jei callback metu asmens kodas dar nėra žinomas, bus daromas dar vienas callback su status parametru 3, kai jo sutapimas bus sužinotas