2016-06-21 5 views
0

Wir haben eine Integration mit Magento, die vollständig um die SoapClient aufgebaut ist. Zum Beispiel wird eine Sendung wie so erstellt:Übertragung der Sendungsnummer nach Bestell-ID in Magento über SOAP

$this->_client = @new SoapClient($this->getWsdl(), $context); 
     if ($this->_client) { 
      $this->_session = $this->_client->login($this->magentoUser, $this->magentoKey); 
      return $this; 
     } 

...

$result = $this->_client->salesOrderShipmentCreate(
      $this->_session, 
      $id 
     ); 
return $result; 

und Tracking wird in ähnlicher Weise hinzugefügt. Das Problem ist, wenn ich Update Tracking aus welchem ​​Grund auch immer brauche, brauche ich die shipment_increment_id. Von unserem System ziehe ich die order_id. Also muss ich Magento abfragen, um die shipment_increment_id von der order_id zu bekommen.

So, this seems to be exactly the solution I need, jedoch gibt es kein Mage Objekt in unserer Codebasis, kommunizieren wir vollständig über den SoapClient. Wenn ich durch die docs on the sales object schaue, sehe ich hier wirklich keine Lösung.

Wie kann ich die Versand-ID mithilfe der Bestell-ID über die SOAP-API von Magento erhalten?

+0

Für Menschen landen hier Comi Informationen zu den Google-Suchergebnissen finden Sie unter https://StackOverflow.com/questions/29286210. Dort finden Sie einen vollständigen SOAP-API-Ansatz. – user2094178

Antwort

1

Mit den Standardmethoden von SOAP können Sie die Sendungs-ID nicht mit der Auftrags-ID abrufen. Dafür musst du Mage/Sales/Model/Order/Shipment/Api.php überschreiben und die Methode wie unten erwähnt erweitern.

In app/code/local/Namespace/MODULE/etc/config.xml

<models> 
    <sales> 
     <rewrite> 
      <order_shipment_api>Namespace_Modulename_Model_Sales_Order_Shipment_Api</order_shipment_api> 
     </rewrite> 
    </sales> 
</models> 

nun ein Verfahren in app/code erstellen/local/Namespace/MODULE/Model/Vertrieb/Bestellung/Versand/api.php

class Namespace_Modulename_Model_Sales_Order_Shipment_Api extends Mage_Sales_Model_Order_Shipment_Api 
{ 
    /** 
    * Retrieve shipment information 
    * 
    * @param string $shipmentIncrementId 
    * @return array 
    */ 
    public function info($id, $attribute = null) 
    { 
     if(!empty($attribute)){ 
      $ids = Mage::getModel('sales/order_shipment')->getCollection() 
       ->addAttributeToFilter($attribute, $id) 
       ->getAllIds(); 
      if (!empty($ids)) { 
       reset($ids); 
       $shipment = Mage::getModel('sales/order_shipment')->load(current($ids)); 
      } 
     }else{ 
      $shipment = Mage::getModel('sales/order_shipment')->loadByIncrementId($id); 
     } 

     /* @var $shipment Mage_Sales_Model_Order_Shipment */ 
     if (!$shipment->getId()) { 
      $this->_fault('not_exists'); 
     } 

     $result = $this->_getAttributes($shipment, 'shipment'); 

     $result['items'] = array(); 
     foreach ($shipment->getAllItems() as $item) { 
      $result['items'][] = $this->_getAttributes($item, 'shipment_item'); 
     } 

     $result['tracks'] = array(); 
     foreach ($shipment->getAllTracks() as $track) { 
      $result['tracks'][] = $this->_getAttributes($track, 'shipment_track'); 
     } 

     $result['comments'] = array(); 
     foreach ($shipment->getCommentsCollection() as $comment) { 
      $result['comments'][] = $this->_getAttributes($comment, 'shipment_comment'); 
     } 

     return $result; 
    } 
} 

Jetzt können Sie diese Soap-Methode aufrufen Sendung Informationen zu erhalten (einschließlich Versand-ID)

$result = $this->_client->salesOrderShipmentInfo($sessionId, $orderId, 'order_id'); 
var_dump($result); 
+0

"In app/code/local/Namespace/Modulname/etc/config.xml" Könnten Sie das einfach etwas erweitern? Ich bin nur mit der Arbeit mit Magento vertraut, soweit es unsere Codebasis betrifft, die nur um den SoapClient herum aufgebaut ist. Wird in dieser Antwort davon ausgegangen, dass Magento irgendwo installiert ist? – ShaneOH

+0

Ja, das bedeutet, dass Magento irgendwo installiert ist und entweder Sie oder Ihr Magento-Administrator diese Anpassungen im Magento-Modul vornehmen müssen. In app/code/local/Namespace/Modulname/etc/config.xml ist die Hauptkonfigurationsdatei des Moduls "Namespace_Modulename" (ein beliebiger Name), ich kann Ihnen vollständigen Code dieser Datei geben, die Sie benötigen. –

+0

Vielen Dank - keine Notwendigkeit für den vollständigen Code, ich werde sehen, ob wir am Ende Magento für unsere Bedürfnisse installieren und anpassen möchten. Ihre Antwort war hilfreich, nochmals vielen Dank. – ShaneOH

Verwandte Themen