Intrebare curl

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

mirceabondar
Average Member
Mesaje: 115
Membru din: Sâm Mai 29, 2010 7:42 pm

Intrebare curl

Mesajde mirceabondar » Lun Iul 13, 2015 10:31 pm

Daca pagina api imi returneaza un string de forma "Array ( [status] => EROARE [info] => User / Parola Gresita ) " , pot converti acest string in array?



nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Re: Intrebare curl

Mesajde nevvermind » Lun Iul 13, 2015 11:56 pm

API-ul ala comunica prin var_dump? Jesus, really? Success sa parsezi stringul ala.
Nu poti folosi json sau xml?
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

mirceabondar
Average Member
Mesaje: 115
Membru din: Sâm Mai 29, 2010 7:42 pm

Re: Intrebare curl

Mesajde mirceabondar » Mar Iul 14, 2015 8:19 am

fisierul php este asta:

Cod: Selectaţi tot

<?php
function clausro_getConfigArray() {
    $configarray = array(
        "Username" => array("Type" => "text", "Size" => "20", "Description" => "Introduceti utilizatorul API",),
        "Parola" => array("Type" => "password", "Size" => "15", "Description" => "Introduceti parola API",),
        "Test" => array("Type" => "yesno", "Description" => "Activeaza modul de testare",),
    );
    return $configarray;
}

function clausro_RegisterDomain($params) {
    $table = 'tbldomainsadditionalfields';
    $fields = "value";
    $where = array("domainid" => $params['domainid']);
    $resultquery = select_query($table, $fields, $where);
    while ($data = mysql_fetch_array($resultquery)) {
        $date[] = $data['value'];
    }

    $nume = $date[0];
    $firma = $date[1];
    $cf = $date[2];
    $reg = $date[3];
    $adresa = $date[4];
    $oras = $date[5];
    $tara = $date[6];
    $codpostal = $date[7];
    $fix = $date[8];
    $fax = $date[9];
    $email = $date[10];
    $domeniu = $params['sld'] . '.' . $params['tld'];
    $ns1 = $params['ns1'];
    $ns2 = $params['ns2'];
    $ns3 = $params['ns3'];
    $vars = 'user=' . $params['Username'] . '&pass=' . $params['Parola'] . '&contact=' . $nume . '&cf=' . $cf . '&reg=' . $reg . '&adresa=' . $adresa . '&loc=' . $oras . '&tara=' . $tara . '&cod=' . $codpostal . '&fix=' . $fix . '&fax=' . $fax . '&email=' . $email . '&domeniu=' . $domeniu . '&firma=' . $firma . '&ns1=' . $ns1 . '&ns2=' . $ns2 . '&ns3=' . $ns3;
    if ($params['Test']) {
        $url = 'http://api.clausweb.ro/test/';
    } else {
        $url = 'http://api.clausweb.ro/';
    }
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    if ($result === FALSE) {
        echo("Eroare:" . curl_error($ch));
    }
    curl_close($ch);


}


Daca campurile obligatorii din formular nu sunt completate, in var dump imi returneaza stringul de mai sus. Si vroiam in acest caz sa verific daca raspunsul status = EROARE salveaza valoarea "info" in log

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Re: Intrebare curl

Mesajde nevvermind » Mar Iul 14, 2015 11:27 am

Asta e putin diferit de ce ai scris initial, nu crezi?
Nu stiu despre ce status sau info vorbesti, dar un API nu tre sa comunice prin var_dump.

Si tu arati codul de client, dar tre sa vedem codul API-ului.

Cod: Selectaţi tot

// API

// valideaza requestul

$validationResult = array(
    'errors' => array(
        'password' => 'Invalid password',
        'email' => 'Invalid Email',
    ),
);

header('Content-Type: application/json');
echo json_encode($validationResult);


// API client
$apiResponse = json_decode($curlResponse);

if (!empty($apiResponse['errors'])) { // shit!
    if (!empty($apiResponse['errors']['password']) {
        // log?
    }
}

De asemenea, cred ca n-ar strica sa validezi formularul si inainte de trimitere, ca un user sa nu astepte dupa curl sa vada daca a gresit sau nu.
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

mirceabondar
Average Member
Mesaje: 115
Membru din: Sâm Mai 29, 2010 7:42 pm

Re: Intrebare curl

Mesajde mirceabondar » Mar Iul 14, 2015 12:07 pm

Rapspunsul status il primesc de la api-ul celor de la clausweb. Nu trimiteam datele prin var_dump, dadusem var_dump la $result = curl_exec($ch); in care imi returna stringul "array("status" => "error")". Am intrebat si la clausweb daca api-ul raspunde in json si mi-au trimis link-ul asta: http://api.clausweb.ro/test/ dar nu arata cine stie ce informatii

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Re: Intrebare curl

Mesajde nevvermind » Mar Iul 14, 2015 12:32 pm

Of, omule.

Deci NU ai in control API-ul.
API-ul returneaza un array si tu ai facut un var_dump.
Dar var_dump-ul nu era in codul dat de tine, si, dupa cum suna intrebarea ta originala, am presupus ca ai facut un API in care foloseai var_dump si printai acel string pe care tu l-ai luat drept raspuns.

Nu trimiteam datele prin var_dump, dadusem var_dump la $result = curl_exec($ch); in care imi returna stringul "array("status" => "error")"

Unde-i asta in codul dat de tine anterior?

Vezi ca primesti un array, fiinto, nu un string. Daca faci var_dump, e normal sa fie string. Trage o fuga pe php.net la var_dump si citeste.

PS: Si cand dai cod, da-l pe cel folosit, nu altul.
Facusi un canal de php pe freenode - ##php-ro : https://webchat.freenode.net/

mirceabondar
Average Member
Mesaje: 115
Membru din: Sâm Mai 29, 2010 7:42 pm

Re: Intrebare curl

Mesajde mirceabondar » Mar Iul 14, 2015 1:10 pm

Si eu m-am exprimat ca un rahat... Acum am inteles :)

CristianG
Average Member
Mesaje: 85
Membru din: Mie Oct 30, 2013 4:45 pm

Re: Intrebare curl

Mesajde CristianG » Mar Iul 14, 2015 1:41 pm

Asta e problema ca tu nu sti nici macar cum luceaza sistemul.

Daca te uiti bine prin sistemul de curl tu pasezi variabila "curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);" mai exact $vars definita de tine.

Cod: Selectaţi tot

$vars = 'user=' . $params['Username'] . '&pass=' . $params['Parola'] . '&contact=' . $nume . '&cf=' . $cf . '&reg=' . $reg . '&adresa=' . $adresa . '&loc=' . $oras . '&tara=' . $tara . '&cod=' . $codpostal . '&fix=' . $fix . '&fax=' . $fax . '&email=' . $email . '&domeniu=' . $domeniu . '&firma=' . $firma . '&ns1=' . $ns1 . '&ns2=' . $ns2 . '&ns3=' . $ns3;


Odata ce a fost pasata in api`ul tau acolo vei avea procesele ce sa faca mai departe cu datele trimise de script-ul tau in serverul tau mai exact "$url = 'http://api.clausweb.ro/';" aici.

De aici va trebui sa procesezi in server datele care deja le-ai pasat si desigur va trebui sa ai in vedere ca $rezultat`ul tau trebuie sa fie true daca ete okey pentru a evita codul de mai jos.

Success


Cod: Selectaţi tot

    if ($result === FALSE) {
        echo("Eroare:" . curl_error($ch));
    }


Înapoi la “PHP Incepători”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 95 vizitatori