Magento 2:使用REST API创建订单

时间:2018-01-12 15:50:40

标签: rest api magento magento2 magento2.2

我正在使用带有令牌身份验证的REST API将数据从M1导出到M2.2.0安装的全新安装。

一切都适用于客户和产品,但我无法理解如何在不创建购物车的情况下创建订单。

我的意思是,我已经拥有订单中所有需要的数据,之前不需要创建购物车,正如我找到的所有解决方案(也在官方的magento guide中)所建议的那样。

我在上面提到的指南中执行了相同的步骤,但是尝试发布有关订单的数据,我一直收到错误:

"Fatal Error: 'Uncaught Error: Call to a member function getMethodInstance() on null in \/var\/www\/html\/app\/code\/Magento\/Payment\/Observer\/SalesOrderBeforeSaveObserver.php:24\nStack trace:\n#0 \/var\/www\/html\/lib\/internal\/Magento\/Framework\/Event\/Invoker\/InvokerDefault.php(72): Magento\\Payment\\Observer\\SalesOrderBeforeSaveObserver->execute(Object(Magento\\Framework\\Event\\Observer))\n#1 \/var\/www\/html\/lib\/internal\/Magento\/Framework\/Event\/Invoker\/InvokerDefault.php(60): Magento\\Framework\\Event\\Invoker\\InvokerDefault->_callObserverMethod(Object(Magento\\Payment\\Observer\\SalesOrderBeforeSaveObserver), Object(Magento\\Framework\\Event\\Observer))\n#2 \/var\/www\/html\/lib\/internal\/Magento\/Framework\/Event\/Manager.php(66): Magento\\Framework\\Event\\Invoker\\InvokerDefault->dispatch(Array, Object(Magento\\Framework\\Event\\Observer))\n#3 \/var\/www\/html\/generated\/code\/Magento\/Framework\/Event\/Manager\/Proxy.php(95): Magento\\Framework\\Event\\Manager->dispatch('sales_order_sav...', Array)\n#4 \/var\/www\/html\/lib\/internal\/Magento\/Framework\/Model\/AbstractModel.php(694):' in '\/var\/www\/html\/app\/code\/Magento\/Payment\/Observer\/SalesOrderBeforeSaveObserver.php' on line 24"

这是我用来尝试的样本JSON:

{
    "entity": {
        "customer_email": "provacustomer@mail.com",
        "customer_firstname": "mario",
        "customer_lastname": "rossi",
        "base_grand_total": 120,
        "discount_amount": 0,
        "grand_total": 120,
        "increment_id": "200001414155",
        "shipping_amount": 7,
        "status": "processing",
        "store_id": 1,
        "subtotal": 100,
        "tax_amount": 20,
        "items": {
            "description": "prodotto mio",
            "item_id": 3,
            "price": 10,
            "product_id": 3,
            "product_type": "simple",
            "qty_ordered": 2,
            "sku": "002",
            "tax_amount": 2,
            "weight": 1
        }
    },
    "billing_address": {
        "firstname": "giuseppa",
        "lastname": "rossi",
        "company": "mycompany",
        "city": "rome",
        "region": "california",
        "region_id": 12,
        "postcode": "12312",
        "telephone": "1234556677",
        "country_id": "US",
        "street": ["via prima", "via seconda"]
    },
    "payment": {
        "amount_paid": 120,
        "method": "checkmo"
    },
    "status_histories": [{
        "comment": "new order",
        "status": "processing"
    }],
    "extension_attributes": {
        "shipping_assignments": [{
            "shipping": {
                "address": [{
                    "firstname": "franca",
                    "lastname": "vardididi",
                    "company": "mycompany",
                    "city": "rome",
                    "region": "california",
                    "region_id": 12,
                    "postcode": "12312",
                    "telephone": "1234556677",
                    "country_id": "US",
                    "street": ["via prima", "via seconda"]
                }],
                "method": "checkmo",
                "total": {
                    "base_shipping_amount": 7
                }
            },
            "items": [{
                "description": "prodotto mio",
                "item_id": 3,
                "price": 10,
                "product_id": 3,
                "product_type": "simple",
                "qty_ordered": 2,
                "sku": "002",
                "tax_amount": 2,
                "weight": 1
            }]
        }]
    }
}

修改

使用此question中的json我设法创建订单。

1 个答案:

答案 0 :(得分:2)

我在编辑问题时提到了一个解决方案。我会在这里发布,以防链接被破坏。

