Shopware: извлечение данных заказа на подписанном событии - PullRequest
0 голосов
/ 03 октября 2019

Мне нужно SKU и имя заказанного товара при подписанном событии,

Подписанное событие:

public static function getSubscribedEvents()
    {
        return [
            'Shopware_Modules_Order_SaveOrder_ProcessDetails' => 'getAccountController'

        ];

    }

Мне нужно извлечь данные о заказанном товаре. Эти продукты обновляются на внешних источниках. Я закончил тестирование API со статическим параметром. Мне нужен динамический параметр из магазина, т. Е. SKU продукта и заказанный QTY этого продукта (продукт может быть в одном или нескольких по порядку).

 /**
     * @return string
     */
    public function getAccountController(Enlight_Event_EventArgs $args)
    {
        $basketContent = $args-> getDetails ();
        $order = $args-> getSubject ();
        $orderNumber = $order->sOrderNumber;

 //       var_dump ($basketContent);
   //     exit;

        $token = "mytoken";

        // Organization which Manage warehouse and other things
        $orgNo = "1";

        // An SKU or Number must same as both site e-commerce and korona

        $productNumber = "demo.product";

        $qty = 10; // QTY you want to update Minus (-) indicate 

        // Create an API Object 
        $APIObject = new APIHelper();
        $response = $APIObject->StockAdjustment($token,$orgNo,$productNumber,$qty);        
        //Enter Response in table for log purpose
        //$response=mysql_real_escape_string(stripcslashes($response));
        $sql = "INSERT INTO `s_plugin_Sa_log` (`id`, `response_desc`) VALUES (NULL, '$response')";            
        Shopware()->Db()->query($sql);
        return ;        
    }

Полный код

<?php
namespace SwagAPI\Subscribers;
use SwagAPI\APIAPI;
use Enlight\Event\SubscriberInterface;

class APISubscriber extends APIHelper implements SubscriberInterface
{
    /**
     * Subscribe an event when API code will be execute
     */
    public static function getSubscribedEvents()
    {
        return [
            'Shopware_Modules_Order_SaveOrder_ProcessDetails' => 'getAccountController'

        ];

    }


    /**
     * @return string
     */
    public function getAccountController()
    {

        //Static Token 
        $token = "MY Token";

        // Organization which Manage warehouse and other things
        $orgNo = "1";

        $this->session = Shopware()->Session();
        $ZT_Core_Product =  $this->session['sOrderVariables']['sBasketProportional']['content'];
        $APIProductsArray = array();
        // A SKU or Number must same as both site ecommerce and API
        //productnumber => qty
        foreach ($ZT_Core_Product as $key => $value) {
            $ProductSKU  = $value['ordernumber'];
            $APIProductsArray[$ProductSKU ] = -1 * abs($value['quantity']);           
        }

        // Create an API Object 
        $APIObject = new APIHelper();
        $response = $APIObject->StockAdjustment($token,$orgNo,$APIProductsArray);        

        //Enter Response in table for log purpose        
        $sql = "INSERT INTO `s_plugin_SwagAPI_log` (`id`, `response_desc`) VALUES (NULL, '$response')";            
        Shopware()->Db()->query($sql);
        return ;        
    }


}

1 Ответ

0 голосов
/ 03 октября 2019

Данные о товарах заказа передаются в массиве details. Вы можете собрать необходимые данные, например, циклически перебирая массив:

public function getAccountController(Enlight_Event_EventArgs $args)
{
    $basketContent = $args->get('details');

    foreach ($basketContent as $article) {
        $quantity = $article['quantity'];
        $sku = $article['ordernumber'];
        $name = $article['articlename'];
        ...
    }
    ...
}
...