Autor Zpráva
zbystr
Profil *
zdravim vsechny,
mam na Vas jeden dotazek ohledne noveho importu na sreality

v dokumentaci je uvedeno, ze session_id se vypocita

fixedPart = session_id[0:48]
varPart = md5(session_id + md5(password) + software_key)
session_id = fixedPart + varPart

pricemz to nesedi jiz u ukazky v PHP primo v dokumentaci
po upraveni:
$session_id = new XML_RPC_Value(
                substr($output[0]['sessionId'],0,48).
                md5(
                    $output[0]['sessionId'] .
                    md5(HESLO]) .
                    SW_KEY
                )
);
Pri overeni pres udalost login, vse projde, vraci to 200, ale pokud volam udalost addAdvert, tak mi to same hazi chybu 407, tedy spadny session_id.
Uz tomu nejak nerozumim, co a jak, proto prosim o mate s tim nekdo zkusenost?

Predem dekuji za odpoved

Udalost addAdvert:
$params = array(new XML_RPC_Value($session_id, $advert_data);
$msg = new XML_RPC_Message("addAdvert", $params);
chyba 402

Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Moderátor Majkl578: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou.
farradox
Profil
Ahoj,
Už 5 dní řeším úplně stejný problém a nemůžu se absolutně pohnout. Struktury mám hotové a pořád se mi vrací kód 407. Na Seznam mi přidělil technika, který mi nezvedá telefony a na e-maily reaguje "bylo předáno k řešení". Celkem mě hodně zklamali, protože takový přístup jsem dlouho nezažil...

Můžu se zeptat, kdy ti vyskočila chyba 402?
jpesout
Profil *
Ahoj,
omlouvám se za vytažení starého threadu, ale tady je to dobře zaindexované a ještě to nebylo zodpovězeno, tak snad to někomu dalšímu pomůže.
Jde o to, že musíš spočítat nové session id podle toho algoritmu před _každým_ požadavkem. Tady se to liší ředa od realitymixu, který má téměř stejné API, ale session_id se počítá jenom jednou.

  
function get_new_session_id($fix_part, $session_id, $heslo, $sw_key) {
  return $fix_part . md5($session_id . md5($heslo) . $sw_key);
}

$session_id = get_new_session_id($fix_part, $session_id, $heslo, $sw_key);
$data = xmlrpc_request('login', $session_id);

foreach($list_delete as $id_item) {
  $session_id = get_new_session_id($fix_part, $session_id, $heslo, $sw_key);
  $data = xmlrpc_request('delAdvert', array($session_id, 0, (string)$id_item));
}
Malinka
Profil
Ahoj,
upravil jsem podle návodu uživatele jpesouta svůj kód tak, aby se pokaždé vypočítalo session_id znova, ale přesto nejsem schopen zavolat funkci listAdvert bez toho aby to vrátilo chybu 407 - session is bad.

Níže přikládám celý kód a také výpis, který získám:
require_once 'RPC.php';

function get_new_session_id($fix_part, $session_id) {
	$heslo = 'heslovmd5';
	$sw_key = 'swkey';
		
	return $fix_part . md5($session_id . $heslo . $sw_key);
}

// connect na server
$client = new XML_RPC_Client('/RPC2', 'http://import.sreality.cz', 80);
// vytvoreni dotazu – ID klienta
// parametr – ID klienta
$params = array(new XML_RPC_Value(idklienta, 'int'));
$msg = new XML_RPC_Message('getHash', $params);
$response = $client->send($msg);
$getHash = XML_RPC_decode($response->value());

echo '<pre>';
echo '<b>GETHASH</b><br />';
var_dump($getHash);
echo '</pre>';

if($getHash['status'] == 200) {
	$fixni = substr($getHash['output'][0]['sessionId'], 0, 48);
	$session = $getHash['output'][0]['sessionId'];
	echo $fixni.' - '.$session.'<br />';

	$newSessionId = get_new_session_id($fixni, $session);
	
	$params = array(new XML_RPC_Value($newSessionId));
	$msg = new XML_RPC_Message('login', $params);
	$response = $client->send($msg);
	$login = XML_RPC_decode($response->value());
	
	echo '<pre>';
	echo '<b>LOGIN</b><br />';
	var_dump($login);
	echo '</pre>';
	
	$params = array(new XML_RPC_Value($newSessionId));
	$msg = new XML_RPC_Message('listAdvert', $params);
	$response = $client->send($msg);
	$listAdvert = XML_RPC_decode($response->value());	
	
	echo '<pre>';
	echo '<b>LISTADVERT</b><br />';
	var_dump($listAdvert);
	echo '</pre>';	
}


GETHASH
array(3) {
  ["status"]=>
  string(3) "200"
  ["output"]=>
  array(1) {
    [0]=>
    array(1) {
      ["sessionId"]=>
      string(80) "2011022721312718000000000000000000000000000031438edd76fc2a92d1e1fbed09895fe10f82"
    }
  }
  ["statusMessage"]=>
  string(2) "OK"
}

LOGIN
array(3) {
  ["status"]=>
  string(3) "200"
  ["output"]=>
  array(0) {
  }
  ["statusMessage"]=>
  string(2) "OK"
}
LISTADVERT
array(3) {
  ["status"]=>
  string(3) "407"
  ["output"]=>
  array(0) {
  }
  ["statusMessage"]=>
  string(14) "Session is bad"
}


Zkrátka, jak je vidět, tak gethash projde v pořádku, login projde v pořádku, ale listAdvert už ne.

Prosím někoho, kdo s tím má zkušenosti, zda by mohl poradit. Jsem už skutečně v koncích.

Děkuji.
Frozen
Profil
Dobrý den,
omlouvám se za vytažení starého vlákna, ale řekl bych že se to zde hodí.
Řeším problém s exportem fotografií k již exportovanému inzerátu.

Přihlášení mi proběhne v pohodě, ale jakmile se snažím poslat fotografii k inzerátu skončí mi chybou, že neodesílám parametr 'data' (který má formát binary) .... který dle mého odesílám, pokud mu nastavim formát např int nebo string chyba se změní na to, že v parametru odesílám špatný formát (tudíž ne binary).
Nikde se o tom nic nepíše a z popisu importu na srealitách toho nic víc nevyčtu. Proto budu rád za každou radu, která mě nakopne, případně pomůže. Pro představu uvádím kód a výstup výše uvedeného.

Předem děkuji.

1)
    $data['data'] = new XML_RPC_Value($foto, 'binary'); 
    $data['main'] = new XML_RPC_Value('1', 'int');        
                    

    $newSS = get_new_session_id($fixni, $newSessionId);
    $params = array(
    new XML_RPC_Value($newSS, 'string'),
    new XML_RPC_Value($inzerat['sreality_id'], 'int'),
    new XML_RPC_Value($property_id, 'string'),    
    new XML_RPC_Value($data, 'struct')
    );
    $msg = new XML_RPC_Message('addPhoto', $params);
    $response = $client->send($msg);
    $addPhoto = XML_RPC_decode($response->value()); 
 
    echo '<pre>';
    echo '<b>addPhoto</b><br />';
    var_dump($addPhoto);
    echo '</pre>';    


