Implementujeme platby přes PayPal za 30 minut

Logo PayPal

Požadavky na implementaci online platebních nástrojů naráží na Svatou Trojici „rozumných důvodů“: Nejde to, nikdo to nechce, je to složité. První dva tentokrát ponecháme stranou a ukážeme si, že implementace plateb pomocí platebního nástroje PayPal nezabere víc než 30 minut čistého času – pokud tedy víte jak na to.

PayPal je bez debat nejrozšířenějším webovým platebním nástrojem dneška. Už několik let je možné jej používat i v ČR a množství lidí, které jeho prostřednictvím nakupují na eBay či v jiných online obchodech, i u nás postupně roste. Ačkoli existují lokální alternativy (PaySec, Premium SMS), je (či spíš měla by být) implementace platby PayPalem věcí první volby vždy, když zvažujeme nějakou online platební metodu. Pro hovoří několik faktorů:

  • Implementace je výrazně snazší než např. u platebních karet
  • Provoz je výrazně levnější a poplatky nižší než např. u Premium SMS (přesnější srovnání nákladů jednotlivých metod je otázka pro kolegy z Měšce)
  • Nejsme lokálně omezeni na ČR jako při bankovních převodech či při použití PaySec, ale můžeme bez problémů prodávat do celého světa

Počet českých webů, které implementují platby PayPalem, je zatím sice malý, ale přibývají – dnes už jím lze zaplatit např. některé hostingy a služby. V článku si ukážeme, jak implementovat platební metodu Express Checkout, tj. rychlou platbu za jednu položku, na vlastním webu a jak otestovat její fungování v tzv. PayPal Sandboxu.

PayPal Express Checkout

Express Checkout je platební metoda, vhodná pro případy, kdy prodáváme jednu věc pomocí nějakého tlačítka Kup hned! Ideálně tedy např. pro prodej digitálního zboží – prodej jednotlivých obrázků, prodej licenčních čísel k software, prodej digitálních kopií knih… Express Checkout nabízí rychlou koupi bez nutnosti obstrukcí s nákupními košíky apod. – celá koupě je pak pro uživatele záležitostí desítek sekund.

Placení pomocí Express Checkout probíhá v následujících krocích:

  1. Uživatel klikne u vybraného zboží na odkaz „Koupit přes PayPal“
  2. Je přesměrován na stránku PayPalu, kde se přihlásí svými údaji ke svému PayPal účtu, nebo zadá platbu kartou
  3. Zobrazí se mu souhrn objednávky – tedy identifikace zboží a prodejce, jeho cena a další možnosti, jako např. výběr platební metody či dodací adresy (pokud se jedná o fyzické zboží)
  4. Po kliknutí na Zaplatit je přesměrován zpět na stránku prodejce spolu s potvrzením o úspěšně proběhlé transakci.

Integrace Express Checkout

Představme si příklad: na svých stránkách budeme chtít prodávat, řekněme, elektronické kopie své knihy „Jak být úplně nejlepší programátor“. Budeme ji mít připravenou v PDF a budeme ji nabízet za 5 dolarů. Budeme mít stránku s představením této knihy, a někde na ní bude velmi viditelné tlačítko „Kup hned přes PayPal“. Uživatel klikne, otevře se mu stránka PayPalu, tam se přihlásí, potvrdí 5 dolarů platbu, vrátí se zpět, a bylo-li vše OK, dostane odkaz ke stažení.

Proč v dolarech, to nejdou koruny? Samosebou není nutné používat dolary, použijte klidně koruny – stačí řetězec „USD“ nahradit za „CZK“. V příkladu se ale podržíme dolarů.

Implementace Express Checkout

Vlastní implementace je snadná, pokud si prostudujete patřičnou dokumentaci. Můžete použít knihovny, které PayPal nabízí, ale při pohledu na ně si pravděpodobně řeknete, že si raději prostudujete dokumentaci a napíšete si vlastní, podobně jako autor tohoto textu.

