Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] pobieranie danej z funkcji - obiektowo
Forum PHP.pl > Forum > Przedszkole
bartekxm
Witam!
Jestem początkujący jeśli chodzi o programowanie obiektowe. Do tej pory programowałem tylko strukturalnie. Niestety mam za zadanie wykonać połączenie swojego systemu webowego z systemem wysyłkowym firmy kurierskiej DPD. Znalazłem w sieci rozwiązanie napisane obiektowo.
Struktura działania klasy narzucona przez DPD jest następująca:
1. rejestrowanie paczki w systemie DPD - mam funkcję print_r($dpd->registerNewPackage());
2. na podstawie danych odebranych z systemu DPD po wykonaniu punktu 1 należy wygenerować etykietę logistyczną podając w argumencie funkcji nr paczki - tzw. waybill
tutaj mam funkcję - var_dump($dpd->getLabelPDF(2, "waybill"));
3. na podstawie danych odebranych z systemu DPD po wykonaniu punktu 1 należy wygenerować protokół podając w argumencie funkcji nr referencyjny - funkcja: var_dump($dpd->getProtocol(array('REFERENCE_NUMBER')));

WAYBILL oraz REFERENCE_NUMBER zwracane są w tablicy w pierwszej funkcji registerNewPackage() jednak nie wiem jak się do nich odwołać aby użyć tych zmiennych w dwóch kolejnych funkcjach.

poniżej funkcja registerNewPackage():
  1. public function registerNewPackage(){
  2. /*
  3.   * zapisuje paczke w DPD
  4.   */
  5.  
  6. if(!is_array($this->shipTo) or !is_array($this->shipFrom) or !is_array($this->packageDetails)){
  7. Throw new Exception("Parametry paczki muszą zostać uzupełnione poprawnie");
  8. }
  9.  
  10. $openUMLFV1 = $this->prepareRegisterString();
  11.  
  12. try {
  13. $params1->policyV1="STOP_ON_FIRST_ERROR";
  14. $params1->openUMLXV1= $openUMLFV1;
  15. $params1->authDataV1 = $this->authData;
  16. $result = $this->soapClient->generatePackagesNumbersXV1($params1);
  17. $xml = simplexml_load_string($result->return);
  18.  
  19. //sprawdzenie statusu
  20. switch($xml->Status) {
  21. case "DUPLICATED_PACKAGE_SEARCH_KEY":
  22.  
  23. $error = "Identyfikator ".$this->packageDetails['reference_number'].", jest juz w systemie. Paczka nie może zostać ponownie zapisana pod tym samym identyfikatorem. Błąd: ".$xml->Packages->Package->InvalidFields->InvalidField->Info;
  24. $return_array = array(
  25. "type" => "error",
  26. "message" => $error
  27. );
  28. break;
  29.  
  30. case "DISALLOWED_FID":
  31. $error = "Błąd konfiguracji, niepoprawny numer FID. Kod błędu: ".$xml->Status;
  32. $return_array = array(
  33. "type" => "error",
  34. "message" => $error
  35. );
  36. break;
  37.  
  38. case "INCORRECT_DATA":
  39.  
  40. //wyswietlenie bledu dla kazdej dostepnej parcel
  41. foreach($xml->Packages->Package->InvalidFields->InvalidField as $invalid_field) {
  42. if($invalid_field->Status == "VALUE_INCORRECT") {
  43. $error .= $invalid_field->Info.', w polu: '.$invalid_field->FieldName.'<br/>';
  44. }
  45. }
  46. $return_array = array(
  47. "type" => "error",
  48. "message" => $error
  49. );
  50. break;
  51.  
  52. case "OK":
  53. $return_array = array(
  54. "type" => "ok",
  55. "array" => array(
  56. "package_id" => $xml->Packages->Package->PackageId,
  57. "reference" => $xml->Packages->Package->Reference,
  58. "parcels" => $xml->Packages->Package->Parcels,
  59. "first_waybill" => $xml->Packages->Package->Parcels->Parcel->Waybill)
  60. );
  61. break;
  62. }
  63. } catch (Exception $e) {
  64. $error = $e->getMessage();
  65.  
  66. $return_array = array(
  67. "type" => "error",
  68. "message" => $error
  69. );
  70. };
  71. return $return_array;
  72. }


Bardzo proszę o pomoc...

Pozdrawiam,
Bartek
nospor
registerNewPackage() zwraca ci tablice z danymi ktorych potrzebujesz. Pisales ze znasz sie na proceduralnym to jaki problem ci obsluzyc dane z tablicy?
bartekxm
Funkcję wywołuję następująco:

  1. try{
  2. $dpd = new DpdApi();
  3. $dpd->setLang("pl_PL");
  4.  
  5. //webservice host (xml) - ask Your DPD consultant
  6. $dpd->setHost("https://dpdservicesdemo.dpd.com.pl/DPDPackageXmlServicesService/DPDPackageXmlServices?wsdl");
  7. $dpd->setFolder(__DIR__.'/files');
  8. $dpd->setLogin("test");
  9. $dpd->setPassword("KqvsoFLT2M");
  10. $dpd->setMasterfid(1495);
  11.  
  12. $dpd->setDepartment(1);
  13. $dpd->setConnection();
  14. $dpd->setShipFrom($shipFromDpd);
  15. $dpd->setShipTo($shipToDpd);
  16. $dpd->setPackageDetails($packageDetails);
  17.  
  18. print_r ($dpd->registerNewPackage());
  19.  
  20. var_dump($dpd->getLabelPDF(2, "WAYBILL"));
  21. var_dump($dpd->getProtocol(array('REFERENCE_NUMBER')));
  22.  
  23.  
  24. }catch (Exception $e){
  25. var_dump($e->getMessage());
  26. }


czyli po wywołaniu registerNewPackage() w kolejnych dwóch wywołaniach funkcji w polach zmiast WAYBILL oraz REFERENCE_NUMBER mam wpisać zmienne w funkcji resiterNewPackage ktore zapisane są w tablicy.
czyli zamiast WAYBILL mogę podać "$registerNewPackage[first_waybill]" a zamiast REFERENCE_NUMBER wpisać $registerNewPackage["reference"] ?
nospor
  1. $twojaTablica = $dpd->registerNewPackage();
  2. $dpd->getLabelPDF(2, $twojaTablica['array']['first_waybill'])

Analogicznie reszta. To sa podstawy tablic.
bartekxm
Dziękuję bardzo! O to chodziło - działa OK smile.gif
Temat można zamknąć.

Pozdrawiam
Bartek
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.