Malý wrapper pro Gopay API
- Vojtěch Dobeš
- Gold Partner | 1316
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 | 1838
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
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)
- Vojtěch Dobeš
- Gold Partner | 1316
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
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
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
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
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…
- mirdič
- Člen | 41
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
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ě?
- Maxell92
- Člen | 38
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
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í).
- Azathoth
- Člen | 495
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
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.
- Azathoth
- Člen | 495
V tom případě prosím, aby byly začleněny do Markette/Gopay poslední 2 commity https://github.com/…mmits/master
- michal.lohnisky
- Člen | 64
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
@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
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?
- Azathoth
- Člen | 495
@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á).
- Azathoth
- Člen | 495
@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
Č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
- 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?
- Strata
- Člen | 6
- http://help.gopay.com/…pi-verze-2-5 / http://help.gopay.com/…uvodni-brany
- Nic, moje chyba. :)
- Felix
- Nette Core | 1196
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.