Knihovna PHP PayPal je právě výsledkem studia dokumentace a převodem znalostí do jednoduché a jednoduše použitelné PHP knihovny, pomocí níž je implementace Express Checkout otázkou několika řádků kódu. Používá HTTP API (nikoli SOAP), nazývané NVP – Name-Value Pair, kde se parametry předávají ve formě parametrů HTTP dotazu. (Kvůli nemožnosti použít cURL na tehdejším hostingu řešil autor HTTP požadavky pomocí fsocks, ale není problém je přepsat do cURL podoby.)

Ve zdrojových kódech je i ukázka jednoduché nákupní stránky (index.php) – na ní je jediná položka, totiž odkaz na buy.php („Kup hned!“). Skript buy.php připraví potřebné parametry pro platbu, tedy název kupované položky, její cenu, volitelně i poznámku, nějakou interní identifikaci kupujícího (např. pokud máte už nějak řešenou správu uživatelů a chcete dotyčnému přidat koupené věci – kredit, soubor, licenci, … – k účtu) a měnu (zde můžeme specifikovat právě ty koruny řetězcem „CZK“)

$r = new PayPal();
$ret = ($r->doExpressCheckout(10, 'A perfect item!'));
echo 'Error:';
print_r($ret);

Metoda doExpressCheckout() přesměruje uživatele na stránku PayPalu a skript skončí. Pokud dojde k chybě, skript neskončí, metoda vrátí návratovou hodnotu a z ní vyčteme, k jaké chybě došlo (viz seznam návratových kódů). 

Důležité jsou dvě stránky – ppcancel.php a ppreturn.php. Na té první pouze vypíšeme, že se platba neprovedla – na ni se vrátí uživatel ve chvíli, kdy z jakéhokoli důvodu proces platby přeruší. Na tu druhou se vrátí ve chvíli, kdy všechna ověření dopadla dobře a uživatel potvrdil platbu.

Skript ppretrurn.php pak podobným způsobem zavolá metodu doPayment(). Návratovou hodnotou je pole, v němž nás zajímá především položka ACK. Je-li rovna řetězci „Success“, pak platba proběhla. Můžeme zjistit další detaily o provedené platbě funkcí getCheckoutDetails, které předáme získaný jednorázový token. Má-li ACK jinou hodnotu, nastal problém, který opět můžeme identifikovat z návratových kódů.

$r = new PayPal();
$final = $r->doPayment();
if ($final['ACK'] == 'Success') {
    echo 'Succeed!';
    print_r($r->getCheckoutDetails($final['TOKEN']));
   
} else {
    print_r($final);
}

Ukázka detailů platby, získaných z funkce getCheckoutDetails():

    [TOKEN] => EC-46K253307T956310E
    [TIMESTAMP] => 2010-12-12T09:38:01Z
    [CORRELATIONID] => cbf9ed77f3dbe
    [ACK] => Success
    [VERSION] => 52.0
    [BUILD] => 1613703
    [EMAIL] => buyer1_1292145548_per@maly.cz
    [PAYERID] => ZMU92MM4SPBHS
    [PAYERSTATUS] => verified
    [FIRSTNAME] => Test
    [LASTNAME] => User
    [COUNTRYCODE] => US
    [CUSTOM] => 10|USD|

Nejdůležitější informace se nacházejí v souboru class/paypal.php, resp. přímo na jeho začátku.

    const API_USERNAME = "seller_1292143286_biz_api1.maly.cz";
    const API_PASSWORD = "Q7CJ********E";
    const API_SIGNATURE = "AFc******tV6l";
    const PP_RETURN = "http://test/pp/ppreturn.php";
    const PP_CANCEL = "http://test/pp/ppcancel.php";