'{
  "entity": {
    "base_currency_code": "EUR",
    "base_discount_amount": 0,
    "base_grand_total": 38,
    "base_shipping_amount": 5,
    "base_shipping_incl_tax": 5,
    "base_shipping_tax_amount": 0,
    "base_shipping_discount_amount": 0,
    "base_subtotal": 33,
    "base_subtotal_incl_tax": 33,
    "base_total_due": 0,
    "base_total_paid" : 38,
    "base_to_global_rate": 1,
    "base_to_order_rate": 1,
    "discount_tax_compensation_amount": 0,
    "base_discount_tax_compensation_amount": 0,
    "shipping_discount_tax_compensation_amount": 0,
    "customer_is_guest": 0,
    "customer_email": "nicola@gmail.com",
    "customer_firstname": "Nicola",
    "customer_group_id": 1,
    "customer_id": 4,
    "customer_lastname": "Neri",
    "customer_note_notify": 1,
    "discount_amount": 0,
    "email_sent": 1,
    "global_currency_code": "EUR",
    "grand_total": 38,
    "order_currency_code": "EUR",
    "shipping_amount": 5,
    "shipping_tax_amount": 0,
    "shipping_description": "Flat Rate - Fixed",
    "shipping_discount_amount": 0,
    "shipping_incl_tax": 5,
    "state": "pending",
    "status": "processing",
    "store_currency_code": "EUR",
    "store_to_base_rate": 0,
    "store_to_order_rate": 0,
    "store_id": 1,
    "subtotal": 33,
    "subtotal_incl_tax": 33,
    "total_due": 0,
    "total_paid" : 38,
    "total_item_count": 1,
    "total_qty_ordered": 1,
    "tax_amount": 0,
    "weight": 1,
    "items": [{
      "base_original_price": 33,
      "base_price": 33,
      "base_price_incl_tax": 33,
      "base_row_total": 33,
      "base_row_total_incl_tax": 33,
      "name": "il prodotto",
      "original_price": 33,
      "price": 33,
      "price_incl_tax": 33,
      "product_id": 11,
      "product_type": "simple",
      "qty_ordered": 1,
      "row_total": 33,
      "row_total_incl_tax": 33,
      "sku": "002",
      "store_id": 1,
      "weight": 1
    }],
    "billing_address": {
      "address_type": "billing",
      "city": "Urbino",
      "company": "",
      "country_id": "IT",
      "customer_address_id": 4,
      "email": "francoverdi@mail.com",
      "firstname": "franco",
      "lastname": "Ciani",
      "postcode": "61029",
      "region": "ca",
      "street": ["via milano 21"],
      "telephone": "071982939"
    },
    "payment": {
      "amount_ordered": 38,
      "amount_paid":38,
      "base_amount_ordered": 38,
      "base_amount_paid" : 38,
      "base_shipping_amount": 5,
      "method": "checkmo",
      "shipping_amount": 5
    },
    "status_histories": [{
      "comment" : "new order",
      "status": "processing"
    }],
    "extension_attributes": {
      "shipping_assignments": [{
        "shipping": {
          "address": {
            "address_type": "shipping",
            "city": "Urbino",
            "company": "mycompany",
            "country_id": "IT",
            "customer_address_id": 4,
            "email": "mariorossi@gmail.com",
            "firstname": "mario",
            "lastname": "Rossi",
            "postcode": "12345",
            "region": "CA",
            "street": ["via roma 823"],
            "telephone": "3469730878"
          },
          "method": "flatrate_flatrate",
          "total": {
            "base_shipping_amount": 5,
            "base_shipping_incl_tax": 5,
            "shipping_amount": 5,
            "shipping_incl_tax": 5
          },
          "extension_attributes": []
        },
        "items": [{
          "base_original_price": 33,
          "base_price": 33,
          "base_price_incl_tax": 33,
          "base_row_total": 33,
          "name": "un belllissimo prodotto",
          "original_price": 33,
          "price": 33,
          "price_incl_tax": 33,
          "product_id": 11,
          "product_type": "simple",
          "qty_ordered": 1,
          "row_total": 33,
          "row_total_incl_tax": 33,
          "sku": "002",
          "store_id": 1,
          "weight": 1
        }],
        "extension_attributes": []
      }],
      "applied_taxes": [],
      "item_applied_taxes": [],
      "converting_from_quote": false
    }
  }
}'