Autor | Zpráva | ||
---|---|---|---|
potom Profil |
Ahoj, potřebuji pomoci -
platební bráně GP potřebuji z formulářového pole ADDINFO poslat přes POST následující XML <input type = "hidden" name = "ADDINFO" value = "<?xml version="1.0" encoding="UTF-8"?><additionalInfoRequest xmlns="..........." xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="4.0"><cardholderInfo><cardholderDetails><name>Jan Novák</name><email>jan.novak@seznam.cz</email></cardholderDetails><addressMatch>Y</addressMatch><billingDetails><name>Jan Novák</name><address1>Novákovice</address1><city>Nová Paka</city><postalCode>10000</postalCode><country>203</country></billingDetails></cardholderInfo></additionalInfoRequest>"> Což funguje, ale tagy z value se mi vypisují jako text do prohlížeče. Poradíte jak kód ošetřit? Když jsem nahradil <> entitama tak mi toto XML brána nevezme. |
||
Kajman Profil |
#2 · Zasláno: 29. 9. 2021, 13:46:09
Entitami naopak musíte nahradit kromě < i uvozovky a ampersand.
phpfashion.com/escapovani-definitivni-prirucka#toc-html |
||
potom Profil |
Hezký den, děkuji za reakci. Jakmile převedu XML pomocí htmlspecialchars tak mi platební brána vrátí chybu podpisu.
Zkusím vysvětlit: Data se na platební bránu posílají tímto stylem: <input type="hidden" name="MERCHANTNUMBER" value="xxx"> <input type="hidden" name="OPERATION" value="CREATE_ORDER"> <input type="hidden" name="ORDERNUMBER" value="xxx"> <input type="hidden" name="AMOUNT" value="xxx"> <input type="hidden" name="DEPOSITFLAG" value="xxx"> <input type="hidden" name="CURRENCY" value="xxx"> <input type="hidden" name="MERORDERNUM" value="xxx"> <input type="hidden" name="URL" value="xxx"> <input type="hidden" name="REFERENCENUMBER" value="xxx"> <input type= hidden" name= "ADDINFO" value = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"> <input type="hidden" name="DIGEST" value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"> DIGEST jsou podepsaná zřetezená data, pomocí tohoto pole se ověřuje, zda nedošlo k podstrčení jiných dat. $DIGEST = "$MERCHANTNUMBER|$OPERATION|$ORDERNUMBER|$AMOUNT|$CURRENCY|$DEPOSITFLAG|$MERORDERNUM|$URL|$PIN|$ADDINFO"; $sign = new CSignature("xxxx.key", "xxxx", "xxxx.pem"); $DIGEST = $sign->sign($DIGEST); ADDINFO je XML soubor, který jsme řešil v prvním dotazu $ADDINFO = '<?xml version="1.0" encoding="UTF-8"?><additionalInfoRequest xmlns="..........." xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="4.0"><cardholderInfo><cardholderDetails><name>Jan Novák</name><email>jan.novak@seznam.cz</email></cardholderDetails><addressMatch>Y</addressMatch><billingDetails><name>Jan Novák</name><address1>Novákovice</address1><city>Nová Paka</city><postalCode>10000</postalCode><country>203</country></billingDetails></cardholderInfo></additionalInfoRequest>'; Problém je, že vše funguje OK, ale jakmile proženu $ADDINFO funkcí htmlspecialchars, aby XML soubor ve value nedělal bordel v prohlížeči, tak mi následně brána hodí chybu podpisu. Chybně nakonfigurovaný soukromý klíč. Netušíte čím by to mohlo být? |
||
Kajman Profil |
#4 · Zasláno: 29. 9. 2021, 19:58:32
A všechny ostatní hodnoty formuláře ošetřuje také?
|
||
potom Profil |
Kajman:
Neošetřuji, tam už jsou klasická data typu <input type = "hidden" name = "MERCHANTNUMBER" value="433320002"> <input type = "hidden" name = "OPERATION" value="CREATE_ORDER"> <input type = "hidden" name = "ORDERNUMBER" value="5559668600"> <input type = "hidden" name = "AMOUNT" value="26000"> <input type = "hidden" name = "DEPOSITFLAG" value="1"> <input type = "hidden" name = "CURRENCY" value="203"> <input type = "hidden" name = "MERORDERNUM" value="90900"> <input type = "hidden" name = "URL" value="https://www.stranka.cz"> <input type = "hidden" name = "REFERENCENUMBER" value="BB1985"> Jakmile mám <input type= "hidden" name= "ADDINFO" value = "<?php echo $ADDINFO; ?>"> brána mi podpis schválí jakmile dám to, co potřebuju, tj. <input type= "hidden" name= "ADDINFO" value = "<?php echo htmlspecialchars($ADDINFO); ?>;"> tak mi hodí neplatný podpis. (v digestu samozřejmě také vkládám htmlspecialchars($ADDINFO) ) |
||
Keeehi Profil |
#6 · Zasláno: 29. 9. 2021, 23:51:04
potom:
„v digestu samozřejmě také vkládám htmlspecialchars($ADDINFO)“ Což by právě mohl být ten problém. To escapování je pro HTML kontext. Formulář už bude posílat data na bránu v surové podobě. Tedy, zkus htmlspecialchars použít při výpisu do stránky ale nepoužít při výpočtu digestu. |
||
Časová prodleva: 3 roky
|
0