Poslední dva řádky obsahují URL návratových stránek (autor testoval, jak vidíte, na serveru http://test/pp). Předchozí tři údaje si vygenerujeme následujícím postupem: Přihlásíme se ke svému PayPal účtu, v panelu My Account vybereme Profile a z Account Information pak položku API Access (v tom nejnižším typu účtu pravděpodobně nebudete mít tuto položku k dispozici, v takovém případě budete muset přejít na účet, určený pro podnikání).

Projdeme jednoduchým průvodcem, který se bude ptát, zda žádáme přístup pro třetí stranu nebo pro sebe (Option 2 – pro sebe), zda chceme přístup pro SOAP nebo NVP (vybereme NVP), a výsledkem jsou vygenerované údaje:

Sandbox

Nikdo pravděpodobně nechce testovat platební bránu s opravdovými penězi, natož s vlastními. PayPal nabízí k testování pískoviště – tedy sandbox. Vytvořte si na něm účet (není nijak svázán s vaším případným účtem na „skutečném“ PayPalu) a po potvrzení mailem se přihlašte.

 Budete potřebovat minimálně dvě „virtuální“ osoby – jednoho „virtuálního prodejce“ a jednoho „virtuálního kupujícího“. Doporučuji zvolit možnost vytvořit „preconfigured“ účet – pak stačí vyplnit jen několik málo údajů:

Zaškrtněte, že dotyčný má účet i kartu, tím získáte „verified“ účet. Pak se přihlašte (stále ze Sandboxu, pomocí tlačítka Enter Sandbox Test Site v přehledu účtů, jako „virtuální prodejce“ a výše popsaným způsobem si vyžádejte údaje k API. Ty zadejte do  class/paypal.php.

Můžete zkusit ověřit fungování celého prodejního aparátu – při platbě se přihlašte jako virtuální kupující. V Sandboxu vidíte i maily, které jednotlivým uživatelům chodí.

A teď už jde o peníze!

Jakmile vše funguje k naší plné spokojenosti, je načase přesunout se z pískoviště do opravdového světa. K tomu jsou potřeba dva úkony:

  1. Vygenerovat si reálné API údaje z vlastního skutečného účtu na PayPalu a zadat je do knihovny.
  2. Změnit v kódu všechny výskyty new PayPal() na new PayPal(true)  – tím přesměrujete volání API ze sandboxu na „ostrý“ PayPal.

Volání skutečného PayPalu nebude fungovat s údaji ze sandboxu a obráceně.

Před přepnutím na ostrou verzi si vše důkladně zkontrolujte! Autor článku ani vydavatel nenese odpovědnost za případné ztráty dat, peněz, či jiné problémy!

Ani to nebolelo…

Ukázali jsme si, jak je implementace Express Checkout snadná a rychlá – opravdu nezabere víc než půlhodinu. Pokud se pustíte do vlastní implementace API Express Checkout, nebude to ani tak trvat delší dobu než cca jeden pracovní den.

Implementace PayPal Express Checkout je tak patrně nejsnazší implementací online platebního nástroje, alespoň co do poměru „snadnost / cena“. Pokud ale chceme implementovat plnou platební bránu, tj. i s košíkem a podobnými funkcemi, složitost úměrně naroste. V takovém případě bude pravděpodobně rozumnější sáhnout po hotovém e-commerce řešení.

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 18

Přehled komentářů

X Technologicky snadné, ale...
Milna Re: Technologicky snadné, ale...
Smokie Re: Technologicky snadné, ale...
josefrichter 30 minut?
Cejvik google sites PayPal
Michal Zend reseni
TrSek Článek v Respektu
ojoj platby kartami
Cejvik Re: platby kartami
alláh je velký alláh je velký
Mark6156 Re: alláh je velký
Martin Jak řešíte propojení s účetnictvím?
Fallen paypal uz nikdy vice
František Kučera Re: paypal uz nikdy vice
Mark6156 Re: paypal uz nikdy vice
Mark6156 Re: paypal uz nikdy vice
Mark6156 Re: paypal uz nikdy vice
Boris PayPal a účetnictví
Zdroj: https://www.zdrojak.cz/?p=3386