Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][soap] problem z połączeniem do webAPI Allegro
Forum PHP.pl > Forum > PHP
squasher
Witam,

walczę już od paru dni z umieszczeniem skryptu na serwerze. Lokalnie na komputerze na Windowsie mam zainstalowany Webserv i z poziomu przegladarki http://localhost/skrypt.php wszystko pięknie chodzi. Nie ma problemu do pobrania informacji z allegro przez funkcje webAPI Allegro.

Fragment kodu po którym się wszystko psuje:

$soap=new SoapClient('http://webapi.allegro.pl/uploader.php?wsdl');
$userId=$soap->doGetUserId(1,$allegro_user,'',$webAPI_KEY);

a oto błąd z przeglądarki :
Fatal error: Call to undefined function: dogetuserid() in /var/www/sites/skrypt.php on line 14

Nie sądzę aby było coś tu nie tak. Wydaje mi się że to problem z poprawnym umieszczeniem plików pakietu nusoap. Wszystkie pliki znajdują się razem na serwerze w tym samym katalogu.

Próbowałem umieszczać skrypt na kilku różnych serwerach i wszędzie ten sam problem, albo też inny :
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://webapi.allegro.pl/uploader.php?wsdl' : failed to load external entity "http://webapi.allegro.pl/uploader.php?wsdl" in /home/sites/f/fi/fin/finebuy.za.pl/panel_lista.php:7 Stack trace: #0 /home/sites/f/fi/fin/finebuy.za.pl/panel_lista.php(7): SoapClient->SoapClient('http://webapi.a...') #1 {main} thrown in /home/sites/f/fi/fin/finebuy.za.pl/panel_lista.php on line 7

Bez waszej pomocy poddaję się bo już zabrakło pomysłów.
Pozdrawiam
erix
Cytat
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://webapi.allegro.pl/uploader.php?wsdl' : failed to load external entity "http://webapi.allegro.pl/uploader.php?wsdl" in /home/sites/f/fi/fin/finebuy.za.pl/panel_lista.php:7 Stack trace: #0 /home/sites/f/fi/fin/finebuy.za.pl/panel_lista.php(7): SoapClient->SoapClient('http://webapi.a...') #1 {main} thrown in /home/sites/f/fi/fin/finebuy.za.pl/panel_lista.php on line 7

za.pl, to był darmowy hosting, z tego co pamiętam. winksmiley.jpg

Na darmowych zapomnij. Zablokowana większość pożytecznych rzeczy.
squasher
Tak ten akurat jest darmowy. Ja jednak cały czas staram się wrzucić skrypt na serwer płatny. Wydaje mi się że o obsługę SOAP na serwerze chodzi i że należy, albo zainstalować ja przez administratora (ta opcja chyba niemożliwa), albo jakoś posłużyć się innymi bibliotekami jak nuSOAP, jednakże nie wiem jak do końca to zrobić. Dorzuciłem pliki nuSOAP do katalohu ze skryptem, a w skrypcie dodałem :

require_once 'nusoap.php';

jednakże nadal nie działa
jang
Cytat(squasher @ 10.09.2010, 00:07:00 ) *
Dorzuciłem pliki nuSOAP do katalohu ze skryptem, a w skrypcie dodałem :

require_once 'nusoap.php';

jednakże nadal nie działa

http://webapi.allegro.pl/uploader.php?apiMethod=doLogin#

