Přejít k navigační liště

Zdroják » Různé » Implementujeme platby přes PayPal za 30 minut

Implementujeme platby přes PayPal za 30 minut

Články Různé

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í.

Komentáře

Subscribe
Upozornit na
guest
18 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
X

…trend je ve světě přesně obrácený. PayPal se vůči prodávajícím chová jako prase. Zadržování peněz, pokuty a freeze účtů bez vyšetření důvodu jsou jenom poslední kapkou v chování PayPalu. Včetně slavného zablokování konta, protože na něj začaly chodit 5USD částky za prodej licencí. Takže – pokud chcete prodávat, tak zvažte, zda zrovna přes PayPal. Ale pokud jste jenom klient, tak jste snad bez problémů.

Milna

Nejde to, nikdo to nechce, je to složité. První dva tentokrát ponecháme stranou…

Myslím, že autor chtěl hned v úvodu předejít příspěvkům vašeho typu.

Smokie

X nikde nepise, ze to nejde alebo, ze to nikto nechce…

josefrichter

jestli jo, tak je to bomba! Já jsem před nějakou dobou implementoval custom řešení s recurring payments v Ruby a trápil jsem se s tím snad 3 dny :-) V Ruby je vychytanej gem ActiveMerchant, kterej kromě PayPalu umí i spousty dalších „zpracovatelů“ online plateb, ale jak na potvoru tehdy ještě neuměl paypal recurring payments :-(

Cejvik

Zdravím, poměrně nedávno přibyla na Sites možnost umístit kromě tlačítka Google Checkout také možnost PayPal, v případě dotazu rád odpovím.

Michal

Dobry den,
snad se autor neurazi, kdyz sem pridam jeste link na reseni pomoci Zendu :-)
http://framework.zend.com/wiki/display/ZFPROP/Zend_Service_PayPal+-+A.J.+Brown

Kazdopadne bezva clanek, diky!

TrSek

V Respektu tento týden vyšel článek od autora.
Obojí jak respekt tak článek doporučuji.

ojoj

nepoznate nejaku inu jednoduchu sluzbu pomocou ktorej by som mohol prijimat platby kartami a posielat peniaze na slovensky ucet?

Cejvik

na tvém místě bych zkusil bych http://www.payu.cz/

alláh je velký

tohle je všechno na nic a nespolehlivé, bratři vědí, že jedině Hawala je spolehlivý a bezpečný transfer peněz.

Mark6156

Ale tak civilizovaný svět má přeci Bitcoin pro takový účel :-)

Martin

A řešíte ho vůbec, když od Paypalu přijdou všechny doklady, je třeba tvořit a zasílat faktury?

Fallen

Pri ruseni uctu Vam automaticky reknou, ze veskere penize pod 250KC odevzdaji nejake ‚organizaci typu clovek v plisni‘ … uz nikdy vice …
chcete platit online ? Pouzivejte cokoliv jineho nez paypal …

František Kučera

To nejde ty peníze poslat třeba kamarádovi, abych byl na nule, a pak teprve zrušit účet?

Mark6156

tak jistě že jde, jen na to nesmíte ve spěchu zapomenout že ano :-)

Mark6156

všiměte si že většina nářků je úplně o ničem, pokud chcete vydělávat a myslíte to trochu vážně ne jen jako hospodské žvanění, opravdu budete takhle hystericky řešit nějakých hypotetických 250 Kč při rušení účtu ? To asi sotva. František to hádám s obchodováním asi nemyslel moc vážně.

Mark6156

pardon mluvil jsem o Fallen samozřejmě nikoliv o Františkovi …

Boris

my využíváme služeb stránky http://www.import-statement.eu/, je to rychlé a levné…

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.