【发布时间】:2014-09-12 02:28:58
【问题描述】:
我花了很多天时间与 REST API 购物车更新功能作斗争。这就像地狱一样难,但几乎没有用。我不能只用一个变量解决一个问题。 更新所有选项时如何输入物品数量?
我知道这只是几个代码符号,但现在不知道该怎么做。
请帮帮我!
下面是我的函数:
<?php
session_start();
define('DEBUG', true);
define('PS_SHOP_PATH', 'http://mypresta-shop.com/');
define('PS_WS_AUTH_KEY', 'GAN3F82KAA71GZRHJF9QYED7UBTFUVF6');
require_once('/home/t/katja89/shop/public_html/PSWebServiceLibrary.php');
$webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG);
function aCart($T_id, $id_customer, $id_address, $T_action){ //aCart(17, 3, 5, 'edit');
global $webService;
if ($T_action == 'edit') { // cart update, item is added, but the quantity does not update
$opt = array('resource' => 'carts');
$opt['id'] = $T_id; // 17
$xml = $webService->get($opt);
$resources = $xml->children()->children()->children();
unset($xml->children()->children()->associations->cart_rows->cart_row);
foreach ($_SESSION["products"] as $cart_itm) {
// I take the couple $cart_itm["code"] and $cart_itm["qty"], but cannot change 'quantity' of items added from the session :(
$xml->children()->children()->associations->cart_rows->addChild('cart_row')->addChild('id_product', $cart_itm["code"]);
//$xml->children()->children()->associations->cart_rows->addChild('cart_row')->addChild('quantity', $cart_itm["qty"]);
//$xml->children()->children()->associations->cart_rows->cart_row->quantity = $cart_itm["qty"];
}
$opt = array('resource' => 'carts');
$opt['putXml'] = $xml->asXML();
$opt['id'] = $T_id; // 17
$xml = $webService->edit($opt);
} else if ($T_action == 'add') { // adding a new cart works
$Tovar = "";
foreach ($_SESSION["products"] as $cart_itm)
{
$Tovar .= "<cart_row>";
$Tovar .= "<id_product>".$cart_itm["code"]."</id_product>";
$Tovar .= "<id_product_attribute>0</id_product_attribute>";
$Tovar .= "<quantity>".$cart_itm["qty"]."</quantity>";
$Tovar .= "</cart_row>";
}
$Tovar .= "";
//$id_address = "5";
//$id_customer = "3";
$psXML = <<<XML
<prestashop>
<cart>
<id/>
<id_address_delivery>{$id_address}</id_address_delivery>
<id_address_invoice>{$id_address}</id_address_invoice>
<id_currency>1</id_currency>
<id_customer>{$id_customer}</id_customer>
<id_guest>0</id_guest>
<id_lang>1</id_lang>
<id_carrier>0</id_carrier>
<recyclable>0</recyclable>
<gift>0</gift>
<gift_message/>
<associations>
<cart_rows>
{$Tovar}
</cart_rows>
</associations>
</cart>
</prestashop>
XML;
$xml = new SimpleXMLElement($psXML);
$opt = array( 'resource' => 'carts' );
$opt['postXml'] = $xml->asXML();
$xml = $webService->add( $opt );
}
}
我没有得到特别的错误。 在我的会话中,我持有产品 ID(购物车商品代码 - $cart_itm["code"])和数量(购物车商品数量 $cart_itm["qty"])。当用户更改这些变量时,我需要更改购物车内容。为此,我称 aCart(17, 3, 5, 'edit');功能。如果我添加新购物车 aCart(17, 3, 5, 'add'); 效果很好但我无法编辑 cart_rows。在 cart_row 数量中 $cart_itm["qty"] 与 id_product 作为 $cart_itm["code"] 连接。我无法将特定商品的 $cart_itm["qty"] 插入到 cart_row 中。
在代码中,在 foreach 行下,您会看到我尝试过的两个选项(灰色),但都不起作用。我需要更新购物车中每件商品的数量。
$xml->children()->children()->associations->cart_rows->addChild('cart_row')->addChild('id_product', $cart_itm["code"]);
效果很好,它添加了带有商品 ID 的 cart_row。但它显示数量为 0。我不知道如何让它显示 id_product ($cart_itm["code"]) 的实际数量 ($cart_itm["qty"])。
【问题讨论】:
-
如果您添加更多信息将对我们有很大帮助,例如:您的确切问题是什么?你想让我做什么?你得到什么错误?等等……
-
@HristoValkanov 非常感谢您的回答,我用新信息编辑了顶帖
标签: php api rest prestashop