Prestashop 网络服务:无法使用自定义价格创建购物车

时间:2021-02-09 18:02:10

标签: prestashop prestashop-1.6

通过网络服务以编程方式创建订单时,我无法修改订单价格。

1.- 我首先创建购物车:

<carts>
<cart>
    <id>102241</id>
    <id_currency>1</id_currency>
    <id_lang>4</id_lang>
    <associations>
        <cart_rows>
            <cart_row>
                <id_product>40</id_product>
                <id_product_attribute>0</id_product_attribute>
                <id_address_delivery>22265</id_address_delivery>
                <quantity>1</quantity>
            </cart_row>
            <cart_row>
                <id_product>41</id_product>
                <id_product_attribute>587</id_product_attribute>
                <id_address_delivery>22265</id_address_delivery>
                <quantity>3</quantity>
            </cart_row>
        </cart_rows>
    </associations>
    <id_address_delivery>22265</id_address_delivery>
    <id_address_invoice>22265</id_address_invoice>
    <id_customer>17440</id_customer>
    <id_carrier>150</id_carrier>
    <date_add>2021-02-07 11:27:42</date_add>
    <date_udp>2021-02-07 11:27:42</date_udp>
</cart>

2.- 然后,使用给定的购物车 ID,我正在创建订单

<orders>
<order>
    <id>39997</id>
    <id_address_delivery>22265</id_address_delivery>
    <id_address_invoice>22265</id_address_invoice>
    <id_cart>102241</id_cart>
    <id_currency>1</id_currency>
    <id_lang>4</id_lang>
    <id_customer>17440</id_customer>
    <id_carrier>150</id_carrier>
    <module>bankwire</module>
    <payment>Mercado Libre</payment>
    <total_paid>50000</total_paid>
    <total_paid_real>50000</total_paid_real>
    <total_products>50000</total_products>
    <total_products_wt>50000</total_products_wt>
    <conversion_rate>1</conversion_rate>
    <associations>
        <order_rows>
            <order_row>
                <product_id>40</product_id>
                <product_attribute_id>0</product_attribute_id>
                <product_quantity>1</product_quantity>
                <product_price>30000</product_price>
                <unit_price_tax_incl>30000</unit_price_tax_incl>
                <unit_price_tax_excl>30000</unit_price_tax_excl>
            </order_row>
            <order_row>
                <product_id>41</product_id>
                <product_attribute_id>587</product_attribute_id>
                <product_quantity>2</product_quantity>
                <product_price>10000</product_price>
                <unit_price_tax_incl>10000</unit_price_tax_incl>
                <unit_price_tax_excl>10000</unit_price_tax_excl>
            </order_row>
        </order_rows>
    </associations>
    <valid>1</valid>
    <current_state>2</current_state>
    <total_discounts>0</total_discounts>
    <total_discounts_tax_incl>0</total_discounts_tax_incl>
    <total_discounts_tax_excl>0</total_discounts_tax_excl>
    <total_paid_tax_incl>50000</total_paid_tax_incl>
    <total_paid_tax_excl>50000</total_paid_tax_excl>
    <total_shipping>0</total_shipping>
    <total_shipping_tax_incl>0</total_shipping_tax_incl>
    <total_shipping_tax_excl>0</total_shipping_tax_excl>
</order>

但是,在创建时,它返回商店的价格(productID 40 为 24990,varID 0)和(productID 41 为 24990,varID 587),而不是我在 XML 中定义的价格。之后我也尝试发送 PUT request 来更改它们,但没有成功。

可以在后台 UI 中更改订单产品的价格。如何通过网络服务执行此操作?

1 个答案:

答案 0 :(得分:0)

您在 Prestashop 网络服务中可以做什么或不能做什么是在对象类变量 $webserviceParameters 中定义的。

检查您的 Order.php $webserviceParameters。您可以在 associations 中看到:

'product_price' => array('setter' => false)

'getter' 用于获取变量,'setter' 用于更新变量。

'setter' => false 表示您无法更改它。

覆盖

但是您可以添加一个 Order.php 覆盖:您需要覆盖一个包含 __construct() 的函数 $this->webserviceParameters = ...

并通过在那里添加一个函数来更改 webservice 参数,即。 e.

'setter' => 'setOrderRowProductPrice'

然后你需要写一个函数:

function setOrderRowProductPrice($product_price) {
    // $product_price is a variable from XML
    // $this->product_price is a variable from the database
    // Your code (i. e. add changes to the database)
    return $product_price;
}