PHP + Allegro WebApi

0

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 <[email protected]>
 * @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

0

Brakuje ci pola fvalue-date. Dodaj je sobie:

$empty->{'fvalue-date'} = '';
0

Bardzo dziękuję ;)
Mam jeszcze jedno pytanie:
chciałbym napisać automat, który w momencie gdy ktoś kupi produkt z mojej aukcji zmienia pewną wartość w bazie danych, gdy aukcja zakończy sie bez zakupu - zmienia inną wartość etc. Czy coś takiego jest możliwe?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0