Malý wrapper pro Gopay API

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Při seznámení se s Gopay API při práci na signaly.cz jsem si vytvořil maličkou vrstvu, která je instanční a využívá Nette. Rád bych se o ni podělil.

Github: https://github.com/…Gopay-Helper

Použití je popsáno v README.

hrach
Člen | 1834
+
0
-

Az na ten nesmyslny nazev tridy \VojtechDobes\Gopay\Helper je to pekne :)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Dobrý podnět :) …

hrach
Člen | 1834
+
0
-

hehe, mně vadilo hlavně to Helper :D

t0x1c
Člen | 151
+
0
-

Ahoj chci se zeptat jestli neplánuješ update na novějši gopay api? Dělám eshop a mam gopay a potřebuju to do stranky zakomponovat ale v nette jsem začátečník takže uplně nevím jak na to.

t0x1c
Člen | 151
+
0
-

Jojo to vím ale je uvedeno že je to pro API 1.9 a gopay ma už api 2.3 :(

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Díky za upozornění – mrknu na to.

hrach
Člen | 1834
+
0
-

Ja na to chci mrknout taky! :))

hrach
Člen | 1834
+
0
-

3 hodinky práce, ale je to tam :) Otestováno na mém testovacím uctu, na ostrym to snad bude fungovat ok taky :) https://github.com/…mmits/master

t0x1c
Člen | 151
+
0
-

Ty jo díky fakt to jsem nečekal. Super práce! :) Snad to budu taky jednou umět :)

t0x1c
Člen | 151
+
0
-

Chci se ještě zeptat dole píšeš že to nepokrýva většinu gopay API co to např. neumí? Znamená to teda že to můžu použit ale že si stejně budu muset většinu doprogramovat?

t0x1c
Člen | 151
+
0
-

Ahoj ma malý problem kdyz udelam vse podle navodu na instalaci dostavam error. Mám nette
2.0.8 to by nemělo vadit ne? :)

No service of type Markette\Gopay\Service found. Make sure the type hint in Method ObjednavkyPresenter::injectGopay() is written correctly and service of this type is registered.

Robot loadera mam zapnuteho a v presenteru mam toto.

/** @var Markette\Gopay\Service */
 private $gopay;

 public function injectGopay(Markette\Gopay\Service $gopay) {
     $this->gopay = $gopay;
 }

v examplu je je to trosku jine tak nevim co je spravně tam je toto..

use Markette\Gopay;

	/** @var Gopay\Service */
private $gopay;



/**
* @param Gopay\Service
*/
public function injectGopay(Gopay\Service $gopay)
{
$this->gopay = $gopay;
}

PS: Docela bych to potřeboval. Díky :)

Editoval t0x1c (25. 2. 2013 21:30)

t0x1c
Člen | 151
+
0
-

Prosím pomoc :D Dělám něco blbě já nebo plugin(wrapper)?

Re4DeR
Člen | 71
+
0
-

imho nemáš zaregistrovanou services v config.neon.

t0x1c
Člen | 151
+
0
-

jak jako? Myslíš takhle?

	services:
		gopay:
			gopayId        : ***
			gopaySecretKey : ***
			testMode       : false
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Vyjímám z readme na Githubu:

$configurator->onCompile[] = function ($configurator, $compiler) {
	$compiler->addExtension('gopay', new Markette\Gopay\Extension);
};

Odpovídající sekce v konfiguračním souboru by neměla být podsekcí services, ale na stejné úrovni s ní. Správně je to v readme, example bude asi třeba upravit :). Co se týče funkčnosti, jsou implementované základní platby, ale už ne třeba opakované platby a další features z Gopay API – pokud bys je implementoval, můžeš klidně poslat pull request :).

t0x1c
Člen | 151
+
0
-

Jojo už mi to jde :) Jsem myslel že v tom bootstrapu to nemusim mit :)

t0x1c
Člen | 151
+
0
-

Zdravím zase ja :D Ještě jsem narazil na problem když chci uložit ID platby z callbacku tak mi to do db uloží toto číslo „2147483647“ a vždy stejně u všech plateb. Můj kod je:

$objednavky = $this->context->objednavkyRepository;
        $shop = $objednavky->NajitPodleFid($row->fid);

        $storeIdCallback  = function ($paymentId) use ($shop) {
                    $shop->update(array('id_platby' => $paymentId));
                };

Myslím že by tam němělo být nic špatně…

t0x1c
Člen | 151
+
0
-

Jak tak koukam tak v tom pluginu jsou docela chyby.. Nevím jestli ho používam blbě já nebo neni uplně dodělaný. Ale chci se zeptat jestli by nebylo lepší použit api přímo od gopay? bylo by těžke ho prostě vložit do nette? Aniž bych nemusel programovat vlastní plugin? Přece jen jsem začátečník a tohleto ještě vubec nechápu…

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Ukaž více kódu + hlaš chyby na Githubu – jistě je rádi opravíme.

Samozřejmě že můžeš používat samotné API od Gopay, jak je libo. Jestli by to bylo těžké? Asi jako naprogramovat cokoli jiného :), nechápu otázku.

