Autor Zpráva
pajadvorak
Profil
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
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
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...
N71
Profil *
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().

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0