Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PHP Example - špatné zacházení s parametrem closePayment #349

Closed
smarek opened this issue Nov 30, 2017 · 3 comments
Closed

PHP Example - špatné zacházení s parametrem closePayment #349

smarek opened this issue Nov 30, 2017 · 3 comments

Comments

@smarek
Copy link
Contributor

smarek commented Nov 30, 2017

Dobrý den,

parametr closePayment je handlován jako string, ale v example (index-json.php) je uveden jako boolean.

Díky tomu sign místo textové hodnoty true/false použije při sestavování podpisu hodnotu 0/1 (json_decode a adresace $data["closePayment"])

Místo toho by v metodě signPaymentInitData v crypto.php mělo být následovně

Místo

$data2Sign = $data["merchantId"] . "|" .  $data["orderNo"] . "|" . $data["dttm"] . "|" . $data["payOperation"] . "|" . $data["payMethod"] . "|" . $data["totalAmount"]
		."|". $data["currency"] ."|". $data["closePayment"]  . "|". $data["returnUrl"] ."|". $data["returnMethod"] . "|" . $cart2Sign . "|" . $data["description"]

Toto

$data2Sign = $data["merchantId"] . "|" .  $data["orderNo"] . "|" . $data["dttm"] . "|" . $data["payOperation"] . "|" . $data["payMethod"] . "|" . $data["totalAmount"]
		."|". $data["currency"] ."|". ($data["closePayment"] ? 'true' : 'false')  . "|". $data["returnUrl"] ."|". $data["returnMethod"] . "|" . $cart2Sign . "|" . $data["description"]
@ratajskym
Copy link
Contributor

Předtím, než se zavolá příslušná funkce, tak je tento parametr přetypován
$data["closePayment"] = ($data["closePayment"] == '1') ? "true" : "false";

Takže dále se posílá jako string. Mělo by ty tedy být v pořádku
$data["signature"] = signPaymentInitData($data, $privateKey, $privateKeyPassword);

@smarek
Copy link
Contributor Author

smarek commented Mar 7, 2018

Chápu a vidím, že funkce createPaymentInitData přetypování provádí. Problém je v kontrole v metodě signPaymentInitData, která předpokládá, že k přetypování došlo v předchozím flow. Z mého pohledu, jelikož jsem upravoval implementaci index-json.php nedošlo k volání createPaymentInitData, ale tento objekt jsem dle dokumentace složil manuálně.

V podstatě jde především o problém dokumentace, kdy pokud funkce signPaymentInitData musí být volána s výsledkem metody createInitPaymentData jako prvním argumentem, tak to není zmíněno, a při vytvoření paymentInitData manuálně, potom neprobíhá žádná typová kontrola, před podepsáním vytvořeného datového objektu.

Můj názor je, že by example metoda signPaymentInitData měla provést typovou kontrolu atributů datového objektu a indikovat nesrovnalosti, pokud toto není přístup, který chcete aplikovat, klidně ticket uzavřete.

Děkuji

@dmarek
Copy link
Contributor

dmarek commented Nov 1, 2019

upraveno pro php example eAPI 1.8, vytvoření řetězce pro podpis prováděno pro closePayment v rámci metody signPaymentInitData

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants