OPAY / Techninė informacija / Web API / Duomenų kodavimas siekiant išvengti galimų iškraipymų

Duomenų kodavimas siekiant išvengti galimų iškraipymų

Kadangi siunčiamuose duomenyse pasitaiko ne tik lotyniškų, bet ir kitų raidžių, kurias ypač svarbu persiųsti teisinga simbolių koduote, tai ar pranešimas pasieks adresatą neiškraipytas, prikausys nuo to ar Pirkėjo interneto naršyklė visus simbolius suinterpretuos teisingai. Atsiranda galimybė atsirasti duomenų iškraipymui, dėl ko visas duomenų paketas gali būti palaikytas neteisingu (neatitinkančiu skaitmeninio parašo). Kuo mažiau išvystyta naršyklė tuo didesnė klaidos tikimybė.

Situaciją sprendžiame šiuo būdu:

Užkoduojame siunčiamus duomenis base64 koduote. Suformuojame visą duomenų paketą, skirtą siųsti į OPAY. Sakykime, kad tai asociatyvus masyvas, kurio indeksas žymi parametro pavadinimą, o reikšmė – parametro reikšmę. Šį masyvą paverčiame RFC 1738 standartu koduota URL eilute, kurią paverčiame į base64 koduodės eilutę, tada turimos eilutės simbolius pakeičiame:
+ į -
/ į _
= į ,

$masyvas['website_id'] = 'W8K5JU89MH';
$masyvas['order_nr'] = 'krepselis_89';
$masyvas['…….'] = '…….'; // kiti parametrai
$eilute = strtr(base64_encode(http_build_query($masyvas)), array('+' => '-', '/' => '_', '=' => ','));
// kintamojo $eilute reišmę siunčiame kaip parametro encoded reikšmę

 Iškoduojame gautus duomenis

Iškoduodami parametro encoded reikšmę atliekame veiksmus atvirkščia tvarka nei užkodavimo metu.

$eilute = $_POST['encoded'];
$masyvas = array();
// masyvas, į kurį bus išpakuoti duomenys
parse_str(base64_decode(strtr($eilute, array('-' => '+', '_' => '/', ',' => '='))), $masyvas);