Your IP : 216.73.216.189


Current Path : /var/www/magento.test.indacotrentino.com/www/scripts/import/include/
Upload File :
Current File : /var/www/magento.test.indacotrentino.com/www/scripts/import/include/RestConnect.php

<?php
/*
* OAuth 1.0a client (Example) for Magento 2
*
* @see: https://oauth.net/core/1.0a
* @see: https://tools.ietf.org/html/rfc5849
*/
class Api
{
    const OAUTH_VERSION = '1.0';

    const OAUTH_SIGNATURE = 'HMAC-SHA256';

    private $consumerKey;

    private $consumerSecret;

    private $accessToken;

    private $accessTokenSecret;

    private $host;

    private $token;

    public function setMagento($instance) {
        switch($instance) {
            case 'MAGENTO-TEST':
                $this->host                 = 'https://magento.test.indacotrentino.com/';
                $this->consumerKey 		    = '610dee75s27oe0jlx7dx8cyr5k275861';
                $this->consumerSecret 		= 'aw0nis1v3kst9gxlozdewmf8pnotscxf';
                $this->accessToken 		    = '0kufmoncdszyzs13bkvyrkjxlgu593bj';
                $this->accessTokenSecret 	= 'jvdbnuw6w4cfbv4o18cg44p400ap4ad6';
                break;
            case 'MAGENTO-SHIPPYPRO':
                $this->host                 = 'https://magento.test.indacotrentino.com/';
                $this->consumerKey 		    = 'maoz16zpthqi0keg8zp6slx44jsg92za';
                $this->consumerSecret 		= 'vsmsh2paew1o77xqrtfo6tbob39x07x0';
                $this->accessToken 		    = '97qhoyyozpx76jlogxuwue1g88vlerij';
                $this->accessTokenSecret 	= '21jeykih2hh4l3vqm5zqyfm3bey6616w';
                break;
            case 'INDACO-38121':
                $this->host                 = 'http://indaco.38121.it/';
                $this->consumerKey 		    = 'yh9nspb82lqo1h2buqi6l90hqltzwchb';
                $this->consumerSecret 		= 'i1j57ms6b418b5z4d8q6uq3unyc4s0nn';
                $this->accessToken 		    = 't0nj8c2n71y6gmsb8t5mzwc9i70ly2y5';
                $this->accessTokenSecret 	= 'u66odr3bnc5gr93bxv9rjg7ptx35psuc';
                break;
            case 'INDACO2-38121':
                $this->host                 = 'https://indaco2.38121.it/';
                $this->consumerKey 		    = 'qiz7m6tkxl92lpgk624aecbbr648t8i9';
                $this->consumerSecret 		= '1l4431yo7qo54fyeuis8cu35inqdpp84';
                $this->accessToken 		    = 'irfnvon6ku6vyn6a7efcf5mdf8j06g6c';
                $this->accessTokenSecret 	= 'ra6ctr07sk5vud2x43qpkcrng0rhtmpq';
/*                $this->consumerKey 		    = '6fxozvw17jwgfeyqt48yjih4di3ssn0q';
                $this->consumerSecret 		= 'xpcpn35eyi137089gfoliknjfl27qyp3';
                $this->accessToken 		    = '1s535lnh4zp9ujjhna5v2vewofuo10p6';
                $this->accessTokenSecret 	= 'm5ab6997ciuhe9dfk6shls5ygr7dveqe';
  */              break;
            case 'INDACO4-38121':
                $this->host                 = 'https://indaco4.38121.it/';
                $this->consumerKey 		    = 'enqqh6nemwmloa8zcauli7t1updudoiu';
                $this->consumerSecret 		= 'd5nq8imhunv5s0jgkivwpvz03btg4zol';
                $this->accessToken 		    = 'f3jwzuzuqk6hu2u3blwh2ezm183if8l2';
                $this->accessTokenSecret 	= 'bjun4wdhvl90dvfvn099ar6xc0o4wdrd';
                break;
            case 'INDACOTRENTINO.COM':
                $this->host                 = 'https://www.indacotrentino.com/';
                $this->consumerKey 		    = '610dee75s27oe0jlx7dx8cyr5k275861';
                $this->consumerSecret 		= 'aw0nis1v3kst9gxlozdewmf8pnotscxf';
                $this->accessToken 		    = '0kufmoncdszyzs13bkvyrkjxlgu593bj';
                $this->accessTokenSecret 	= 'jvdbnuw6w4cfbv4o18cg44p400ap4ad6';
                break;
            case 'INDACO2-SIWEGO':
                $this->host                 = 'https://indaco2.38121.it/';
                $this->consumerKey 		    = 't36pwnj3yg8uzqur9avax2ijdgbhpu9l';
                $this->consumerSecret 		= '4y1dk6qr29glg85hjy80qpxygz9u7rk0';
                $this->accessToken 		    = 'ugaauldg8h4t20we57rhblvscwmimvf7';
                $this->accessTokenSecret 	= 'p2zezt8w5698o9qp2e6d54y89v1rnafv';
                break;
            case 'MAGENTOTEST-SIWEGO':
                $this->host                 = 'https://magento.test.indacotrentino.com/';
                $this->consumerKey 		    = 'rdhdt309a4g4vkdlcvhog3hwnrsc3njb';
                $this->consumerSecret 		= 'vs0yk5hyine69dja2w2u8ihsc9u0ht4d';
                $this->accessToken 		    = 'mx7n9r7i64a2hbd6hg0zswn5p1ye40ry';
                $this->accessTokenSecret 	= 'qxbijil90sewmcy42zvl3bb9vpz7ej74';
                break;
        }
    }

