嗯,调试是灵丹妙药。事实证明扩展更容易一些carts
资源比我想象的要多。
首先,不需要制造任何额外的资源。我们唯一需要的就是列出我们需要的字段并设置它们的 getter。我的扩展Cart
class:
class Cart extends CartCore
{
protected $webserviceParameters = [
'fields' => [
'id_address_delivery' => ['xlink_resource' => 'addresses'],
'id_address_invoice' => ['xlink_resource' => 'addresses'],
'id_currency' => ['xlink_resource' => 'currencies'],
'id_customer' => ['xlink_resource' => 'customers'],
'id_guest' => ['xlink_resource' => 'guests'],
'id_lang' => ['xlink_resource' => 'languages'],
],
'associations' => [
'cart_rows' => [
'resource' => 'cart_row',
'virtual_entity' => true,
'fields' => [
'id_product' => ['required' => true, 'xlink_resource' => 'products'],
'id_product_attribute' => ['required' => true, 'xlink_resource' => 'combinations'],
'id_address_delivery' => ['required' => true, 'xlink_resource' => 'addresses'],
'quantity' => ['required' => true],
],
],
'cart_summary' => [
'resource' => 'cart_summary_row',
'virtual_entity' => true,
'setter' => false,
'fields' => [
'id' => '',
'is_virtual_cart' => '',
'total_discounts' => '',
'total_discounts_tax_exc' => '',
'total_wrapping' => '',
'total_wrapping_tax_exc' => '',
'total_shipping' => '',
'total_shipping_tax_exc' => '',
'total_products_wt' => '',
'total_products' => '',
'total_price' => '',
'total_tax' => '',
'total_price_without_tax' => '',
'is_multi_address_delivery' => '',
'free_ship' => '',
],
],
],
];
/**
* @return array
*/
public function getWsCartSummary()
{
$result = $this->getSummaryDetails(null, true);
unset($result['carrier']);
unset($result['delivery']);
unset($result['invoice']);
$result['id'] = $this->id;
return ['cart_summary' => $result];
}
}
WebserviceOutputBuilder
不太适合处理对象,需要制作更复杂的字段列表和获取器。我只需要标量值。所以我已经取消设置了carrier
, delivey
and invoice
对象。
Prestashop 搜索 gettergetWsCartSummary()
对于字段cart_summary
默认情况下。如果你有any_other
场,这将是getWsAnyOther()
.
我得到的结果:
<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<carts>
<cart>
<id><![CDATA[108]]></id>
<id_address_delivery xlink:href="http://prestashop.lo/api/addresses/5"><![CDATA[5]]></id_address_delivery>
<id_address_invoice xlink:href="http://prestashop.lo/api/addresses/5"><![CDATA[5]]></id_address_invoice>
<id_currency xlink:href="http://prestashop.lo/api/currencies/1"><![CDATA[1]]></id_currency>
<id_customer xlink:href="http://prestashop.lo/api/customers/2"><![CDATA[2]]></id_customer>
<id_guest xlink:href="http://prestashop.lo/api/guests/25"><![CDATA[25]]></id_guest>
<id_lang xlink:href="http://prestashop.lo/api/languages/1"><![CDATA[1]]></id_lang>
<id_shop_group><![CDATA[1]]></id_shop_group>
<id_shop><![CDATA[1]]></id_shop>
<id_carrier><![CDATA[5]]></id_carrier>
<recyclable><![CDATA[0]]></recyclable>
<gift><![CDATA[0]]></gift>
<gift_message></gift_message>
<mobile_theme><![CDATA[0]]></mobile_theme>
<delivery_option></delivery_option>
<secure_key><![CDATA[18fcd352cc7355102674d9056705f43c]]></secure_key>
<allow_seperated_package><![CDATA[0]]></allow_seperated_package>
<date_add><![CDATA[2016-06-24 09:34:42]]></date_add>
<date_upd><![CDATA[2016-06-27 03:23:18]]></date_upd>
<associations>
<cart_rows nodeType="cart_row" virtualEntity="true">
<cart_row>
<id_product xlink:href="http://prestashop.lo/api/products/5"><![CDATA[5]]></id_product>
<id_product_attribute xlink:href="http://prestashop.lo/api/combinations/19"><![CDATA[19]]></id_product_attribute>
<id_address_delivery xlink:href="http://prestashop.lo/api/addresses/5"><![CDATA[5]]></id_address_delivery>
<quantity><![CDATA[1]]></quantity>
</cart_row>
<cart_row>
<id_product xlink:href="http://prestashop.lo/api/products/6"><![CDATA[6]]></id_product>
<id_product_attribute xlink:href="http://prestashop.lo/api/combinations/31"><![CDATA[31]]></id_product_attribute>
<id_address_delivery xlink:href="http://prestashop.lo/api/addresses/5"><![CDATA[5]]></id_address_delivery>
<quantity><![CDATA[1]]></quantity>
</cart_row>
<cart_row>
<id_product xlink:href="http://prestashop.lo/api/products/11"><![CDATA[11]]></id_product>
<id_product_attribute xlink:href="http://prestashop.lo/api/combinations/0"><![CDATA[0]]></id_product_attribute>
<id_address_delivery xlink:href="http://prestashop.lo/api/addresses/5"><![CDATA[5]]></id_address_delivery>
<quantity><![CDATA[1]]></quantity>
</cart_row>
</cart_rows>
<cart_summary nodeType="cart_summary_row" virtualEntity="true">
<cart_summary_row>
<id><![CDATA[108]]></id>
<is_virtual_cart></is_virtual_cart>
<total_discounts></total_discounts>
<total_discounts_tax_exc></total_discounts_tax_exc>
<total_wrapping></total_wrapping>
<total_wrapping_tax_exc></total_wrapping_tax_exc>
<total_shipping></total_shipping>
<total_shipping_tax_exc></total_shipping_tax_exc>
<total_products_wt><![CDATA[67.06]]></total_products_wt>
<total_products><![CDATA[64.48]]></total_products>
<total_price><![CDATA[67.06]]></total_price>
<total_tax><![CDATA[2.58]]></total_tax>
<total_price_without_tax><![CDATA[64.48]]></total_price_without_tax>
<is_multi_address_delivery></is_multi_address_delivery>
<free_ship><![CDATA[1]]></free_ship>
</cart_summary_row>
</cart_summary>
</associations>
</cart>
</carts>
</prestashop>