Honza Kuchař
Člen | 1662
+
0
-

Jen se tak dívám, nevidím to nikde v podplňcích. Určitě bych to tam přidal, tady to nikdo nenajde…

t0x1c
Člen | 151
+
0
-

Sorry moje chyba měl jsem v DB int a na int to bylo přiliš dlouhe :D No jo no chybama se člověk učí :P

mirdič
Člen | 41
+
0
-

Vyřešeno, musel jsem nainstalovat php5-mcrypt

Ahoj, chtěl bych poděkovat za super wrapper, ušetřil dost času.

Implementuji ho nyní do jednoho eshopu. Na mém localu se mi podařilo vše rozjet bez problému (odzkoušeno i s provedenou platbou), ale na produkčním serveru mi při pokusu o přesměrování na platební bránu gopay.cz vyhazuje fatal error:

<?php
Fatal Error
Call to undefined function Markette\Gopay\Api\mcrypt_module_open()

File: .../www/libs/Gopay/Api/GopayHelper.php   Line: 331

$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
?>

Bohužel mně už nenapadá, kde hledat chybu. Gopay používám ve frontModulu, v presenteru mám toto:

<?php
namespace FrontModule;

use Markette\Gopay;
?>
<?php
	/** @var Markette\Gopay\Service */
	private $gopay;

	public function injectGopay(\Markette\Gopay\Service $gopay)
	{
		$this->gopay = $gopay;
	}
?>

Děkuji předem za každou radu.

Editoval mirdič (8. 4. 2013 10:53)

Maxell92
Člen | 38
+
0
-

Snažím se GoPay implementovat a stále dostávám stejnou chybu jako t0×1c výše:

