Witajcie,
mam problem z Allegro WebApi. Chciałbym napisać skrypt wystawiający aukcje na allegro.
W tym celu Skopiowałem kod z Wrzasq.pl:
<?php
/**
* @see http://www.php.net/manual/en/book.soap.php
* @author Wrzasq <wrzasq@gmail.com>
* @copyright 2008 (C) by Wrzasq
*/
class WebAPISoapClient extends SoapClient
{
/**
* Kraj - Polska.
*/
const COUNTRY_PL = 1;
/**
* Logowanie do serwisu testwebapi.pl.
*/
const COUNTRY_TESTWEBAPI = 228;
/**
* Zapytanie o wersję Allegro WebAPI.
*/
const QUERY_ALLEGROWEBAPI = 1;
/**
* Czas trwania - 3 dni.
*/
const LIFETIME_3DAYS = 0;
/**
* Czas trwania - 5 dni.
*/
const LIFETIME_5DAYS = 1;
/**
* Czas trwania - 7 dni.
*/
const LIFETIME_7DAYS = 2;
/**
* Czas trwania - 10 dni.
*/
const LIFETIME_10DAYS = 3;
/**
* Czas trwania - 14 dni.
*/
const LIFETIME_14DAYS = 4;
/**
* Koszty pokrywa sprzedający.
*/
const TRANSPORT_COST_SELLER = 0;
/**
* Koszty pokrywa kupujący.
*/
const TRANSPORT_COST_BUYER = 1;
/**
* Przesyłka pocztowa (polecona/paczka).
*/
const TRANSPORT_OPTION_POST = 1;
/**
* Przesyłka pocztowa priorytetowa (polecona/paczka).
*/
const TRANSPORT_OPTION_POSTPRIORITY = 2;
/**
* Przesyłka kurierska.
*/
const TRANSPORT_OPTION_COURIER = 4;
/**
* Odbiór osobisty.
*/
const TRANSPORT_OPTION_PERSONAL = 8;
/**
* Inne.
*/
const TRANSPORT_OPTION_OTHER = 16;
/**
* Zgadzam się na przesłanie przedmiotu za granicę.
*/
const TRANSPORT_OPTION_ABROAD = 32;
/**
* Przedpłata.
*/
const PAYMENT_OPTION_PREPAID = 1;
/**
* Pobranie.
*/
const PAYMENT_OPTION_POSTPAID = 2;
/**
* Płatności Allegro.
*/
const PAYMENT_OPTION_ALLEGRO = 4;
/**
* Bezpieczne Płatności Allegro z Escrow.
*/
const PAYMENT_OPTION_ESCROW = 8;
/**
* Bezpieczne Płatności Allegro z Escrow.
*/
const PAYMENT_OPTION_OTHER = 16;
/**
* Pogrubienie.
*/
const OPTION_BOLD = 1;
/**
* Miniaturka.
*/
const OPTION_THUMB = 2;
/**
* Podświetlenie.
*/
const OPTION_HIGHLIGHT = 4;
/**
* Wyróżnienie.
*/
const OPTION_PREMIUM = 8;
/**
* Strona kategorii.
*/
const OPTION_CATEGORY = 16;
/**
* Strona główna.
*/
const OPTION_HOME = 32;
/**
* Automatycznie tworzy klienta dla interfejsu Allegro WebAPI.
*/
public function __construct()
{
parent::__construct('http://webapi.allegro.pl/uploader.php?wsdl');
}
/**
* Redukuje obraz do wielkości nadającej się do przesyłu.
*
* @param string $url URL obrazka (lokalne, albo sieciowe).
* @return string Binarna zawartość obrazka w formacie JPEG.
*/
public static function resize($url)
{
$image = file_get_contents($url);
// właśnie tutaj używamy Base64 ręcznie, ale nigdzie indziej!
while( strlen( base64_encode($image) ) > 200000)
{
$temp = imagecreatefromstring($image);
$x = ceil(0.9 * imagesx($temp) );
$y = ceil(0.9 * imagesy($temp) );
$image = imagecreatetruecolor($x, $y);
imagecopyresized($image, $temp, 0, 0, 0, 0, $x, $y, imagesx($temp), imagesy($temp) );
imagejpeg($image, 'temp.jpg', 75);
$image = file_get_contents('temp.jpg');
unlink('temp.jpg');
}
return $image;
}
}
// nasze dane
$config = array(
'login' => 'xxxxxxx',
'password' => 'xxxxxxx',
'apiKey' => 'xxxxxxx'
);
// dla serwisu testowego wybierz WebAPISoapClient::COUNTRY_TESTWEBAPI
$country = WebAPISoapClient::COUNTRY_PL;
/*
try
{*/
$client = new WebAPISoapClient();
// pobieranie wersji WebAPI
$version = $client->doQuerySysStatus(WebAPISoapClient::QUERY_ALLEGROWEBAPI, $country, $config['apiKey']);
// właściwe logowanie do serwisu
$session = $client->doLogin($config['login'], $config['password'], $country, $config['apiKey'], $version['ver-key']);
$empty = new stdClass();
$empty->{'fvalue-string'} = '';
$empty->{'fvalue-int'} = 0;
$empty->{'fvalue-float'} = 0;
// to pole w formie pustej ma zawierać spację
$empty->{'fvalue-image'} = ' ';
$empty->{'fvalue-datetime'} = 0;
$empty->{'fvalue-boolean'} = false;
$form = array();
// pamiętaj, że maksymalna długość 50 "znaków" liczona jest w bajtach, dlatego polskie znaki, czy encje HTMLa liczone są za kilka bajtów
$field = clone $empty;
$field->{'fid'} = 1;
$field->{'fvalue-string'} = 'Aukcja FooBar';
$form[] = $field;
$field = clone $empty;
$field->{'fid'} = 2;
$field->{'fvalue-int'} = 48878;
$form[] = $field;
$field = clone $empty;
$field->{'fid'} = 3;
$field->{'fvalue-datetime'} = time();
$form[] = $field;
$field = clone $empty;
$field->{'fid'} = 4;
$field->{'fvalue-int'} = WebAPISOAPClient::LIFETIME_7DAYS;
$form[] = $field;
$field = clone $empty;
$field->{'fid'} = 5;
$field->{'fvalue-int'} = 69;
$form[] = $field;
$field = clone $empty;
$field->{'fid'} = 8;
$field->{'fvalue-float'} = 666;
$form[] = $field;
$field = clone $empty;
$field->{'fid'} = 9;
$field->{'fvalue-int'} = WebAPISOAPClient::COUNTRY_PL;
$form[] = $field;
// 16 to województwo zachodniopomorskie, numer województwa można pobrać z listy opisu pola
$field = clone $empty;
$field->{'fid'} = 10;
$field->{'fvalue-int'} = 16;
$form[] = $field;
$field = clone $empty;
$field->{'fid'} = 11;
$field->{'fvalue-string'} = 'Szczecin';
$form[] = $field;
$field = clone $empty;
$field->{'fid'} = 12;
$field->{'fvalue-int'} = WebAPISOAPClient::TRANSPORT_COST_BUYER;
$form[] = $field;
// flagi składamy przez ich logiczne sumowanie
$field = clone $empty;
$field->{'fid'} = 13;
$field->{'fvalue-int'} = WebAPISOAPClient::TRANSPORT_OPTION_POST | WebAPISOAPClient::TRANSPORT_OPTION_POSTPRIORITY;
$form[] = $field;
$field = clone $empty;
$field->{'fid'} = 14;
$field->{'fvalue-int'} = WebAPISOAPClient::PAYMENT_OPTION_PREPAID | WebAPISOAPClient::PAYMENT_OPTION_ALLEGRO;
$form[] = $field;
$field = clone $empty;
$field->{'fid'} = 15;
$field->{'fvalue-int'} = WebAPISOAPClient::OPTION_BOLD | WebAPISOAPClient::OPTION_THUMB | WebAPISOAPClient::OPTION_HIGHLIGHT;
$form[] = $field;
$i = 0;
// maksymalnie 8 zdjęć!
foreach( array('http://static.allegrostatic.pl/site_images/common/webapi/gifs/webapi_logo.gif', 'http://static.allegrostatic.pl/site_images/common/webapi/gifs/webapi_logo.gif', 'http://static.allegrostatic.pl/site_images/common/webapi/gifs/webapi_logo.gif', 'http://static.allegrostatic.pl/site_images/common/webapi/gifs/webapi_logo.gif') as $image)
{
$field = clone $empty;
$field->{'fid'} = 16 + $i;
$field->{'fvalue-image'} = WebAPISoapClient::resize($image);
$form[] = $field;
$i++;
}
$field = clone $empty;
$field->{'fid'} = 24;
$field->{'fvalue-string'} = '<h1>Opis</h1>
<p>Nasza aukcja - powered by <a href="http://wrzasq.pl/" title="Tworzenie stron i aplikacji internetowych">Wrzasq.pl</a>.</p>
<div><GALERIA></div>.';
$form[] = $field;
$local = uniqid();
$item = $client->doNewAuctionExt($session['session-handle-part'], $form, 0, $local);
$check = $client->doVerifyItem($session['session-handle-part'], $local);
if($item['item-id'] == $check)
{
echo '<p>Wystawiono przedmiot <a href="http://allegro.pl/item' . $item['item-id'] . '.html">' . $item['item-id'] . '</a>.</p>';
}
else
{
echo '<p class="error">Coś poszło nie tak.</p>';
}
}
catch(SoapFault $soapFault)
{
echo "efwefwefwefwe";
}
?>
Niestety nie działa, wywala błąd:
Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object hasn't 'fvalue-date' property in /home/sites/j/ja/jac/jacek.w8w.pl/allegro/index.php5:302 Stack trace: #0 [internal function]: SoapClient->__call('doNewAuctionExt', Array) #1 /home/sites/j/ja/jac/jacek.w8w.pl/allegro/index.php5(302): WebAPISoapClient->doNewAuctionExt('fdd7c4397ac0104...', Array, 0, '4e78c8e1641ec') #2 {main} thrown in /home/sites/j/ja/jac/jacek.za.pl/allegro/index.php5 on line 302
myślę , myślę i nic nie mogę wymyślić.
Bedę bardzo wdzięczny za każdą podpowiedź;)
Pozdrawiam