Komponenta pro PayPal Express Checkout
- seberm
- Člen | 6
Ahojte.
Naprogramoval jsem komponentu pro platbu pomoci PayPal Express Checkout. Treba
se bude nekomu hodit. Postupem casu ji jeste budu doladovat a mozna
i rozsirovat.
Najdete ji v mem repozitari
Priklad pouziti → viz app/presenters/PayPalPresenter.php
public function createComponentPaypalButton() {
$button = $this->context->createPayPalButton();
// Callback na funkci, ktere se preda pole dat ziskanych ze strany PayPalu
$button->onSuccess[] = callback($this, 'processOrder');
// Pokud zakaznik objednavku zrusi, zavola se tento callback
$button->onCancel[] = callback($this, 'cancelOrder');
// V pripade chyby (napriklad chyby komunikace se servery PayPal)...
$button->onError[] = callback($this, 'errorOccurred');
return $button;
}
Priklad jednoducheho nastaveni komponenty -> viz
app/config/config.neon
Pro komunikaci s PayPal je vyuzivan modul →
app/components/paypal/API.class.php
Pokud by byl zajem, mohu k teto komponente napsat nejakou tu dokumentaci s postupem pro zprovozneni.
Kdyby nekdo objevil nejake chyby nebo chtel nejakym zpusobem komponentu rozsirit, dejte mi vedet, popr. primo poslete sve commity :-).
- Acnnair
- Člen | 34
Ahoj, komponenta vyzerá fajn, mám k nej však jeden dotaz. Podľa flow,
ktorý je na paypale, ti tam chýba ešte posledný krok a to samotné
zrealizovanie platby (v API ako DoExpressCheckoutPayment
). Alebo
mi niečo ušlo a je to možné aj bez toho posledného kroku? V princípe sa
dostaneš po bod 5 (získanie info o kupujúcom).
Samotný flow podľa paypal dokumentácie:
Na Githube som to trochu poupravil, tak na to môžeš mrknúť a povedať mi čo si o tom myslíš.
- martin.knor
- Člen | 17
Hoj, poslal jsem pár patchů, hlavně na ImmediatePay – což je obdoba platby jak jsme zvyklí u platby kartou. Po dokončení objednávky se přesměruje na platební bránu, kde se přihlásí a v zápětí je ihned zaplaceno a zavolá se obslužný handler (např. potvrzení objednávky). Dále jsem přidal i description což může být třeba „platba za objednávku 1234“.
Jinak díky za super komponentu.
- seberm
- Člen | 6
Takze:
Komponentu jsem rozdelil na dve casti:
Nette PayPal
Coz je jakesi zakladni API pro komunikaci s PayPal.
V adresari lib/ krome jedne tridy API pribyly dalsi tridy:
Response
Jeji instanci vraci metoda call z tridy API.
Predstavuje odpoved PayPalu, jejiz data jsou rozparsovana a mely by z ni jit
jednoduse ziskat.
Priklad:
$response = $api->getShippingDetails($session);
if ($response->sucess) {
echo 'Payer ID:' . $response->responseData->payerID;
$items = $response->getCartItems(); // Vrati ArrayHash jednotlivych polozek v kosiku
// Pak lze tedy i neco takoveho:
foreach ($items as $item) {
echo $item->name;
echo $item->amount;
echo $item->description;
...
}
} else { // -> $response->isError() == TRUE
dump($response->errors); // Vraci pole chyb, ktere nastaly
}
Query
V podstate jen vytvari ze zadanych dat NVP retezec, ktery se posila na stranu PayPal. (http_build_query)
Utils
Zde jsou pomocne funkce. Napr. fce, ktera zjisti, jestli vsechny klice zadane v poli $keys jsou obsazeny v klicich zdrojoveho pole (array_keys_exist – https://github.com/…bs/Utils.php)
Pak je zde adresar components/, ve kterem najdete tridu Control.
Control
Pomoci teto tridy lze nastavit napriklad castky – postovne, dan, typ platby. Lze s ni pridavat jednoduse polozky do kosiku.
Naleznete v ni take zakladni handlery… a jak uz z nazvu vyplyva:
- onSuccesPayment – vola se pri uspesnem dokonceni plaby a
v parametru predava data odpovedi PayPalu (viz vyse
$response->responseData
). - onCancel – vola se pokud uzivatel zrusi platbu
- onError – pokud nastane chyba. V parametru predava pole
chyb (opet viz vyse
$response->errors
)
Nette PayPal Component
Ukazka pouziti PayPal API v praxi.
Instalace soucasti jednoduse pomoci PHP Composeru. Konfiguraci naleznete klasicky v app/config/config.neon
Tot asi vse. Jeste se chci omluvit, ze odepisuji az ted – bohuzel jsem si drive nenasel cas. Na komponente bych chtel i nadale pracovat.. je tam jeste hodne co dodelavat :-).
- Filip Procházka
- Moderator | 4668
Ten kód je zmatený, plný překlepů a nedá se číst! Pustil jsem ti na to formátování kódu. Pořiď si prosím normální IDE a dej ten kód do pucu.
- Filip Procházka
- Moderator | 4668
Cokoliv, co ti bude říkat, „tahle proměnná je ve scope nepoužita“, „tahle třída neexistuje“, „tady jsi to odsadil jak prase“ – Netbeans, PhpEd, PhpStorm (na tom běžím teď)
A opravdu tam máš volání několika tříd, které neexistují :)
A ještě jedna věc, kterou mi taky trvalo dlouho akceptovat. Používáš Git, tak se vykašli na komentování kódu, který se „možná bude hodit“. Prostě ho smaž a commitni to. Když ho budeš potřebovat, tak ten commit revertneš :)
Editoval HosipLan (18. 8. 2012 0:15)
- Filip Procházka
- Moderator | 4668
PhpStorm je z nich asi nejrychlejší. Pokud máš win, tak ještě rychlejší by měl být PhpEd. Stav se někdy na Nette jabber a můžeme to řešit tam :)
- mara
- Člen | 4
V projektu PayPal Component – GitHub je v config.neon zakomentovaný řádek:
- setRedirectToConfirm(false)
Po jeho odkomentování dostávám hlášku: Call to undefined method PayPal\Components\Buttons\Order::setRedirectToConfirm()
Chtěl bych se zeptat autora, zda ta metoda tam opravdu není, anebo jen něco přehlížím?
Díky