PSWebServiceLibrary-Webservice-添加产品简单(无组合)存在库存问题

时间:2020-02-19 17:22:29

标签: php web-services prestashop

我使用PSWebServiceLibrary与Prestashop进行“对话”。 如果我用以下简单代码添加产品:

xmlResponse = $webService->get(['url' => PS_SHOP_PATH."/api/products?schema=blank"]);
$fieldsXML = $xmlResponse->product[0];
$fieldsXML->state = "1";
$fieldsXML->name = "test";
$fieldsXML->price = "10.00"; 
try {
    $addResponse = $webService->add([ 'resource' => "products", 'postXml' => $xmlResponse->asXML() ]);
    $fieldsXML = $addResponse->product[0];
    echo 'Enjoy-> Your product Id is: '.$fieldsXML->id;
} 
catch (PrestaShopWebserviceException $e) { 
    echo "No good -> ".$e->getMessage(); 
}

我的目录->产品中有新产品...,但目录->库存中没有新产品。 当我转到目录->股票时,控制台显示如下错误: TypeError:无法读取null的属性“ split”(stock.bundle.js?1.7.6.3:7)

我已经看到PS在Dbase中创建了与新产品相关联的表product_attribute中的一行(而不是像product_attributeproduct_attribute_combination,{ {1}},等等)

如果我(通过phpMyAdmin删除),则一切正常,该产品将在库存中可见

如果我通过仪表板创建产品,则一切正常,如果我检查表product_attribute_image,则该产品不正确

我搜索了许多解决方案,例如在插入中更改属性值,第二次更改它们……什么都没有。

PrestaShop版本:1.7.6.3:7 PHP版本:7.0

1 个答案:

答案 0 :(得分:0)

我已经解决了...,我认为这是Prestashop或PSWebServiceLibrary的错误 使用我的原始代码,我得到了产品空白shema的所有属性

$xmlResponse = $webService->get(['url' => PS_SHOP_PATH."/api/products?schema=blank"]);
$fieldsXML = $xmlResponse->product[0];

我只编辑一些属性

$fieldsXML->state = "1";
$fieldsXML->name = "test";
$fieldsXML->price = "10.00"; 
$fieldsXML->advanced_stock_management=true;
$fieldsXML->low_stock_alert=false;
$fieldsXML->minimal_quantity = "1"; 
$fieldsXML->available_for_order = true;
$fieldsXML->active = true; 

我将新的xml(已编辑的属性和收到的其他属性)发送到Prestashop。

$webService->add([ 'resource' => "products", 'postXml' => $xmlResponse->asXML() ]);

问题出在我从get([...])得到的结果中; $ fieldsXML内的标签的格式类似(例如),而不是 因此,当我编辑属性时,格式将是“正确的”(1),其余的将保持不变...这在插入产品时会出现问题,因为Prestashop似乎没有“完全接受”它。

要解决此问题,我必须将每个属性编辑为空,然后再编辑所需的属性。 这是我的工作代码:

$xmlResponse = $webService->get(['url' => PS_SHOP_PATH."/api/products?schema=blank"]);
$fieldsXML = $xmlResponse->product[0];
foreach ($fieldsXML as $nodeKey => $node){
    $fieldsXML->$nodeKey = "";
}
$fieldsXML->state = "1";
$fieldsXML->name = "test";
$fieldsXML->price = "10.00"; 
$fieldsXML->advanced_stock_management=true;
$fieldsXML->low_stock_alert=false;
$fieldsXML->minimal_quantity = "1"; 
$fieldsXML->available_for_order = true;
$fieldsXML->active = true; 
try {
    $addResponse = $webService->add([ 'resource' => "products", 'postXml' => $xmlResponse->asXML() ]);
    $fieldsXML = $addResponse->product[0];
    echo 'Enjoy-> Your product Id is: '.$fieldsXML->id;
} 
catch (PrestaShopWebserviceException $e) { 
    echo "No good -> ".$e->getMessage(); 
}

我希望我已经解释清楚,并且对每个人都有帮助...因为网上没有太多信息。