Příjem POST načte error 404
- Zuben45
- Člen | 268
Zdravím,
potřeboval bych poradit, máme u České spořitelny povolené online platby,
provádí se zde validation, confirmation a rejection. Zezačátku se odešle
formulář metodou POST na ProxyPay (v pořádku) ten pak odešle data
k validaci na naši validation URL a jestli data sedí vygeneruje se
<html><head></head><body>[OK]</body></html>
a zde nastává problém, že služba ProxyPay dostane ze stránky error 404, ale když příjdu na stránku z prohlížeče, tak se provede vše jak má, vytvořil jsem si i formulář který odesílá stejná data jako ProxyPay a také vše fungovalo.
Neví někdo co s tím ? Tento problém už řeším něco přes týden a stále žádná změna. Za pomoc budu moc rád.
Děkuji
- Zuben45
- Člen | 268
Zapsat si url a data která posílá banka bohužel nemůžu :/, ty data co mi posílá banka se berou z dat která jsem odeslal a přidají se některá ověřovací.
Vyzkoušel jsem vypsat data která dostává/odesílám
$httpRequest = $this->getHttpRequest();
$data2 = $httpRequest->getPost();
$file = fopen("form.txt","w");
$template = '1';
foreach($data2 as $key => $d){
$template .= $key.':'.$d.',';
}
fwrite($file, (string) $template);
fclose($file);
a všechny data jsou v pořádku
form.txt
send:Odeslat,merchantid:XXXXX,amount:968,currency:203,brand:MasterCard,transactiontype:sale,merchantref:21503324,merchantdesc:Napájecí kabel,language:CZ,emailcustomer:galek@technimax.cz,merchantvar1:galek@technimax.cz,merchantvar2:968,merchantvar3:01,var1:Napájecí kabel,var2:Osobní odběr,var7:XXXXX XXXXX fakturace-internet 787 01,var8:XXXXX XXXXX fakturace-internet 787 01,do:redirectToPayForm-submit,
XXXXX = jsou reálná data, kvůli bezpečnosti skryta
Edit: Url na které přecházíš tím myslíš url z které to posílám ?
Edit2: Zkoušel jsem i zapsat do souboru když se přistoupí na url, ovšem když se pokouší ProxyPay tak to nic nezapíše, v prohlížeči opět funguje :/
Editoval Zuben45 (26. 1. 2016 15:12)
- CZechBoY
- Člen | 3608
Proč si ty data nemůžeš zapsat? Nikdy neříkej, že to nejde… :D
Prostě si zapiš všechno co můžeš, abys to dokázal potom manuálně
přehrát znovu. Třeba si můžeš i pustit lokálně ten tvůj web a přes
wireshark odchytávat pakety, nebo já nevim proč nemůžeš ukládat co kam
posíláš a co ti přijde…
- Zuben45
- Člen | 268
Myiyk napsal(a):
Ukládej si všechna vstupní data, které dostáváš od ProxyPay.
Když provedeš request se stejnými daty, musí ti to vrátít to samé, co se vrátí ProxyPay. Jestli ne, neděláš stejný request.
Bude tam nějaká hlavička která dělá problém.
Problém je, že žádná data od ProxyPay nedostanu. :/
CZechBoY napsal(a):
Proč si ty data nemůžeš zapsat? Nikdy neříkej, že to nejde… :D
Prostě si zapiš všechno co můžeš, abys to dokázal potom manuálně přehrát znovu. Třeba si můžeš i pustit lokálně ten tvůj web a přes wireshark odchytávat pakety, nebo já nevim proč nemůžeš ukládat co kam posíláš a co ti přijde…
Neříkám že to nejde :), jen nechápu proč to nejde. Web mám jak lokálně tak na hostingu, jdu vyzkoušet wireshark.
- Zuben45
- Člen | 268
Stále ne, zkoušel jsem wireshark, ale nějak se v něm nevyznám, až moc dat mi tam běhá :/.
Někde jsem četl, že může být problém v htacess, je to možné ? Popřípadě, jak mohu zaznamenat to co ProxyPay posílá ? Už jsem z toho v koncích :/
Možná to dělám blbě, ale data dostávám tímto způsobem:
public function renderValidation(){
$httpRequest = $this->getHttpRequest();
$data2 = $httpRequest->getPost();
if($this->users->checkOrderValidation($data2) === true){
$html = "[OK]";
}else{
$html = "[ERROR]".$this->users->checkOrderValidation($data2);
}
$this->template->validate = $html;
//Overeni, ze bylo pristoupeno k scriptu.
$template = $this->createTemplate();
$template->setFile(__DIR__ . '/templates/Basket/validation.latte');
$template->validate = $html;
$template->presenter = $this->presenter;
$template->_presenter = $this->presenter;
$template->control = $this->presenter;
$template->_control = $this->presenter;
$file = fopen("validation.xml","w");
fwrite($file, (string) $template);
fclose($file);
}
mám to i na action, ale nijak to nepomáhá
EDIT: ještě me napadlo, jestli to nebude routováním, pro validation,rejection a confirmation je nutné aby byli na HTTPS, tak jsem je nastavil v routeru následovně:
$router[] = new Route('[<locale=cz cz|sk>/]kosik/confirmation','Basket:confirmation', Route::SECURED);
$router[] = new Route('[<locale=cz cz|sk>/]kosik/validation','Basket:validation', Route::SECURED);
$router[] = new Route('[<locale=cz cz|sk>/]kosik/rejection','Basket:rejection', Route::SECURED);
EDIT2: Tak už vím, konečně jsem se již dostal na Platební bránu, hurááá :D, bylo to právě routováním, odebral jsem parametr locale a zdá se že funguje :)
$router[] = new Route('kosik/confirmation','Basket:confirmation', Route::SECURED);
$router[] = new Route('kosik/validation','Basket:validation', Route::SECURED);
$router[] = new Route('kosik/rejection','Basket:rejection', Route::SECURED);
Editoval Zuben45 (27. 1. 2016 22:39)
- iguana007
- Člen | 970
Zuben45 napsal(a):
Stále ne, zkoušel jsem wireshark, ale nějak se v něm nevyznám, až moc dat mi tam běhá :/.
Super, že si to vyřešil. K tomu WireSharku:
- Je to jednoduché, po spuštění Wiresharku si vyber vlevo nahoře interface, skrz který chceš traffic monitorovat (WiFi/LAN) a klikni v tom okně pro výběr interface na „Start“, což ti začne monitorovat veškerý traffic na vybraném interface.
- Následně si nad logem klikni na „Expression“ vedle inputu Filter
- v seznamu Field name si najdi HTTP a vyber si tam některé z pravidel, které by identifikovaly requesty, které tě zajímají, např.: http.request.uri apod.
- po zadání filtru by si měl vidět ve wiresharku jen to, co tě zajímá
- u jednotlivých requestu si pak můžeš různě rozklikávat hlavičky, responses atd.
- Zuben45
- Člen | 268
Tak jsem nyní spustil na ostrý provoz (změnil jsem i routy na správné adresy), a opět dostávám 404.
$router[] = new Route('validcs','Basket:validation', Route::SECURED);
$router[] = new Route('okcs','Basket:transactionOk', Route::SECURED);
$router[] = new Route('nokcs','Basket:transactionError', Route::SECURED);
$router[] = new Route('postcs','Basket:confirmation', Route::SECURED);
ProxyPay se nemůže opět dostat k validcs, vrací chybu 404. Neví někdo, čím by to mohlo být ?
Na adresu <domain>/validcs se bez problému dostanu.
Děkuji
EDIT: Vyřešeno.
Kdyby někdo někdy potřeboval ;)
Podpora u webhostingu přepisovala .htaccess a nastavila:
RewriteCond %{HTTP:Accept-Encoding} gzip
stačilo smáznout a platby frčí :)
EDIT2: Jen se teď hodně zpomalil web :/
Editoval Zuben45 (8. 2. 2016 21:11)