    /*
    * Generate a unique nonce
    *
    * @return string unique string
    */
    private function getNonce(): string
    {
        return bin2hex(random_bytes(32));
    }

    /*
    * Create a oauth_signature
    *
    * @param string $verb HTTP Method/Verb
    * @param string $endpoint Complete url including scheme, host, path, params
    * @param array $params Parameters prefixed with oauth_
    * @return string oauth_signature value
    */
    private function sign(string $verb, string $endpoint, array $params): string
    {
        ksort($params);// @see Zend_Oauth_Signature_SignatureAbstract::_toByteValueOrderedQueryString() for more accurate sorting, including array params

        // define params that will be used either in Authorization header, or as url query params, excluding 'oauth_signature'
        $strParams = http_build_query($params, '', '&', PHP_QUERY_RFC3986);
 //       $strParams = str_replace('%20',' ',$strParams);
//var_dump($strParams);
        $baseString = sprintf('%s&%s&%s',
            strtoupper($verb),// HTTP method (POST/GET/PUT/...)
            rawurlencode($endpoint),// base resource url - without port & query params & anchors, @see how Zend extracts it in Zend_Oauth_Signature_SignatureAbstract::normaliseBaseSignatureUrl()
            rawurlencode($strParams)
        );

        $encodedParams = array();
        foreach ($params as $key => $value) {
            $encodedParams[] = rawurlencode($key) . '=' . rawurlencode($value);
        }
        // Unisci i parametri codificati in una stringa
        $paramString = implode('&', $encodedParams);
        // Codifica l'URL in percentuale e in minuscolo
        $encodedUrl = rawurlencode($endpoint);
        // Unisci il metodo, l'URL codificato e i parametri codificati in una stringa
        $signatureBaseString = strtoupper($verb) . '&' . $encodedUrl . '&' . rawurlencode($paramString);
//echo "\n\nPRIMA:\n\n";
//var_dump($baseString);
//        echo "\n\nDOPO:\n\n";
//        var_dump($signatureBaseString);
//        echo "\n\n";

        $key = rawurlencode($this->consumerSecret).'&'.rawurlencode($this->accessTokenSecret);
        return base64_encode(hash_hmac('SHA256', $signatureBaseString, $key, true));
    }

    /*
    * Generate Oauth token including signature
    *
    * @param string $verb HTTP Method/Verb
    * @param string $endpoint Complete url including scheme, host, path, params
    * @param array  $criteria Search Criteria
    */
    private function generateToken(string $verb, string $endpoint, array $criteria): string
    {
        $params = array_merge([
            'oauth_consumer_key'        => $this->consumerKey,
            'oauth_token'               => $this->accessToken,
            'oauth_timestamp'           => time(),
            'oauth_nonce'               => $this->getNonce(),
            'oauth_version'             => self::OAUTH_VERSION,
            'oauth_signature_method'    => self::OAUTH_SIGNATURE
        ],$criteria);

        $params['oauth_signature'] = $this->sign($verb, $endpoint, $params);

        $encodedParams = array();
        foreach ($params as $key => $value) {
            $encodedParams[] = rawurlencode($key) . '=' . rawurlencode($value);
        }
        $encodedParams['oauth_signature'] = $this->sign($verb, $endpoint, $params);

        return implode(',', array_map(
            function ($v, $k) { return sprintf('%s="%s"', $k, $v); }, // php ^7.4 fn($v, $k) => sprintf("%s='%s'", $k, $v) SICK!!!
            $params,
            array_keys($params)
        ));
    }