hlásí:
addPhoto
array(3) {
  ["status"]=>
  string(3) "452"
  ["output"]=>
  array(0) {
  }
  ["statusMessage"]=>
  string(57) "Invalid parameters: Required attribute 'data' is missing."
}


2)
    $data['data'] = new XML_RPC_Value($foto, 'string'); 
    $data['main'] = new XML_RPC_Value('1', 'int');        
                    

    $newSS = get_new_session_id($fixni, $newSessionId);
    $params = array(
    new XML_RPC_Value($newSS, 'string'),
    new XML_RPC_Value($inzerat['sreality_id'], 'int'),
    new XML_RPC_Value($property_id, 'string'),    
    new XML_RPC_Value($data, 'struct')
    );
    $msg = new XML_RPC_Message('addPhoto', $params);
    $response = $client->send($msg);
    $addPhoto = XML_RPC_decode($response->value()); 
 
    echo '<pre>';
    echo '<b>addPhoto</b><br />';
    var_dump($addPhoto);
    echo '</pre>';   

hlásí:
addPhoto
array(3) {
  ["status"]=>
  string(3) "452"
  ["output"]=>
  array(0) {
  }
  ["statusMessage"]=>
  string(73) "Invalid parameters: Attribute 'data' must be binary (it is )."
}
Malinka
Profil
Frozen:
Ahoj,
já to mám udělané takhle, a funguje to v pohodě:

