Fehler bei Konstruktion von Objekt

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

  • Fehler bei Konstruktion von Objekt

    Hallo,

    ich habe ein Problem bei der Konstruktion eines Amazon_FWSOutbound_Model_CreateFulfillmentOrder Objektes und sehe den Fehler nicht. Die Daten für das Objekt kommen von einem Webservice Client:

    PHP-Code:
    http://localhost/Amazon/mockWebService.php?Action=CreateFulfillmentOrder&MerchantFulfillmentOrderId=2&DisplayableOrderId=2&
    DisplayableOrderDateTime=2010-10-27T16:16:15+02:00&DisplayableOrderComment=Danke_fuer_Ihre_Bestellung&ShippingSpeedCategory=Standard&
    DestinationAddress.Name=Berthold_Heisterkamp&DestinationAddress.Line1=Sesamstrasse_33&DestinationAddress.Line2=&DestinationAddress.Line3=&
    DestinationAddress.City=Koeln&DestinationAddress.StateOrProvinceCode=Nordrhein-Westfalen&DestinationAddress.CountryCode=DE&
    DestinationAddress.PostalCode=50441&DestinationAddress.PhoneNumber=02227-555&Item.1.MerchantSKU=26&Item.1.MerchantFulfillmentOrderItemId=2&
    Item.1.Quantity=2&Item.1.GiftMessage=&Item.1.DisplayableComment=&Item.2.MerchantSKU=25&Item.2.MerchantFulfillmentOrderItemId=3&
    Item.2.Quantity=1&Item.2.GiftMessage=&Item.2.DisplayableComment
    Der Server kann daraus jedoch nicht das gewünschte Objekt erstellen. $data ist hierbei der eingelesene String des Clients:

    PHP-Code:
    case 'CreateFulfillmentOrder':
            
    //OrderItem buildup
            
    $orderItems   = array();
            
    $arrayKeys       array_keys($data);
            
    $arrayKeySize count($arrayKeys);

            for (
    $i=0$i<$arrayKeySize$i++){
                
    $v         $arrayKeys[$i];
                
    $number $i+1;

                if(
    containsSubstring($v'Item.')){
                    require_once (
    'Amazon/FWSOutbound/Model/CreateFulfillmentOrderItem.php');
                    
    $CreateFulfillmentOrderItem = new Amazon_FWSOutbound_Model_CreateFulfillmentOrderItem();
                    
    $CreateFulfillmentOrderItem->setMerchantSKU($data['Item' '.'  $number '.' 'MerchantSKU']);
                    
    $CreateFulfillmentOrderItem->setMerchantFulfillmentOrderItemId($data['Item' '.'  $number '.' 'MerchantFulfillmentOrderItemId']);
                    
    $CreateFulfillmentOrderItem->setQuantity($data['Item' '.'  $number '.' 'Quantity']);
                    
    $CreateFulfillmentOrderItem->setGiftMessage($data['Item' '.'  $number '.' 'MerchantFulfillmentOrderItemId']);
                    
    $CreateFulfillmentOrderItem->setDisplayableComment($data['Item' '.'  $number '.' 'Quantity']);
                    
    $orderItems[$i] = $CreateFulfillmentOrderItem;
                }
            }

            
    //CreateFulfillmentOrder request
            
    require_once ('Amazon/FWSOutbound/Model/CreateFulfillmentOrder.php');
            
    $requestOrder = new Amazon_FWSOutbound_Model_CreateFulfillmentOrder();
            
    $requestOrder->setMerchantFulfillmentOrderId($data['MerchantFulfillmentOrderId']);
            
    $requestOrder->setDisplayableOrderId($data['DisplayableOrderId']);
            
    $requestOrder->setDisplayableOrderDateTime($data['DisplayableOrderDateTime']);
            
    $requestOrder->setDisplayableOrderComment($data['DisplayableOrderComment']);
            
    $requestOrder->setShippingSpeedCategory($data['ShippingSpeedCategory']);

            
    //Address buildup
            
    for ($i=0$i<$arrayKeySize$i++){
                
    $v $arrayKeys[$i];

                if(
    containsSubstring($v'DestinationAddress.')){

                    require_once (
    'Amazon/FWSOutbound/Model/Address.php');
                    
    $Address = new Amazon_FWSOutbound_Model_Address();
                    
    $Address->setName($data['DestinationAddress' '.' 'Name']);
                    
    $Address->setLine1($data['DestinationAddress' '.' 'Line1']);
                    
    $Address->setLine2($data['DestinationAddress' '.' 'Line2']);
                    
    $Address->setCity($data['DestinationAddress' '.' 'City']);
                    
    $Address->setStateOrProvinceCode($data['DestinationAddress' '.' 'StateOrProvinceCode']);
                    
    $Address->setCountryCode($data['DestinationAddress' '.' 'CountryCode']);
                    
    $Address->setPostalCode($data['DestinationAddress' '.' 'PostalCode']);
                    
    $Address->setPhoneNumber($data['DestinationAddress' '.' 'PhoneNumber']);
                    
    $requestOrder->setDestinationAddress($Address);

                }
            }

            
    $requestOrder->setItem($orderItems);

            require_once (
    'Amazon/FWSOutbound/Model/CreateFulfillmentOrder.php');
            
    $request = new Amazon_FWSOutbound_Model_CreateFulfillmentOrder($requestOrder);

            
    $ret $serv->CreateFulfillmentOrder($request);
            break; 
    PHP-Code:
    function containsSubstring($initialString$subString){
        if(!
    is_string($initialString)){
            return 
    false;
        }
        if(
    strpos($initialString$subString) !== false){
            return 
    true;
        }
        return 
    false;

    Der Fehler wird in am Ende bei $request = ... geworfen. Ich vermute das Problem besteht in der for Schleife und der Auswertung des Strings ($data). Vielleicht sieht jemand von Euch wo der Fehler ist.

    Danke schon mal im voraus.

  • #2
    error_reporting ist ON?

    Zitat von herrentor Beitrag anzeigen
    $arrayKeys = array_keys($data);
    Was soll das bewirken? $data ist doch ein String mit der o.g. URL, oder nicht?

    Zitat von herrentor Beitrag anzeigen
    Der Fehler wird in am Ende bei $request = ... geworfen.
    Und was für einer? Was steht in $requestOrder drin?

    Ohne die inkludierten Dateien kann man schlecht helfen..!?

    cya

    Kommentar


    • #3
      Hier die Zeilen zum Einlesen des Strings:

      PHP-Code:
      $data NULL;
      if (
      $_SERVER['REQUEST_METHOD'] == 'GET') {
          
      $data $_GET;
      } else if (
      $tmp file_get_contents('php://input')) {
          
      $data json_decode($tmp);

      Und hier ist der Konstruktor des zu erstellenden Objektes Amazon_FWSOutbound_Model_CreateFulfillmentOrder:

      PHP-Code:
      public function __construct($data null)
          {
              
      $this->_fields = array (
              
      'MerchantFulfillmentOrderId' => array('FieldValue' => null'FieldType' => 'string'),
              
      'DisplayableOrderId' => array('FieldValue' => null'FieldType' => 'string'),
              
      'DisplayableOrderDateTime' => array('FieldValue' => null'FieldType' => 'string'),
              
      'DisplayableOrderComment' => array('FieldValue' => null'FieldType' => 'string'),
              
      'ShippingSpeedCategory' => array('FieldValue' => null'FieldType' => 'string'),
              
      'DestinationAddress' => array('FieldValue' => null'FieldType' => 'Amazon_FWSOutbound_Model_Address'),
              
      'Item' => array('FieldValue' => array(), 'FieldType' => array('Amazon_FWSOutbound_Model_CreateFulfillmentOrderItem')),
              );
              
      parent::__construct($data);
          } 
      Das array_keys($data) mach ich, da ich herausfinden muss, wieviele Daten übergeben werden, denn ich weiß bspw. nicht ob nur ein Item.1.MerchantSKU ... oder noch ein zweites Item.2.MerchantSKU übergeben wird.

      Kommentar


      • #4
        Wooha, soviel Code?! Diese vielen Zeilen mit $object->setFoo(... Foo) würde ich in Foreach-Schleifen packen.

        Dann noch
        PHP-Code:
        function containsSubstring($haystack$needle){
            return (
        is_string($haystack) && strpos($haystack$needle) !== false);

        ... schon haben wir nur noch 10 Zeilen Code.

        Kommentar

        Lädt...
        X