    /*
    * Send HTTP Request to Magento 2 REST API
    *
    * @param string $verb HTTP Method/Verb
    * @param string $endpoint Complete url including scheme, host, path, params
    * @param array $criteria Search criteria
    * @param string $token Token oauth_token
    * @return null|string Json response
    */
    private function client(string $verb, string $endpoint, array $criteria=null, string $token): ?string
    {
        $ch = curl_init();
        curl_setopt_array($ch, [
            CURLOPT_URL => $endpoint.($criteria ? '?'.http_build_query($criteria) : ''),
            CURLOPT_CUSTOMREQUEST => $verb,
            CURLOPT_HTTPHEADER => [
                'Authorization: OAuth ' . $token,
                'Content-Type: application/json'
            ],
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYPEER => false, // WARNING: Don't use this in production!
            CURLOPT_SSL_VERIFYHOST => false, // WARNING: Don't use this in production!
            CURLOPT_VERBOSE => false // Set true for Debugging
        ]);

//        var_dump($endpoint.($criteria ? '?'.http_build_query($criteria) : ''));
        //  CURLOPT_POST => 1,
        //  CURLOPT_POSTFIELDS => $criteria,
        //curl_setopt($ch, CURLOPT_POST, 1);
        //curl_setopt($ch, CURLOPT_POSTFIELDS,
        //            "postvar1=value1&postvar2=value2&postvar3=value3");

        $err = curl_error($ch);
        $response = curl_exec($ch);
        curl_close($ch);

        return $response;
    }


    /*
    * Send API Request
    *
    * @param string $verb HTTP Method/Verb
    * @param string $rest Rest path and params
    * @param array $criteria Search criteria
    * @return null|object|array response
    */
    public function request(string $verb, string $rest, array $criteria=[])
    {
        $endpoint = $this->host . $rest;
        $token = $this->generateToken($verb, $endpoint, $criteria);
//echo "TOKEN:". $token."\n\n";
        try {
            $response =  $this->client($verb, $endpoint, $criteria, $token);
            if (!$response) {
                die("\n\nERROR: Failed to get reponse!\n\n");
            }
            //echo "VERB:$verb, ENDP:$endpoint, crit:".var_dump($criteria).", TOKEN:$token\n\n";
        } catch(\Exception $e) {
            echo "\nERROR:\n";
            error_log($e->getMessage());
        }
        return json_decode($response);
    }

    public function getModules() {
        return $this->request('GET', '/rest/V1/modules');
    }

    public function getAttributeSets() {
        $criteria = [
            'searchCriteria' => 0
        ];
        return $this->request('GET', '/rest/V1/products/attribute-sets/sets/list/', $criteria);
    }

    public function getAttributeSetById($id) {
        $criteria = [
            'searchCriteria[filter_groups][0][filters][0][field]' => 'attribute_set_id',
            'searchCriteria[filter_groups][0][filters][0][value]' => $id,
            'searchCriteria[filter_groups][0][filters][0][condition_type]' => 'eq'
        ];
        return $this->request('GET', '/rest/V1/products/attribute-sets/sets/list/', $criteria);
    }

    public function getAttributeSetByName($name) {
        $criteria = [
            'searchCriteria[filter_groups][0][filters][0][field]' => 'attribute_set_name',
            'searchCriteria[filter_groups][0][filters][0][value]' => $name,
            'searchCriteria[filter_groups][0][filters][0][condition_type]' => 'eq'
        ];
        return $this->request('GET', '/rest/V1/products/attribute-sets/sets/list/', $criteria);
    }

    public function getAttributeSetGroupsById($id) {
        $criteria = [
            'searchCriteria[filter_groups][0][filters][0][field]' => 'attribute_set_id',
            'searchCriteria[filter_groups][0][filters][0][value]' => $id,
            'searchCriteria[filter_groups][0][filters][0][condition_type]' => 'eq'
        ];
        return $this->request('GET', '/rest/default/V1/products/attribute-sets/groups/list/', $criteria);
    }

