Magento SOAP无法创建订单

时间:2012-06-12 12:19:24

标签: api magento soap

问题

我在使用Magento SOAP api创建订单时遇到问题。我已经有了所有必需品(下面的代码片段),但每当我尝试创建订单时,它都会失败,状态代码为1008(参见Magento Docs)。

虽然没有错误信息,所以我只知道订单创建失败。

$cart_id                 = $magi->execute("cart.create");
$customerEntity          = $magi->execute("customer.info",5);
$customerEntity["mode"] = "customer";

$customerAddressEntity         = $magi->execute("customer_address.info",$customerEntity["default_billing"]);
$customerAddressEntity["mode"] = "billing";

$magi->execute("cart_customer.set", array($cart_id,$customerEntity));
$magi->execute("cart_customer.addresses", array($cart_id,array($customerAddressEntity)));

$productEntity = array("product_id" => 48,"qty" => 1);

$magi->execute("cart_product.add",array($cart_id,array($productEntity)));
$magi->execute("cart_payment.method",array($cart_id,array("method" => "banktransfer")));

$orderId = $magi->execute("cart.order", array($cart_id));

在magento日志中,此操作后将记录以下消息。


未定义的偏移量:0 / var / www / cloud2u.nl / mccloud_n / app / code / core / Mage / Checkout / Model / Cart / Payment / Api.php

未定义的变量:websiteId / var / www / cloud2u.nl / mccloud_n / app / code / core / Mage / Catalog / Model / Resource / Product / Collection.php。
(此条目在此之后重复3次,每次间隔半秒)。


我在这里不知所措,几周前它处于工作状态,从那以后没有太大变化。

更多信息

$ magi 变量包含一个对象,它是使用Magento Soap api的抽象。它还捕获并记录所有错误,因此在此代码中没有try / catch块。

  • Magento版本:1.7.0.0
  • Php版本5.4.6
  • 服务器操作系统:Ubuntu 11.10(开发服务器)

3 个答案:

答案 0 :(得分:1)

我认为你的$ productEntity是错误的。

$productEntity = array(
     array("product_id" => 48,"qty" => 1);
);

它使购物车为空。

^^

答案 1 :(得分:1)

  

未定义的偏移量:   0 /无功/网络/ cloud2u.nl / mccloud_n /应用程序/代码/核心/法师/结帐/型号/购物车/付款/ Api.php

错误意味着有一个数组没有 ['0']

的值

答案 2 :(得分:1)

第一个错误:

  

未定义的偏移量:0 / var / www / cloud2u.nl / mccloud_n / app / code / core / Mage / Checkout / Model / Cart / Payment / Api.php

是由于Api.php中有关此方法的错误:

protected function _preparePaymentData($data)
{
    if (!(is_array($data) && is_null($data[0]))) {
        return array();
    }

    return $data;
}

我能够摆脱这个问题取代

if (!(is_array($data) && is_null($data[0])))

if (!(is_array($data) && !isset($data[0])))

在测试期间,它以相同的方式工作并消除错误。