Komponenta pro PayPal Express Checkout

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
seberm
Člen | 6
+
0
-

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
+
0
-

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

seberm
Člen | 6
+
0
-

Ahoj.
Promin, ze jsem neodpovedel drive. Konecna konfirmace platby samozrejme nutna je. Na tve upravy mrknu a spojim je se svymi. ..Jen co budu mit chvilku :-).

Predtim jsem ten kod psal dost rychle. Jeste to zoptimalizuji a uvidime co z toho vyleze:-).

Mas3r
Člen | 116
+
0
-

Komponenta se mi líbí. Poprosil bych o dokončení :-)

martin.knor
Člen | 17
+
0
-

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.

iguana007
Člen | 970
+
0
-

Kde se dá sehnat ta patched verze pls?

seberm
Člen | 6
+
0
-

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
+
0
-

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.

seberm
Člen | 6
+
0
-

Zaradil jsem to.

Promin, ale kod mi neprisel nejaky neprehledny. Na tento format jsem zvykly z Cpp. Kazdopadne diky za ten indent, neuvedomil jsem si to.

btw: Co si predstavujes pod poradnym IDE? NetBeans? Bohuzel jsem zatvrzeny vimar :-).

Filip Procházka
Moderator | 4668
+
0
-

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)

seberm
Člen | 6
+
0
-

Okis.. zkusim se na nejake to IDEcko premoci, ale bude to boj… jsou vetsinou dost pomala.

Ten kod promazu, byl jsem na to linej:-)

Filip Procházka
Moderator | 4668
+
0
-

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 :)

22
Člen | 1478
+
0
-

phpEd je opravdu rychlý, navíc má solidní Debugger s profilerem a cena není nijak hrozná, když si počkáš na akci.

Editoval 22 (18. 8. 2012 0:29)

mara
Člen | 4
+
0
-

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