    public function getProductAttribute($code) {
        $criteria = [
            'searchCriteria[filter_groups][0][filters][0][field]' => 'attribute_code',
            'searchCriteria[filter_groups][0][filters][0][value]' => $code,
            'searchCriteria[filter_groups][0][filters][0][condition_type]' => 'eq'
        ];
        return $this->request('GET', '/rest/default/V1/products/attributes/', $criteria);
    }

    public function getProducts($pageSize, $page) {
        $criteria = [
            'searchCriteria[page_size]' => $pageSize,
            'searchCriteria[current_page]' => $page
        ];
        return $this->request('GET', '/rest/default/V1/products', $criteria);
    }

    public function getSimpleProductBySku($sku, $criteria = null, $forceAllCriteria = false) {
        if (!$criteria) {
            $criteria = [
                'fields' => 'sku,price,name'
            ];
        }
        if ($forceAllCriteria) {
            $criteria = [];
        }
        return $this->request('GET', '/rest/default/V1/products/'.$sku, $criteria);
    }

    public function getOrder($id) {
        // OR $api->request('GET', '/rest/V1/orders/1');
        $criteria = [
            'searchCriteria[filter_groups][0][filters][0][field]' => 'entity_id',
            'searchCriteria[filter_groups][0][filters][0][value]' => $id,
            'searchCriteria[filter_groups][0][filters][0][condition_type]' => 'eq'
        ];
        return $this->request('GET', '/rest/V1/orders', $criteria);
    }

    public function getTEST() {
        $criteria = [
            'searchCriteria[filterGroups][0][filters][0][field]' => 'attribute_set_name',
            'searchCriteria[filterGroups][0][filters][0][value]' => 'vino',
            'searchCriteria[filterGroups][0][filters][0][conditionType]' => 'eq'
        ];

        return $this->request('GET', '/rest/V1/products/attribute-sets/sets/list', $criteria);
    }

    public function sendData($rest, $attribute) {
        return $this->request('POST', $rest, $attribute);
    }

    public function sendPutData($rest, $attribute) {
        return $this->request('PUT', $rest, $attribute);
    }

    public function getCategory($id) {
        $criteria = [
            'searchCriteria[filterGroups][0][filters][0][field]' => 'id',
            'searchCriteria[filterGroups][0][filters][0][value]' => '3',
            'searchCriteria[filterGroups][0][filters][0][conditionType]' => 'eq'
        ];

        return $this->request('GET', '/rest/default/V1/categories/3');
    }

    public function createAttributeSet( $nameSetAttribute, $sort=10) {
        $criteria = [
            'attributeSet[attribute_set_name]' => rawurlencode($nameSetAttribute),
            'attributeSet[sort_order]' => $sort,
            'attributeSet[entity_type_id]' => '4',
            'skeletonId' => '4'
        ];
        $this->sendData('rest/V1/products/attribute-sets',$criteria);
    }

    public function createAttributeSetGroup($nameGroup, $attributeSetId, $sort=19) {
        $criteria = [
//        'group[attribute_group_id]' => 'INDACO',
            'group[attribute_group_name]' => $nameGroup,
            'group[attribute_set_id]' => $attributeSetId,
//        'group[extension_attributes][attribute_group_code]' => 'INDACO',
        'group[extension_attributes][sort_order]' => $sort,
        ];
        $this->sendData('rest/V1/products/attribute-sets/groups',$criteria);
    }

