Autor | Zpráva | ||
---|---|---|---|
pajadvorak Profil |
#1 · Zasláno: 17. 7. 2021, 20:00:23
Prosím o pomoc. Dost dlouho jsem hledal problém na internetu, ale bohužel nic nedohledal. Na PHP 7.0 vše fungovalo v pořádku. Po migraci na PHP 7.3 fungovat přestalo a píšto níže uvedenou chybu / odpověď z banky. Nevím si s tím rady. Moc děkuji za řešení tohoto problému.
Zde je kód - požadavek do banky: $curl = curl_init(); $soap_request_api_fio = getImportXML_prevod_fio($celkem_kc); file_put_contents("./xml/fio_api_prevod_pozadavek.xml", $soap_request_api_fio); try{ curl_setopt($curl, CURLOPT_URL, 'https://www.fio.cz/ib_api/rest/import/'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_VERBOSE, 0); curl_setopt($curl, CURLOPT_TIMEOUT, 60); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data; charset=utf-8;')); curl_setopt($curl, CURLOPT_POSTFIELDS, array( 'type' => 'xml', 'token' => $token, 'lng' => 'cs', 'file' => new CurlFile("xml/fio_api_prevod_pozadavek.xml") )); $resultXML = curl_exec($curl); // Odpověď z banky. if($resultXML === false){ $err = 'Curl error: ' . curl_error($curl); curl_close($curl); $ok=false; print $err; } else{ // vše v pořádku curl_close($curl); } } catch (Exception $e){ echo "chyba 2"; } Odpověď z banky: <!doctype html><html lang="en"><head><title>HTTP Status 400 – Bad Request</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 400 – Bad Request</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Required String parameter 'token' is not present</p><p><b>Description</b> The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).</p><hr class="line" /><h3>Apache Tomcat/8.5.66</h3></body></html> |
||
Kajman Profil |
#2 · Zasláno: 17. 7. 2021, 20:22:52
Zkontrolujte si obsah proměnné $token.
|
||
pajadvorak Profil |
Kajman:
Co máte prosím přesně na mysli? Nic jsem s tím nedělal. Token je stále stejný. Děkuji. var_dump($token); vrací string(64) a samotný token |
||
lionel messi Profil |
#4 · Zasláno: 17. 7. 2021, 20:35:13
pajadvorak:
> Kajman: > Co máte prosím přesně na mysli? var_dump($token); „Nic jsem s tím nedělal. Token je stále stejný.“ Niekde sa tam zrejme neočakávane dostáva false, null alebo niečo podobné. Nevieme, kde a ako je $token definovaný. |
||
pajadvorak Profil |
lionel messi:
Token se získává z tabulky MySQL $result_tok = $mysqli->query("select * from xxxxx WHERE ucet='xxxx' LIMIT 1") or die(mysqli_error($mysqli)); $row_result_tok = $result_tok->fetch_array(MYSQLI_ASSOC); $token = $row_result_tok["token"]; hned pod tím již následuje zmíněný kód výše curl.... nefunkční i v momentě kdy napíšu ...'token' => 'xxxxxxx'... Tedy natvrdo hodnotu tokenu, takže přece nemůže být null nebo false...
|
||
Časová prodleva: 3 dny
|
|||
N71 Profil * |
#6 · Zasláno: 20. 7. 2021, 14:04:37
Debuggerem si odkrokuj skript, jestli jsou všechny proměnné takové, jaké mají být. Těžko ti někdo poradí něco lepšího. Jinak CURL je knihovna, kterou v podstatě vůbec nemáš potřebovat. Určitě ne na obyčejnou HTTP(S) komunikaci. Celý tvůj skript lze nahradit jedním zavoláním funkce file_get_contents().
|
||
Časová prodleva: 3 roky
|
0