No service of type Markette\Gopay\Service found. Make sure the type hint in Method EshopModule\FrontModule\GopayPresenter::injectGopay() is written correctly and service of this type is registered.`

RobotLoader je zapnutý, v bootstrap.php mám extension přidánu:

$configurator->onCompile[] = function ($configurator, $compiler) {
	$compiler->addExtension('gopay', new Markette\Gopay\Extension);
};
$container->application->run();

V Presenteru potom to samé jako v readme nebo example:

use Markette\Gopay;

final class GopayPresenter extends \FrontModule\BasePresenter {

	/** @var Gopay\Service */
	private $gopay;

	/**
	 * @param  Gopay\Service
	 */
	public function injectGopay(Gopay\Service $gopay) {
		$this->gopay = $gopay;
	}

Verze Nette 2.0.10. Poradí někdo, co dělám špatně?

akadlec
Člen | 1326
+
0
-

Sekci gopay v neonu máš?

Maxell92
Člen | 38
+
0
-

Ano měl jsem. Už se mi to podařilo vyřešit, problém byl v tom, že jsem extension přidal až na konci bootstrapu.

Když jsem ji přidal před řádkem

$container = $configurator->createContainer();

funguje to. Nevím, zda jde o normální chování, já na to přišel spíše náhodou a metodou pokus-omyl :)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Je to normální chování, rozšíření konfigurátoru je třeba registrovat před vytvořením kontejneru (kteréhožto modifikace jsou smyslem všech rozšíření).

Maxell92
Člen | 38
+
0
-

Ahoj, měl bych ještě 2 otázky :)

  1. Šlo by přeskočit výběr platby na webu a rovnou přesměrovat na stránku GoPay, kde lze výběr provést také?
  2. Je možné přesunout přidání extension z bootstrap.php? Mám platby udělané jako modul a rád bych neměl tuhle závislost mimo modul :)
kukicz
Člen | 1
+
0
-

ahoj,
chci se zeptat je nejnovější verze, která je na githubu kompatibilní i s Nette 2.0 ? Pokud ne je ještě někde k dispozici verze pro Nette 2.0?

Díky

Azathoth
Člen | 495
+
0
-

Ahoj,
chci se zeptat na stažení nejnovější verze.
Co mám dát do composeru za verzi?
Myslel jsem si, že když bude řádek s tímto addonem takto:
„Markette/Gopay“: "@dev"
že to bude fungovat, ale bohužel nejnovější verze takto není stažena a tím pádem addon nefunguje správně, protože v nejnovější verzi jsou nějaké bugfixy.
Taky bych se chtěl zeptat, jestli je integrován bod 1 z Maxellova komentáře.

Azathoth
Člen | 495
+
0
-

Také, netuším proč, mám problém s tím, že i když jsem ručně upravil ve složce vendor zdrojové kódy, aby obsahovaly bugfixy z posledních commitů, hlásí to
Fatal Error

Interface ‚Markette\Gopay\IPaymentButton‘ not found
I když jsem interface IPaymentButton přidal a celý jeho obsah jsem zkopíroval z githubu.

iguana007
Člen | 970
+
0
-

Podle mne bude problém v tom, že pokud to taháš přes composer a potom začneš ručně upravovat zdrojové kódy ve stažených knihovnách, tak se tvé změny již nepřenesou do autoloaderu, který po update composer sám generuje.

Azathoth
Člen | 495
+
0
-

V tom případě prosím, aby byly začleněny do Markette/Gopay poslední 2 commity https://github.com/…mmits/master

iguana007
Člen | 970
+
0
-

Před pár dny jsem četl, že na fóru nefungují emailové notifikace na nové příspěvky u sledovaných vláken, tak možná pomůže mention na @vojtech.dobes ;)

michal.lohnisky
Člen | 64
+
0
-

Ahoj,

nedávno měl Gopay výpadek a tak Soap vyhodil warning:

SoapClient::SoapClient(https://testgw.gopay.cz/axis/EPaymentServiceV2?wsdl): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

a proto nám nefungovala celá aplikace, a to ani na stránkách, které Gopay nepotřebují.

To extension se přes Soap připojuje ke Gopay při každém načtení stránky kvůli správným channels? I když tu službu ani nevyužiji? Nešlo by to udělat jinak – třeba to nějak cachovat?

Azathoth
Člen | 495
+
0
-

@vojtech.dobes Zdravím a opět prosím o začlenění posledních 2 commitů z https://github.com/matak/Gopay do master kvůli https://github.com/…ay/issues/14

Azathoth
Člen | 495
+
+1
-

Chtěl bych se zeptat, jestli je možné pomocí tohoto wrapperu udělat nějaké tlačítko, které přesměruje uživatele na gopay, ale způsob platby si bude moci vybrat uživatel až na gopay a ne na mých stránkách v nette.

Vojtěch Dobeš
Gold Partner | 1316
+
+1
-

@Azathoth Problém s chybějícím $name v masteru vyřešen.

Azathoth
Člen | 495
+
0
-

Zdravím, měl bych menší otázku týkající se posledního commitu.
@vojtech.dobes @hrach
Jaká je nyní best practise pro přidání platebních metod do Service třídy?
Vzhledem k tomu, že se nyní nepřidávají platební metody automaticky, je nějaký správný způsob, jak platební metody přidávat?

hrach
Člen | 1834
+
0
-

@Azathoth zalezi na pouziti. Pokud jsou globalni, tak treba v konfigu, pokud je dynamika, tak v tovarnicce.

Azathoth
Člen | 495
+
+3
-

@hrach a jak v configu: měl jsem tam
gopay:
channels:
card_unicreditb: yes
a křičelo to, že tato platební metoda není definovaná, protože se v Extension při inicializaci nikde nevolalo add, ale rovnou allow (a to vyhodilo výjimku, protože obě pole allowedChannels i deniedChannels byla prázdná).

hrach
Člen | 1834
+
0
-

hm, tak to jsem to asi spatne upravil :|

Andre
Člen | 24
+
0
-

Mám stejný problém jako Azatoth. Jakým způsobem je možné to řešit?

Azathoth
Člen | 495
+
+1
-

@Andre: prošel jsem si zdrojáky extensionu z dob, kdy to ještě fungovalo a neomaleně jsem to nabastlil do své aplikace. Mám to tam v inicializaci Gopay/Service (těsě předtím, než to na stránkách poprvé použiji) takhle: (používám pouze platbu mastercard, tak to tam mám takhle, platba se přidá a rovnou je allowed)

$methodList = Gopay\Api\GopaySoap::paymentMethodList();
foreach ($methodList as $method) {
    if ($method->code == Gopay\Service::METHOD_CARD_UNICREDITB) {
        $this->gopay->addRawChannel($method);
    }
}

takže natáhnutí všech plateb by bylo bez toho ifu asi takhle:

$methodList = Gopay\Api\GopaySoap::paymentMethodList();
foreach ($methodList as $method) {
    $this->gopay->addRawChannel($method);
}

tím se všechny platby přidají a povolí
@hrach mám založit issue na githubu nebo to upravíš sám?

Editoval Azathoth (24. 10. 2014 23:52)

Strata
Člen | 6
+
0
-

Čau, je momentálně plugin https://componette.org/search/?… použitelný s nejnovější API ?

Pokud ano, je nějaká konkrétní část, která by se dala přepsat, aby plugin fungoval na PHP 5.3.10 ?

Díky

Editoval Strata (25. 2. 2015 10:55)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-
  • Kde se lze podívat na nejnovější Gopay API? Na tom jejich eh-webu to nemůžu dohledat.
  • Proč by plugin neměl fungovat na PHP 5.3.10?
Stejk
Člen | 13
+
0
-

Zdravím,
právě jsem integroval GoPay pomocí Markette (integrováno podle ukázky kodu na GitHubu) avšak při bankovním převodu by měla po zaplacení být poslána podle GoPay API nějáká http notifikace. Je tohle integrováno v tomhle pluginu?

Editoval Stejk (14. 3. 2015 18:28)

Felix
Nette Core | 1189
+
0
-

Stejk napsal(a):

Zdravím,
právě jsem integroval GoPay pomocí Markette (integrováno podle ukázky kodu na GitHubu) avšak při bankovním převodu by měla po zaplacení být poslána podle GoPay API nějáká http notifikace. Je tohle integrováno v tomhle pluginu?

To není, musíš si metody pay, notify apod naimplementovat sám.