Zobacz ostatnie (u dołu) dwa wpisy. W SOAP jest tak:
  1. $session = $client->doLogin($config['login'], ... itd.

a w nuSOAP jest tak :
  1. $response = $soap->call("doLogin", $msg);
php83
Przesyłam wycinek mojego kodu, może komuś się przyda:
Kod
class allegro_wsdl
{
  public $error_msg;
  protected $klient;

  public function __construct($login,$haslo,$kraj,$klucz)
  {
    global $cur;
    $this->error_msg= array();

    switch($cur){
      case 'CZK': $adres="http://webapi.aukro.cz/uploader.php?wsdl";break;
      case 'EUR': $adres="http://webapi.aukro.sk/uploader.php?wsdl";break;
      default:    $adres="http://webapi.allegro.pl/uploader.php?wsdl";break;      
    }
    
    $this->klient = new SoapClient($adres, array('trace' => TRUE));
    try {
      $response=$this->klient->doQuerySysStatus(1, $kraj, $klucz);
    }
    catch (SoapFault $soapFault) {
        echo "Request :<br>", htmlentities($client->__getLastRequest()), "<br>";
        echo "Response :<br>", htmlentities($client->__getLastResponse()), "<br>";

    $this->error_msg[]=$soapFault->{'faultstring'}.$soapFault->{'faultcode'};
    return false;
    }
    $verkey=$response['ver-key'];
    try {
      $response= $this->klient->doLogin($login, $haslo, $kraj, $klucz, $verkey);
    }
    catch (SoapFault $soapFault) {
        echo "Request :<br>", htmlentities($client->__getLastRequest()), "<br>";
        echo "Response :<br>", htmlentities($client->__getLastResponse()), "<br>";

    $this->error_msg[]=$soapFault->{'faultstring'}.$soapFault->{'faultcode'};
    return false;
    }
    
    return $sesja=$response['session-handle-part'];
  }
Pyton_000
Ale jakbyś zobaczył dokumentację Allegro to byś wiedział że taka metoda występuje: http://allegro.pl/webapi/documentation.php/show/id,102
Więc problem z SOAP jest jak najbardziej...
php83
Tak, masz racje, sorka, mój błąd, edytowałem posta i macie ode mnie wycinek mojego kodu, odpowiadający za logowanie.

Informuję, że w ideale powinno korzystać się z szyfrowanej funkcji dologin ale jeszcze nie rozpracowałem jak to zrobić w php.
Jak ktoś to rozpracował będę wdzięczny za podzielenie się kodem.

Mam rozpracowaną obsługę połowy funkcji allegro, odpowiadającą za: wystawianie, listowanie i podmienianie aukcji, oraz za ściąganie do sklepu danych złożonego przez klienta zamówienia. Zrobiłem w PHP tzw. dalsze aukcje, czyli zdjęcia z tytułem i ceną. Tak więc mogę się podzielić cenną radą. Pozdr
viking
Ja też ostatnio miałem podobne problemy mimo że wszystko działało przez ostatni rok. W najnowszych wersjach PHP są fixy do soap. Coś jest nie tak z cachem wsdla. Jest źle wczytywany.
Pyton_000
A weź... z SOAP to i ja ostatnio miałem problemy. Miałem skrypt który po SSL podpina się pod serwer i zaciąga WSDL. Pod php 7 nie działało, a 5 jak ta lala... Problem był w tym że w php7 wywalało problem z SSL i czymś tam jeszcze.
php83
Solved? PHP SOAP problem z połączeniem do webAPI Allegro

Jak przestudiujecie dokumentację webAPI i zerkniecie na przykładowe rozwiązania, to zobaczycie, że do niedawna parametry musiały/mogły być układane wg. określonej kolejności.
Teraz trzeba podać odpowiednia tablice:

  1. $this->klient = new SoapClient("https://webapi.allegro.pl/uploader.php?wsdl", array('trace' => TRUE));
  2. try {
  3. $response=$this->klient->doQuerySysStatus(array('sysvar' => 1, 'countryId' => $kod_kraju, 'webapiKey' => $klucz_webAPI));
  4. }
  5. catch (SoapFault $soapFault) {
  6. // echo "Request :<br>", htmlentities($client->__getLastRequest()), "<br>";
  7. // echo "Response :<br>", htmlentities($client->__getLastResponse()), "<br>";
  8.  
  9. $this->error_msg[]=$soapFault->{'faultstring'}.$soapFault->{'faultcode'};
  10.  
  11. return false;
  12. }
Pyton_000
Eeee?? Z tego co pamiętam to zawsze trzeba było podać jakąś poj... tablicę z nazwami które kompletnie nic nie mówiły. Allegro pod tym względem kuleje.
sabat24
Wcześniej trzeba było dostarczyć parametry do funkcji, więc np. powyższy kod wyglądał tak:

  1. return $this->_client->doQuerySysStatus(
  2. $Component,
  3. self::COUNTRY_CODE,
  4. $this->_config['allegro_key']
  5. );
Pyton_000
Hmm.... Te api allegro ssie totalnie... 1 raz chyba robiłem z nimi integrację i wincyj nie chce. Może kiedyś dokończą swoje RestApi...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.