$fotkaurl = url na fotku;
$file2import = @file_get_contents($fotkaurl);

$advert_data =  array(
    'alt' => new XML_RPC_Value('', 'string'), // zakladni popis
    'main' => new XML_RPC_Value(0, 'int'), // hlavni obr
    'photo_id' => new XML_RPC_Value('', 'int'),
    'data' => new XML_RPC_Value($file2import, 'base64')
);


Možná používáš jinou knihovnu, v tom případě to musíš kódovat do base64, což je binární formát.

Malinka
Frozen
Profil
Malinka:
Super pomohlo, děkuji moc.
Pirozek
Profil *
Ahoj,
nerad oteviram stary topic, ale tohle je jedina diskuze, kterou mi google najde :)

Muzete nekdo ukazat kousek tech advert_dat, ktera se maji predat fci addAdvert? Mam je ted vytvorene jako normalni pole
Array('nazev' => hodnota)

Kdyz volam addAdvert takhle:

$a = Array(new XML_RPC_Value($this->ssid,$nemovitost));
		
		$msg = new XML_RPC_Message('addAdvert', $a);
		


Dostavam tohle

Warning: array_key_exists() [function.array-key-exists]: The first argument should be either a string or an integer in XML\RPC.php on line 1568

Fatal error: Call to a member function kindOf() on a non-object in XML\RPC.php on line 1948


Takhle vypada kousek mych advert_dat:

$nemovitost = Array(
'advert_function' => $advert_function['Prodej'],
'advert_lifetime' => $advert_lifetime['7 dní'],
'advert_price' => 10000.0,


Predem diky za radu :)
Malinka
Profil
$newAdvert['seller_id'] = (int)$inzerat->seller_id;
$newAdvert['advert_id'] = (int)$inzerat->advert_id;
$newAdvert['advert_function'] = (int)$inzerat->advert_function;
$newAdvert['advert_type'] = (int)$inzerat->advert_type;
$newAdvert['advert_price'] = (int)$inzerat->advert_price;

$data = $this->sendMsg('addAdvert', $newsid, $newAdvert);

přičemž ta funkce sendMsg pak vypada takhle:

public function sendMsg ($method) {
        $args = array_slice(func_get_args(), 1);
        if (count($args) === 0) {
            $m = new XML_RPC_Message($method);
        } else {
            $de = array();
            foreach($args as $arg) {
                $de[] = XML_RPC_encode($arg);
            }
            $m = new XML_RPC_Message($method, $de);
        }
        $resp = $this->spojeni->send($m);
        if ($resp->faultCode()) {
            return 'Fault ' . $resp->faultCode() . ': ' .  $resp->faultString();
        } else {
            return XML_RPC_decode($resp->value());
        }	
}
Pirozek
Profil *
Supr dik, a ten $inzerat->seller_id je normalne hodnota, nebo je to pres new XML_RPC_Value?
Pirozek
Profil *
Uz jsem na to prisel, dobry. Dekuju moc, ta funkce na sendMsg mi hodne pomohla :)
habitat
Profil *
$newSessionId = get_new_session2_id($fixni, $newSessionId);

    $params = array(
	new XML_RPC_Value($newSessionId, 'string'),
	new XML_RPC_Value(971941, 'int')
	);
	
	$msg = new XML_RPC_Message('listPhoto', $params);
    $response = $client->send($msg);
    $listPhoto = XML_RPC_decode($response->value());    
	
    echo '<pre>';
    echo '<b>LISTPHOTO</b><br />';
    var_dump($listPhoto);
    echo '</pre>'; 


