Ankündigung

Einklappen
Keine Ankündigung bisher.

SOAP - Assoziative Arrays - Request

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SOAP - Assoziative Arrays - Request

    Hi,
    nachdem ich nun nach mehreren Tagen keine Lösung zu meinem Problem finden konnte, dachte ich das mir hier im Forum jemand helfen kann.

    Zu meinem Problem:
    Ich bin arbeite zurzeit mit der DHL Paket API. Dort kann man über SOAP einen Request zur automatischen Paketbuchung erstellen und bekommt als Response ein Versandlabel.

    Da die Beispiele von DHL nicht sehr gut sind benutzte ich das inoffizielle SDK von Tobias Redmann.

    Soweit so gut, doch das SDK von Tobias Redmann unterstützte in dieser Form bisher nur normalen Paketversand.

    Auszug ab Zeile 94 dhl-php-sdk.php
    PHP-Code:

        $shipment 
    = array();
       
    // Version
        
    $shipment['Version']  = array('majorRelease' => '1''minorRelease' => '0');
        
        
        
    // Order
        
    $shipment['ShipmentOrder'] = array();
        
        
    $shipment['ShipmentOrder']['SequenceNumber']  = '1';
        
    // Shipment
        
    $s = array();
        
    $s['ProductCode']               = 'EPN';
        
    $s['ShipmentDate']              = date('Y-m-d');
        
    $s['EKP']                       = $this->credentials['ekp'];
        
        
    $s['Attendance']                = array();
        
    $s['Attendance']['partnerID']   = '01';
        
          
          
    $s['ShipmentItem']  = array();
          
    $s['ShipmentItem']['WeightInKG'] = '5';
          
    $s['ShipmentItem']['LengthInCM'] = '50';
          
    $s['ShipmentItem']['WidthInCM']  = '50';
          
    $s['ShipmentItem']['HeightInCM'] = '50';
          
    $s['ShipmentItem']['PackageType'] = 'PL';

    $shipment['ShipmentOrder']['Shipment']['ShipmentDetails'] = $s

    Nach längerer Nachforschung fand ich heraus wie man aus einem normalen Paket ein DHL Express Paket erstellte. Dazu muss der Product Code zu "EXP" und zwei Services hinzugefügt werden.Die Services kommen ebenfalls unter den Punkt von "ShipmentDetails".

    CodeBeispiel von mir:
    PHP-Code:
    $shipment = array();
       
    // Version
        
    $shipment['Version']  = array('majorRelease' => '1''minorRelease' => '0');
        
        
        
    // Order
        
    $shipment['ShipmentOrder'] = array();
        
        
    $shipment['ShipmentOrder']['SequenceNumber']  = '1';

    // Shipment
        
    $s = array();
        
    $s['ProductCode']               = 'EXP';
        
    $s['ShipmentDate']              = date('Y-m-d');
        
    $s['EKP']                       = $this->credentials['ekp'];
        
        
    $s['Attendance']                = array();
        
    $s['Attendance']['partnerID']   = '01';
            
          
    $s['ShipmentItem']  = array();
          
    $s['ShipmentItem']['WeightInKG'] = '5';
          
    $s['ShipmentItem']['LengthInCM'] = '50';
          
    $s['ShipmentItem']['WidthInCM']  = '50';
          
    $s['ShipmentItem']['HeightInCM'] = '50';
          
    $s['ShipmentItem']['PackageType'] = 'PL';
          
          
    $d['Service'] = array();
          
    $d['Service']['ServiceGroupDateTimeOption'] = array();
          
    $d['Service']['ServiceGroupDateTimeOption']['DeliveryEarly'] = 'true';   

          
    $e['Service'] = array();
          
    $e['Service']['ServiceGroupOther'] = array();
          
    $e['Service']['ServiceGroupOther']['InsuranceAmount'] = '2500';  
          
    $e['Service']['ServiceGroupOther']['InsuranceCurrency'] = 'EUR';     
        
        
    $shipment['ShipmentOrder']['Shipment']['ShipmentDetails'] = $s +$d+$e
    Das Problem ist nun das erste "Service" Array von dem zweiten überschrieben wird anstatt einzeln in unter "ShipmentDetails" eingehangen zu werden.

    An diesem Punkt weis ich leider nicht mehr weiter. Ich hoffe mir kann da jemand helfen.

    Gruß derJani


  • #2
    Weil Du mit denselben Indizes addierst.
    array_merge() sollte hier sinnvoller sein...

    Allerdings kannst Du $d und $e auch gleich als ein Array aufbauen...

    ...und sorry, hat nichts im Fortgeschritten-Bereich zu suchen, denke ich.
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Hi Danke für deine Antwort,
      sorry für die falsche Einordnung.

      Habe es mit array_merge bereits versucht, allerdings klappt das nicht so wirklich.

      PHP-Code:
      var_dump(array_merge($d,$e)); 
      Wenn ich in diesem Beispiel $d und $e zusammenführen will bekomme ich immer folgendes Ergebnis
      Code:
      array(1) {
        ["Service"]=>
        array(1) {
          ["ServiceGroupOther"]=>
          array(2) {
            ["InsuranceAmount"]=>
            string(4) "2500"
            ["InsuranceCurrency"]=>
            string(3) "EUR"
          }
        }
      Also geht das Merge irgendwie nicht richtig.
      Der SOAP Request welchen ich in SOAP UI zusammengebaut habe und auch funktioniert sieht für diese Stelle folgendermaßen aus:
      Code:
      <soapenv:Body>
             <de:CreateShipmentDDRequest>
                <cis:Version>
                   <cis:majorRelease>1</cis:majorRelease>
                   <cis:minorRelease>0</cis:minorRelease>
                </cis:Version>
                <ShipmentOrder>
                   <SequenceNumber>1</SequenceNumber>
                   <Shipment>
                      <ShipmentDetails>
                         <ProductCode>EXP</ProductCode>
                         <ShipmentDate>2014-12-30</ShipmentDate>
                         <cis:EKP>5000000000</cis:EKP>
                         <Attendance>
                            <cis:partnerID>01</cis:partnerID>
                         </Attendance>
                         <ShipmentItem>
                            <WeightInKG>10</WeightInKG>
                            <LengthInCM>50</LengthInCM>
                            <WidthInCM>30</WidthInCM>
                            <HeightInCM>15</HeightInCM>
                            <PackageType>PK</PackageType>
                         </ShipmentItem>
                         <Service>
                         		<ServiceGroupDateTimeOption>
                         	   		<DeliveryEarly>true</DeliveryEarly>
                         		</ServiceGroupDateTimeOption>
                         </Service>
                         <Service>
                         		<ServiceGroupOther>
                         			<HigherInsurance>
                         			<InsuranceAmount>2500</InsuranceAmount>
                         			<InsuranceCurrency>EUR</InsuranceCurrency>
                         			</HigherInsurance>
                         		</ServiceGroupOther>
                         </Service>
                      </ShipmentDetails>
      Wie gesagt entweder ich benutze die Array_merge Funktion falsch oder irgendwo anders habe ich einen Fehler gemacht.
      Gruß derJani

      Kommentar


      • #4
        PHP-Code:
        array_merge$d['Service'], $e['Service'] ) 
        sollte das liefern, was Du benötigst...

        ...obwohl, wenn Du pro Service ne ChildeNode hast, bringt Dir das zusammenfügen auch nix.
        Da solltest Du imho von Anfang an anders an die Sache rangehen, damit Du gleich ein Array hast, das Du entsprechend formatiert übergeben kannst.
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          Zitat von Arne Drews Beitrag anzeigen
          PHP-Code:
          array_merge$d['Service'], $e['Service'] ) 
          sollte das liefern, was Du benötigst...
          Danke für die Antwort, es funktioniert, allerdings wie du geschrieben hast bringt es nichts, da die Formatierung zerstört wird.

          ...obwohl, wenn Du pro Service ne ChildeNode hast, bringt Dir das zusammenfügen auch nix.
          Da solltest Du imho von Anfang an anders an die Sache rangehen, damit Du gleich ein Array hast, das Du entsprechend formatiert übergeben kannst.
          Wie meinst du das?

          Kommentar


          • #6
            er meint damit, dass du nicht mergen musst. bau ein array zusammen und keine 3.
            Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

            Kommentar


            • #7
              Kann sein, daß die Klammerung nicht passt, aber so in etwa könnte das Array aufgebaut sein, damit's passt:
              PHP-Code:
              $aShipment = array(
                  
              'Version' => array(
                      
              'majorRelease' => 1,
                      
              'minorRelease' => 0
                  
              ),
                  
              'ShipmentOrder' => array(
                      
              'SequenceNumber' => 1,
                      
              'Shipment' => array(
                          
              'ShipmentDetails' = array(
                              
              'ProductCode' => 'EXP',
                              
              'ShipmentDate' => date'Y-m-d' ),
                              
              'EKP' => $this->credentials['ekp'],
                              
              'Attendance' => array(
                                  
              'partnerID' => '01'
                              
              ),
                              
              'ShipmentItem' => array(
                                  
              'WeightInKG' => 5,
                                  
              'LengthInCM' => 50,
                                  
              'WidthInCM' => 50,
                                  
              'HeightInCM' => 50,
                                  
              'PackageType' => 'PL'
                              
              ),
                              
              'Service' => array(
                                  array(
                                      
              'ServiceGroupDateTimeOption' => array(
                                      
              'DeliveryEarly' => true
                                  
              ),
                                  array(
                                      
              'ServiceGroupOther' => array(
                                          
              'InsuranceAmount' => 2500,
                                          
              'InsuranceCurrency' => 'EUR'
                                      
              )
                                  )
                              )
                          )
                      )
                  )
              ); 
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Hi Danke für deine Antwort ich werde es mal versuchen.

                Gruß und ein gutes neues Jahr an alle.

                Kommentar


                • #9
                  Soweit sieht es sehr gut aus.
                  Danke für die Hilfe

                  Kommentar

                  Lädt...
                  X