cancel
Showing results for 
Search instead for 
Did you mean: 

Update Shipping Address - Order - REST API - Magento 2.2

Update Shipping Address - Order - REST API - Magento 2.2

I need to update the shipping address for a placed order.

 

curl --request PUT \
--url {base_url}/rest/V1/orders/177962/ \
--header 'authorization: Bearer xpto' \
--header 'content-type: application/json' \
--data '{
"entity": {
"entity_id": 123456,
"postcode": "01301000"
}
}
'

 

 

RESPONSE:

{
"message": "Não foi possível salvar o endereço do pedido",
"trace": "#0 [internal function]: Magento\\Sales\\Model\\Order\\AddressRepository->save(Object(Magento\\Sales\\Model\\Order\\Address\\Interceptor))\n#1 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/vendor\/magento\/module-webapi\/Controller\/Rest.php(330): call_user_func_array(Array, Array)\n#2 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/vendor\/magento\/module-webapi\/Controller\/Rest.php(239): Magento\\Webapi\\Controller\\Rest->processApiRequest()\n#3 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/vendor\/magento\/framework\/Interception\/Interceptor.php(58): Magento\\Webapi\\Controller\\Rest->dispatch(Object(Magento\\Framework\\App\\Request\\Http))\n#4 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/vendor\/magento\/framework\/Interception\/Interceptor.php(138): Magento\\Webapi\\Controller\\Rest\\Interceptor->___callParent('dispatch', Array)\n#5 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/app\/code\/Innersite\/Webservice\/Model\/Plugin\/Webapi\/Controller\/Rest.php(22): Magento\\Webapi\\Controller\\Rest\\Interceptor->Magento\\Framework\\Interception\\{closure}(Object(Magento\\Framework\\App\\Request\\Http))\n#6 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/vendor\/magento\/framework\/Interception\/Interceptor.php(135): Innersite\\Webservice\\Model\\Plugin\\Webapi\\Controller\\Rest->aroundDispatch(Object(Magento\\Webapi\\Controller\\Rest\\Interceptor), Object(Closure), Object(Magento\\Framework\\App\\Request\\Http))\n#7 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/vendor\/magento\/framework\/Interception\/Interceptor.php(153): Magento\\Webapi\\Controller\\Rest\\Interceptor->Magento\\Framework\\Interception\\{closure}(Object(Magento\\Framework\\App\\Request\\Http))\n#8 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/generated\/code\/Magento\/Webapi\/Controller\/Rest\/Interceptor.php(26): Magento\\Webapi\\Controller\\Rest\\Interceptor->___callPlugins('dispatch', Array, Array)\n#9 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/vendor\/magento\/framework\/App\/Http.php(135): Magento\\Webapi\\Controller\\Rest\\Interceptor->dispatch(Object(Magento\\Framework\\App\\Request\\Http))\n#10 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/generated\/code\/Magento\/Framework\/App\/Http\/Interceptor.php(24): Magento\\Framework\\App\\Http->launch()\n#11 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/vendor\/magento\/framework\/App\/Bootstrap.php(256): Magento\\Framework\\App\\Http\\Interceptor->launch()\n#12 \/home\/154258.cloudwaysapps.com\/vfeefatesn\/public_html\/index.php(66): Magento\\Framework\\App\\Bootstrap->run(Object(Magento\\Framework\\App\\Http\\Interceptor))\n#13 {main}"
}

1 REPLY 1

Re: Update Shipping Address - Order - REST API - Magento 2.2

Hi @MarceloPucini 

 

You can use following custom API to update shipping or billing address of placed order:

 

Create webapi.xml

<?xml version="1.0"?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../app/code/Magento/Webapi/etc/webapi.xsd">
    <route method="POST" url="/V1/setaddress/">
        <service class="<vendor>\<modelname>\Api\SetAddressInterface" method="setAddress"/>
        <resources>
            <resource ref="anonymous"/>
        </resources>
    </route>
</routes>

Add following code with di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">    
    <preference for="<vendor>\<modelname>\Api\SetAddressInterface" type="<vendor>\<modelname>\Model\SetAddress"/>
</config>

Create API Interface:

<?php

namespace <vendor>\<modelname>\Api;

interface SetAddressInterface
{
  
     /**
	 * 
	 * @param string $entity_id
     * @param string $parent_id
     * @param string $address_type
     * @param string $region
     * @param string $region_id
     * @param string $postcode
     * @param string $firstname
     * @param string $lastname
     * @param string $middlename
     * @param string $company
     * @param string $country_id
     * @param string $telephone
     * @param string $prefix
     * @param string $street
	 * @return string
	 */
    public function setAddress($entity_id,$parent_id,$address_type,$region,$region_id,$postcode,$firstname,$lastname,$middlename,$company,$country_id,$telephone,$prefix,$street);

}

Create model file :

<?php
 
namespace <vendor>\<modelname>\Model; 
 
class SetAddress implements \<vendor>\<modelname>\Api\SetAddressInterface
{

    /**
	 * 
	 * @param string $entity_id
     * @param string $parent_id
     * @param string $address_type
     * @param string $region
     * @param string $region_id
     * @param string $postcode
     * @param string $firstname
     * @param string $lastname
     * @param string $middlename
     * @param string $company
     * @param string $country_id
     * @param string $telephone
     * @param string $prefix
     * @param string $street
	 * @return string
	 */

    public function setAddress($entity_id,$parent_id,$address_type,$region,$region_id,$postcode,$firstname,$lastname,$middlename,$company,$country_id,$telephone,$prefix,$street){
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $orderAddress = $objectManager->create('Magento\Sales\Model\Order\Address');
        $collection = $orderAddress->getCollection();
        $collection->addFieldToFilter('entity_id',['eq'=>$entity_id]);
        $collection->addFieldToFilter('parent_id',['eq'=>$parent_id]);

        foreach($collection as $item)
        {                      
            $item->setRegion($region);  
            $item->setRegion($region_id);
            $item->setPostCode($postcode);  
            $item->setFirstName($firstname);  
            $item->setLastName($lastname);  
            $item->setMiddleName($middlename);  
            $item->setCompany($company);  
            $item->setCountryId($country_id);  
            $item->setTelephone($telephone);  
            $item->setPrefix($prefix);  
            $item->setStreet($street);  
        }
        $collection->save();
        return "Addres Updated sucessfully";
        
    }
    
}

update_address.png

NOTE: "entity_id" is address id of order and "parent_id" is order entity id.

 

Issue resolved ?
Please click on Kudos, and accept as Solution!

Problem solved? Click Accept as Solution!