nevite kde muze bejt chyba?? hazi mi to kindOF z RPC.php jak kdyby mi chybela hodnota v params, ale i kdyz tam dam rkid tak to nejde...
habitat
Profil *
přesně: Fatal error: Call to a member function kindOf() on a non-object in /var/www/web5/dream-reality.cz/dream-reality.cz/pear/xmlrpc/RPC.php on line 1950
Frozen
Profil
habitat:
Hází mi to stejnou chybku, při tvoření exportu na realitymix, neví někdo čím to může být?
Anicka
Profil *
Pri volani metody, premenna parameter musi obsahovat tolko premennych ako je uvedene v dokumentacii. Napr. pri metode

listPhoto( session id as string, advert id as int, advert rkid as string )
by to mal $params vyzerat nasledovne:

$params = array(
    new XML_RPC_Value($newSessionId, 'string'),
    new XML_RPC_Value(971941, 'int')
    new XML_RPC_Value('', 'string')
    );

- bud advert_rkid alebo advert_id ma byt prazdne

Potom pri volani metody uz skript nevyhodi ziadnu chybu.
Frozen
Profil
Již jsem to vyřešil, ale bohužel jsem narazil na další věc. Jakmile se snažím vložit nabídku, kde mám vyplněné jejich požadované údaje, začne to řvát, že nemám vyplněné region_id. Když jej vyplním, tak dostanu chybu 480, chyba pří zápisu nabídky do databáze....
Bavil jsem se s člověkem co dělal dokumentaci k tomu a prý odesílám něco navíc, případně s překlepem..... Kontroloval jsem to asi 10x ale odesílám jen to co chtějí i v správném formátu.... nesetkal se s tím někdo z Vás?

Předem děkuji za reakce.

Vyřešeno..... odesílal jsem description_eng místo description_en.... nafackoval bych si za to :)
buchti
Profil
Omlouvám se za otevření topicu, ale mám dotaz ohledně přenášení dat do methody.

public function addAdvert($data) {
        $this->prepocitejSessionId();
        $params = array(
            new XML_RPC_Value($this->session_id, 'string'),
            new XML_RPC_Value($data, 'struct')
            );
        $msg = new XML_RPC_Message("addAdvert", $params);
        $response = $this->client->send($msg);
        print_r($response);
    }



$data = array('building_type' => 2,
                'building_condition' => 1,
                'ownership' => 1,
                'usable_area' => 75,
                'floor_number' => 2,
                'description' => 'popisek',
                'advert_function' => 1,
                'advert_type' => 1,
                'advert_subtype' => 5,
                'advert_lifetime' => 2,
                'advert_price' => 999999,
                'advert_price_currency' => 1,
                'advert_price_unit' => 1,
                'locality_city' => 'Bukovec',
                'locality_inaccuracy_level' => 1,
                'balcony' => 0,
                 'loggia' => 1,
                 'terrace' => 1,
                 'cellar' => 1,
                 'parking_lots' => 1,
                 'garage' => 0
        );
addAdvert($data);

kód ale nefunguje a píše chybu: Invalid parameters: Required attribute 'advert_type' is missing. Což nechápu, protože je v poli s hodnotou 1. Není chyba ani v přihlášení, ani v session_id... chyby nejsou ani v objektu, mám to v něm psané, takže slovíčko $this-> funguje. Prosím o radu

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