it-swarm.com.de

Aktualisieren Sie die Metadaten der Werbebuchung - WooCommerce API

ich habe versucht, die Metafelder für Werbebuchungen zu aktualisieren, die ich an jede Werbebuchung angehängt habe. Von einem Anruf zu einer bestimmten Bestellung sehen Sie die unten angehängte Meta-Position:

"line_items":[  
      {  
         "id":243,
         "name":"Example Product",
         "product_id":194,
         "variation_id":0,
         "quantity":2,
         "tax_class":"",
         "subtotal":"84.00",
         "subtotal_tax":"0.00",
         "total":"84.00",
         "total_tax":"0.00",
         "taxes":[  ],
         "meta_data":[  
            {  
               "id":2197,
               "key":"_tracking_number",
               "value":""
            },
            {  
               "id":2198,
               "key":"_estimate_delivery_date",
               "value":""
            },
            {  
               "id":2199,
               "key":"_carrier",
               "value":""
            },
            {  
               "id":2200,
               "key":"_service",
               "value":""
            },
         ]

Die Idee ist, dass unser Distributor jede Bestellung programmgesteuert abruft und dann das Meta aktualisiert, wodurch eine Versandbestätigungs-E-Mail ausgelöst wird.

Mein Problem ist, wenn ich versuche, das Meta selbst zu aktualisieren (testen), und zwar mit der unten angegebenen Locke:

--data '{"status":"completed","line_items":{"0":{"meta_data":{"_tracking_number":"being tracked"}}}}'

Ich erhalte die Fehlermeldung:

"Invalid parameter(s): line_items","data":{"status":400,"params":{"line_items":"line_items[0][meta_data] is not of type array."}}

Dies ist verwirrend, da line_items sicherlich ein Array ist! Ich habe auch versucht, die spezifische Werbebuchungs-ID zu verwenden, aber basierend auf der ID der Rückgabestruktur-Werbebuchung und den Metadaten handelt es sich bei beiden Schlüsseln der obersten Ebene in einem Werbebuchungsobjekt.

Ich greife nur zum Testen auf line_items[0] zu, da ich nur eine Werbebuchung habe und der Wert für line_item ein Array ist, wie Sie oben sehen können.

line_items[0][meta_data] scheint ebenfalls ein Array AFAIK zu sein. Irgendeine Anleitung, was ich falsch mache?

Ich hatte auch den Gedanken, dass ok, vielleicht die Werbebuchungen in der Route selbst a la zugegriffen werden:

/wp-json/wc/v2/orders/2594/line_items

aber viele Iterationen davon (auch als Parameter) haben auch nicht funktioniert.

EDIT: also musste ich aus irgendeinem Grund die mit der Werbebuchung verknüpfte product_id hinzufügen ... Die folgende cURL-Funktion (HTTP 200) hat funktioniert, aber das Feld nicht wirklich aktualisiert. Ich benutze Version 2 der API.

--data '{"status":"completed","line_items":{"0":{"product_id":"194","meta_data":{"3":{"_carrier":"carrier"}}}}}'

Irgendeine Idee, warum dies nicht aktualisiert wird?

1
HectorOfTroy407

Aus irgendeinem Grund müssen Sie die Arrays verdoppeln. Möglicherweise hat dies keine Auswirkungen auf Sie, da Sie auf das erste Element verweisen. Ich benutze dies in PHP:

function saveMetaItem($id_order,$id_item,$id_product,$meta_key,$meta_value){
    $woo = new wooclient();
    $data = array(
        'line_items' => array(array(
                       'id' => $id_item,
                       'product_id' => $id_product,
                       'meta_data' => array(array(
                            'key' => $meta_key,
                            'value' => $meta_value
                               ))
                       ))
    );
    $result = $woo->put('orders/'.$id_order, $data);
    return $result;
}

Beachten Sie die double array () -Aufrufe sowohl in line_items als auch in meta_data. Geben Sie außerdem sowohl id als auch product_id an. Konvertiere das in JSON und fertig ;-)

1
Hokascha