customerAddressFactory = Bootstrap::getObjectManager()->create( \Magento\Customer\Api\Data\AddressInterfaceFactory::class ); $this->customerDataFactory = Bootstrap::getObjectManager()->create( \Magento\Customer\Api\Data\CustomerInterfaceFactory::class ); $this->dataObjectHelper = Bootstrap::getObjectManager()->create( \Magento\Framework\Api\DataObjectHelper::class ); $this->dataObjectProcessor = Bootstrap::getObjectManager()->create( \Magento\Framework\Reflection\DataObjectProcessor::class ); } /** * @param array $additional * @return array|bool|float|int|string */ public function createSampleCustomer(array $additional = []) { $serviceInfo = [ 'rest' => [ 'resourcePath' => self::RESOURCE_PATH, 'httpMethod' => RestRequest::HTTP_METHOD_POST, ], 'soap' => [ 'service' => self::SERVICE_NAME, 'serviceVersion' => self::SERVICE_VERSION, 'operation' => self::SERVICE_NAME . 'CreateAccount', ], ]; $customerDataArray = $this->dataObjectProcessor->buildOutputDataArray( $this->createSampleCustomerDataObject($additional), \Magento\Customer\Api\Data\CustomerInterface::class ); $requestData = ['customer' => $customerDataArray, 'password' => self::PASSWORD]; $customerData = $this->_webApiCall($serviceInfo, $requestData); return $customerData; } /** * Update Existing customer * * @param array $additional * @param int $customerId * @return array|bool|float|int|string */ public function updateSampleCustomer($customerId, array $additional = []) { $serviceInfo = [ 'rest' => [ 'resourcePath' => self::RESOURCE_PATH . "/" . $customerId, 'httpMethod' => RestRequest::HTTP_METHOD_PUT, ], 'soap' => [ 'service' => self::CUSTOMER_REPOSITORY_SERVICE_NAME, 'serviceVersion' => self::SERVICE_VERSION, 'operation' => self::CUSTOMER_REPOSITORY_SERVICE_NAME . 'save', ], ]; $customerDataArray = $this->dataObjectProcessor->buildOutputDataArray( $this->createSampleCustomerDataObject($additional), \Magento\Customer\Api\Data\CustomerInterface::class ); $requestData = ['customer' => $customerDataArray, 'password' => self::PASSWORD]; $customerData = $this->_webApiCall($serviceInfo, $requestData); return $customerData; } /** * @param array $additional * @return array */ private function getCustomerSampleData(array $additional = []) { $customerData = [ CustomerData::FIRSTNAME => self::FIRSTNAME, CustomerData::LASTNAME => self::LASTNAME, CustomerData::EMAIL => 'janedoe' . uniqid() . '@example.com', CustomerData::CONFIRMATION => self::CONFIRMATION, CustomerData::CREATED_AT => self::CREATED_AT, CustomerData::CREATED_IN => self::STORE_NAME, CustomerData::DOB => self::DOB, CustomerData::GENDER => self::GENDER, CustomerData::GROUP_ID => self::GROUP_ID, CustomerData::MIDDLENAME => self::MIDDLENAME, CustomerData::PREFIX => self::PREFIX, CustomerData::STORE_ID => self::STORE_ID, CustomerData::SUFFIX => self::SUFFIX, CustomerData::TAXVAT => self::TAXVAT, CustomerData::WEBSITE_ID => self::WEBSITE_ID, 'custom_attributes' => [ [ 'attribute_code' => 'disable_auto_group_change', 'value' => '0', ], ], ]; return array_merge($customerData, $additional); } /** * Create customer using setters. * * @param array $additional * @return CustomerInterface */ public function createSampleCustomerDataObject(array $additional = []) { $customerAddress1 = $this->customerAddressFactory->create(); $customerAddress1->setCountryId('US'); $customerAddress1->setIsDefaultBilling(true); $customerAddress1->setIsDefaultShipping(true); $customerAddress1->setPostcode('75477'); $customerAddress1->setRegion( Bootstrap::getObjectManager()->create(\Magento\Customer\Api\Data\RegionInterfaceFactory::class) ->create() ->setRegionCode(self::ADDRESS_REGION_CODE1) ->setRegion('Alabama') ->setRegionId(1) ); $customerAddress1->setStreet(['Green str, 67']); $customerAddress1->setTelephone('3468676'); $customerAddress1->setCity(self::ADDRESS_CITY1); $customerAddress1->setFirstname('John'); $customerAddress1->setLastname('Smith'); $address1 = $this->dataObjectProcessor->buildOutputDataArray( $customerAddress1, \Magento\Customer\Api\Data\AddressInterface::class ); $customerAddress2 = $this->customerAddressFactory->create(); $customerAddress2->setCountryId('US'); $customerAddress2->setIsDefaultBilling(false); $customerAddress2->setIsDefaultShipping(false); $customerAddress2->setPostcode('47676'); $customerAddress2->setRegion( Bootstrap::getObjectManager()->create(\Magento\Customer\Api\Data\RegionInterfaceFactory::class) ->create() ->setRegionCode(self::ADDRESS_REGION_CODE2) ->setRegion('Alabama') ->setRegionId(1) ); $customerAddress2->setStreet(['Black str, 48', 'Building D']); $customerAddress2->setTelephone('3234676'); $customerAddress2->setCity(self::ADDRESS_CITY2); $customerAddress2->setFirstname('John'); $customerAddress2->setLastname('Smith'); $address2 = $this->dataObjectProcessor->buildOutputDataArray( $customerAddress2, \Magento\Customer\Api\Data\AddressInterface::class ); $customerData = $this->getCustomerSampleData( array_merge([CustomerData::KEY_ADDRESSES => [$address1, $address2]], $additional) ); $customer = $this->customerDataFactory->create(); $this->dataObjectHelper->populateWithArray( $customer, $customerData, \Magento\Customer\Api\Data\CustomerInterface::class ); return $customer; } }