5

I have succeed create customer programmatically. Now I want to add customer address to the customer, how can i do this programmatically?

  • how did you created a customer programatically please – Developper Magento Oct 31 '18 at 12:58
11

Using Magento\Customer\Api\AddressRepositoryInterface; you can create customer address.

namespace {NameSpace};

/**
 * Description of Address
 */
class Address {

/**
 * @var Magento\Customer\Api\Data\AddressInterfaceFactory
 */
protected $addressDataFactory;

/**
 * @var \Magento\Customer\Api\AddressRepositoryInterface
 */
protected $addressRepository;

public function __construct(
    \Magento\Customer\Api\AddressRepositoryInterface $addressRepository,
    \Magento\Customer\Api\Data\AddressInterfaceFactory $addressDataFactory
) {
    $this->addressRepository = $addressRepository;
    $this->addressDataFactory = $addressDataFactory;
}

public function saveCustomer()
{
    $address = $this->addressDataFactory->create();
    $address->setFirstname($firstName)
            ->setLastname($lastName)
            ->setCountryId($countryId)
            ->setRegionId($regionId)
            ->setRegion($regionName)
            ->setCity($city)
            ->setPostcode($postcode)
            ->setCustomerId($customerId)
            ->setStreet($street)
            ->setTelephone($telephone);

    $this->addressRepository->save($address);
}
| improve this answer | |
  • Great! let's take this next level...according to my requirement...how can i check that if given address is already exist or not?if yes,then i've to create address else i've to skip. – wakar Ahamad May 29 '19 at 15:27
  • +1 for the answer. I also want to add the Landmark in my address. I tried by adding ->setLandmark($landmark) but it doesn't work for me. How could I set it along with this? – MagentoUser Feb 3 at 9:48
  • @Amit Bera How to save custom attributes? ->setMycustom() not working – Kanika Mar 13 at 5:06
  • Good answer, saved my time +1:) – Shoaib Munir Mar 25 at 11:21
1

Please try with following code.

$customerId = 10

$addresss = $objectManager->get('\Magento\Customer\Model\AddressFactory');

$address = $addresss->create();

$address->setCustomerId($customerId)

->setFirstname('test')

->setLastname('last')

->setCountryId('IN')

->setPostcode(10000)

->setCity('Bangalore')

->setTelephone('1234567890')

->setCompany('BNG')

->setStreet('XYZ street')

->setIsDefaultBilling('1')

->setIsDefaultShipping('1')

->setSaveInAddressBook('1')

$address->save();
| improve this answer | |
0

Try it, It works for me.

private function save_customer($JsonParam) {
        echo "<PRE>";
        print_r($JsonParam);
        exit;
        $objectManager = $bootstrap->getObjectManager();
        $url = \Magento\Framework\App\ObjectManager::getInstance();
        $storeManager = $url->get('\Magento\Store\Model\StoreManagerInterface');
        $state = $objectManager->get('\Magento\Framework\App\State');
        $state->setAreaCode('frontend');

        // Customer Factory to Create Customer
        $customerFactory = $objectManager->get('\Magento\Customer\Model\CustomerFactory');
        $websiteId = $storeManager->getWebsite()->getWebsiteId();
        $store = $storeManager->getStore();  // Get Store ID
        $storeId = $store->getStoreId();

        // Instantiate object (this is the most important part)
        $customer = $customerFactory->create();
        $customer->setWebsiteId($websiteId);
        $customer->loadByEmail($JsonParam->Email);
        if (!$customer->getId()) {
            $customer->setEmail($JsonParam->Email);
            $customer->setFirstname($JsonParam->FirstName);
            $customer->setLastname($JsonParam->LastName);
            $customer->setPassword('Admin@123');
            $customer->save();

            $addresss = $objectManager->get('\Magento\Customer\Model\AddressFactory');
            $address = $addresss->create();
            $address->setCustomerId($customer->getId())
                    ->setFirstname($JsonParam->FirstName)
                    ->setLastname($JsonParam->LastName)
                    ->setCountryId($JsonParam->Country)
                    ->setPostcode($JsonParam->Zip)
                    ->setCity($JsonParam->City)
                    ->setState($JsonParam->State)
                    ->setTelephone($JsonParam->Phone)
                    ->setCompany('Arhamsoft Pvt. Ltd.')
                    ->setStreet($JsonParam->Address1 . " / " . $JsonParam->Address2)
                    ->setIsDefaultBilling(false)
                    ->setIsDefaultShipping('1')
                    ->setSaveInAddressBook('1');
            $address->save();

            $addresss = $objectManager->get('\Magento\Customer\Model\AddressFactory');
            $address = $addresss->create();
            $address->setCustomerId($customer->getId())
                    ->setFirstname($JsonParam->FirstName)
                    ->setLastname($JsonParam->LastName)
                    ->setCountryId($JsonParam->BillingCountry)
                    ->setPostcode($JsonParam->BillingZip)
                    ->setCity($JsonParam->BillingCity)
                    ->setState($JsonParam->BillingState)
                    ->setTelephone($JsonParam->Phone)
                    ->setCompany('Arhamsoft Pvt. Ltd.')
                    ->setStreet($JsonParam->BillingAddress1 . " / " . $JsonParam->BillingAddress2)
                    ->setIsDefaultBilling('1')
                    ->setIsDefaultShipping(false)
                    ->setSaveInAddressBook('1');
            $address->save();

            echo 'Create customer successfully' . $customer->getId(); exit; 
        } else {
            //email already exists 
            echo 'Email already exists'; exit; 
        }
    }
| improve this answer | |
  • Does this update the NULL value of customer_entity table column "default_shipping", "default_billing"? – M Shoaib Qureshi Feb 13 at 10:09
  • how to do that? – M Shoaib Qureshi Feb 13 at 10:09
0

I Did check and its working proper

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$addresss = $objectManager->get('\Magento\Customer\Model\AddressFactory');

        $address = $addresss->create();

        $address->setCustomerId($customerId)

            ->setFirstname($FirstName)

            ->setLastname($LastName)

            ->setCountryId($countryid)

            ->setPostcode($postcode)

            ->setCity($city)

            ->setTelephone($telephone)

            ->setFax($fax)

            ->setCompany($Company)

            ->setStreet($Street)

            ->setRegion($region)

            ->setSaveInAddressBook('1');

        $address->save();

And if you want to set default billing & shipping address just add 2 line like below

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$addresss = $objectManager->get('\Magento\Customer\Model\AddressFactory');

        $address = $addresss->create();

        $address->setCustomerId($customerId)

            ->setFirstname($FirstName)

            ->setLastname($LastName)

            ->setCountryId($countryid)

            ->setPostcode($postcode)

            ->setCity($city)

            ->setTelephone($telephone)

            ->setFax($fax)

            ->setCompany($Company)

            ->setStreet($Street)

            ->setRegion($region)

            ->setIsDefaultBilling('1')

            ->setIsDefaultShipping('1')

            ->setSaveInAddressBook('1');

        $address->save();
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.