    public function createProduct() {
/*        $criteria = '
        {"product":{"sku":"ISTNDOC1-01-35f3475c-a276-4cd7-8747-21c9d7cc3dd9","name":"Trento DOC 1907","price":18.5,"type_id":"simple","attribute_set_id":"9","weight":1800,"visibility":4,"mediaGalleryEntries":[{"mediaType":"image","label":"Product image ISTNDOC1-01-35f3475c-a276-4cd7-8747-21c9d7cc3dd9 - Wed Mar 01 2023 14:25:10 GMT+0100 (Central European Standard Time)","position":1,"disabled":false,"file":"pms/6324400367125c8ba87e9d8b-trentodoc-brut.jpg","types":["image","thumbnail","small_image"],"content":{"base64EncodedData":"","type":"image/jpeg","name":"6324400367125c8ba87e9d8b-trentodoc-brut.jpg"}},{"mediaType":"image","label":"Product image ISTNDOC1-01-35f3475c-a276-4cd7-8747-21c9d7cc3dd9 - Wed Mar 01 2023 14:25:10 GMT+0100 (Central European Standard Time)","position":1,"disabled":false,"file":"pms/6324400367125c8ba87e9d8b-trentodoc-brut-bot.jpg","types":[],"content":{"base64EncodedData":"","type":"image/jpeg","name":"6324400367125c8ba87e9d8b-trentodoc-brut-bot.jpg"}}],"extension_attributes":{"stock_item":{"qty":1000,"is_in_stock":true,"is_qty_decimal":true,"use_config_backorders":false,"backorders":1},"category_links":[{"position":0,"category_id":"3"},{"position":1,"category_id":"59"},{"position":2,"category_id":"86"},{"position":3,"category_id":"80"},{"position":4,"category_id":"45"},{"position":5,"category_id":"65"},{"position":6,"category_id":"88"},{"position":7,"category_id":"84"},{"position":8,"category_id":"48"}]},"custom_attributes":[{"attribute_code":"special_price","value":18.5},{"attribute_code":"tax_class_id","value":"2"},{"attribute_code":"description","value":"Il territorio\\nTrentodoc Brut proviene dalle uve chardonnay che maturano nella zona alta delle colline di Isera, da cui si domina la Vallagarina e dove i vignaioli coltivano la pergola semplice trentina e guyot. Il terreno ghiaioso, calcareo, franco sabbioso, con una buona capacità drenante, conferisce al vino un caratteristico aroma minerale.\\n\\nLa lavorazione\\nGli agricoltori effettuano la raccolta delluva nella prima decade di settembre, con il supporto dei membri della famiglia e degli amici per i quali la vendemmia è un rito irrinunciabile. La vinificazione in bianco prevede la decantazione statica del mosto e una fermentazione a temperatura controllata. Segue laffinamento in botti dacciaio prima della maturazione sui lieviti per più di 30 mesi.\\n\\nGli abbinamenti\\nTrentodoc Brut può essere gustato come aperitivo in compagnia degli amici, accompagnato al formaggio Grana del Trentino, ma è perfettamente in grado di sostenere con grande piacevolezza lintero pasto."},{"attribute_code":"short_description","value":"Il Trentodoc Brut Cantina dIsera 1907 è prodotto dalle più pregiate uve Chardonnay coltivate sulle colline di Isera. E un Trentodoc immediato, che lascia ampio spazio di interazione tra gusto, olfatto e territorio. La godibilità di questo Trentodoc è assicurata dalla ricerca dellequilibrio tra i profumi minerali e di frutta candita mescolati alla crosta di pane supportati da una bolla fine, lieve, continua."},{"attribute_code":"indacoall_partner","value":"Vendi24"},{"attribute_code":"indacoall_brand","value":"Cantina dIsera"},{"attribute_code":"indacoall_seller","value":"inTrentino"},{"attribute_code":"indacoall_refrigerated","value":"0"},{"attribute_code":"indacoall_refrigerated","value":"0"},{"attribute_code":"indacoall_packagingfragile","value":"0"},{"attribute_code":"indacoall_packagingbottle","value":"0"},{"attribute_code":"indacoall_titlerelatedproducts","value":"Ti potrebbero interessare prodotti dello stesso marchio"},{"attribute_code":"indaco_general_productionarea","value":null},{"attribute_code":"indaco_general_isforadult","value":0},{"attribute_code":"indaco_general_targetaudience","value":null},{"attribute_code":"indaco_general_targetgender","value":null},{"attribute_code":"indaco_general_targetage","value":null},{"attribute_code":"indaco_general_numberofitems","value":null},{"attribute_code":"indaco_general_stylename","value":null},{"attribute_code":"indaco_general_itemlenght","value":null},{"attribute_code":"indaco_general_itemwidth","value":null},{"attribute_code":"indaco_general_itemheight","value":null},{"attribute_code":"indaco_general_itemweight","value":null},{"attribute_code":"indaco_general_liquidvolume","value":null},{"attribute_code":"indaco_general_occasion","value":null},{"attribute_code":"indaco_general_instructions","value":null},{"attribute_code":"indaco_general_safety","value":null},{"attribute_code":"indaco_generalfood_biological","value":0},{"attribute_code":"indaco_generalfood_biodynamic","value":0},{"attribute_code":"indaco_generalfood_vegan","value":0},{"attribute_code":"indaco_generalfood_glutenfree","value":0},{"attribute_code":"indaco_generalfood_allergen","value":null},{"attribute_code":"indaco_generalfood_ingredients","value":null},{"attribute_code":"indaco_generalfood_hasquantity","value":null},{"attribute_code":"indaco_generalfood_hasnetquantity","value":null},{"attribute_code":"indaco_generalfood_expirationtype","value":null},{"attribute_code":"indaco_generalfood_shelflife","value":null},{"attribute_code":"indaco_generalfood_nutritionalvalue","value":null},{"attribute_code":"indaco_generalfood_storageinstructions","value":null},{"attribute_code":"indaco_generalfood_controlcompany","value":null},{"attribute_code":"indaco_generalfood_manufactoringplant","value":null},{"attribute_code":"indaco_generalfood_packaging","value":null},{"attribute_code":"indaco_wine_withoutsulphites","value":0},{"attribute_code":"indaco_wine_winetype","value":null},{"attribute_code":"indaco_wine_year","value":null},{"attribute_code":"indaco_wine_alcoholicvolume","value":null},{"attribute_code":"indaco_wine_bottleformat","value":null},{"attribute_code":"indaco_wine_color","value":null},{"attribute_code":"indaco_wine_scent","value":null},{"attribute_code":"indaco_wine_tastewine","value":null},{"attribute_code":"indaco_wine_dosage","value":null},{"attribute_code":"indaco_wine_methodproduction","value":null},{"attribute_code":"indaco_wine_body","value":null},{"attribute_code":"indaco_wine_bottleclosure","value":null},{"attribute_code":"indaco_wine_containertype","value":null},{"attribute_code":"indaco_wine_servicetemperature","value":null},{"attribute_code":"indaco_wine_vineyards","value":null},{"attribute_code":"indaco_wine_recommendedcombinations","value":null},{"attribute_code":"indaco_wine_awardsacknowledgments","value":null},{"attribute_code":"indaco_wine_winemaking","value":null},{"attribute_code":"indaco_wine_refinement","value":null},{"attribute_code":"indaco_wine_agingcontainer","value":null},{"attribute_code":"indaco_wine_additives","value":null},{"attribute_code":"indaco_wine_storageinstructions","value":null}],"product_links":[{"sku":"ISTNDOC1-01-35f3475c-a276-4cd7-8747-21c9d7cc3dd9","link_type":"related","linked_product_sku":"ISMARZ01-01-ba59e811-cfcb-45c4-80b5-211ad00e5a7d"},{"sku":"ISTNDOC1-01-35f3475c-a276-4cd7-8747-21c9d7cc3dd9","link_type":"related","linked_product_sku":"4A01020039-01-2f80a03c-0f63-478e-a4c4-95278e378d36"}]}}
        ';
*/
        $criteria = [
            'product[sku]' => 'ISTNDOC1-01-35f3475c-a276-4cd7-8747-21c9d7cc3dd9',
          'product[price]' => '321',
            'product[custom_attributes][0][attribute_code]' => 'indacoall_partner',
            'product[custom_attributes][0][value]' => 'Vendi'
        ];

        return $this->sendPutData('rest/all/V1/products/ISTNDOC1-01-35f3475c-a276-4cd7-8747-21c9d7cc3dd9',$criteria);

    }

