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
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
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
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.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0