    public function testSiWeGO($sessionId, $state, $pickupCode = null, $chatEndpoint=null) {
        $criteria = [
            'sessionId' => $sessionId,
            'state' => $state
        ];
        if ($pickupCode) {
            $criteria = array_merge($criteria, [ 'pickupCode' => $pickupCode ]);
        }
        if ($chatEndpoint) {
            $criteria = array_merge($criteria, [ 'chatEndpoint' => $chatEndpoint ]);
        }
        return $this->sendPutData('/rest/V1/siwego/setState', $criteria);
    }

    public function shipment() {
        /*
         * {"entity":{"order_id":103,"items":[{"order_item_id":235,"qty":6}]}}

        $criteria = [
            'entity' => [
                'order_id' => '103',
                'items' => [
                    'order_item_id' => '235',
                    'qty' => '6'
                ]
            ]
        ];

          "arguments": {
    "extension_attributes": {
      "source_code": "ne_wh"
    }
  }
        */
        $criteria = [
            'entity[order_id]' => '103',
            'entity[store_id]' => 1,
            'entity[items][0][order_item_id]' => '235',
            'entity[items][0][qty]' => '3',
            'entity[extension_attributes][source_code]' => 'WH-default'
        ];
        return $this->sendData('/rest/V1/shipment', $criteria);
    }

}