public function connectByFacebookId($facebookId, \stdClass $token, $customerId) { $customerDetailsObject = $this->_customerAccountService->getCustomerDetails($customerId); /* @var $customerDetailsObject \Magento\Customer\Service\V1\Data\CustomerDetails */ $customerDataObject = $customerDetailsObject->getCustomer(); /* @var $customerDetailsObject \Magento\Customer\Service\V1\Data\Customer */ // Merge old and new data $customerDetailsArray = array_merge($customerDataObject->__toArray(), array('custom_attributes' => array(array(\Magento\Framework\Service\Data\AttributeValue::ATTRIBUTE_CODE => 'inchoo_socialconnect_fid', \Magento\Framework\Service\Data\AttributeValue::VALUE => $facebookId), array(\Magento\Framework\Service\Data\AttributeValue::ATTRIBUTE_CODE => 'inchoo_socialconnect_ftoken', \Magento\Framework\Service\Data\AttributeValue::VALUE => serialize($token))))); // Pass result to customerBuilder $this->_customerBuilder->populateWithArray($customerDetailsArray); // Pass result to customerDetailsBuilder $this->_customerDetailsBuilder->setCustomer($this->_customerBuilder->create()); // Update customer $this->_customerAccountService->updateCustomer($customerId, $this->_customerDetailsBuilder->create()); // Set customer as logged in $this->_customerSession->setCustomerDataAsLoggedIn($customerDataObject); }
/** * @magentoDbIsolation enabled */ public function testCreateCustomerNewThenUpdateFirstName() { $email = '*****@*****.**'; $storeId = 1; $firstname = 'Tester'; $lastname = 'McTest'; $groupId = 1; $this->_customerBuilder->setStoreId($storeId)->setEmail($email)->setFirstname($firstname)->setLastname($lastname)->setGroupId($groupId); $newCustomerEntity = $this->_customerBuilder->create(); $customerDetails = $this->_customerDetailsBuilder->setCustomer($newCustomerEntity)->create(); $customer = $this->_customerAccountService->createCustomer($customerDetails, 'aPassword'); $this->_customerBuilder->populate($customer); $this->_customerBuilder->setFirstname('Tested'); $customerDetails = $this->_customerDetailsBuilder->setCustomer($this->_customerBuilder->create())->create(); $this->_customerAccountService->updateCustomer($customerDetails); $customer = $this->_customerAccountService->getCustomer($customer->getId()); $this->assertEquals('Tested', $customer->getFirstname()); $this->assertEquals($lastname, $customer->getLastname()); }
/** * @magentoAppArea adminhtml * @magentoDataFixture Magento/Newsletter/_files/subscribers.php */ public function testCustomerUpdatedEmail() { $objectManager = Bootstrap::getObjectManager(); /** @var \Magento\Newsletter\Model\Subscriber $subscriber */ $subscriber = $objectManager->create('Magento\\Newsletter\\Model\\Subscriber'); $subscriber->loadByEmail('*****@*****.**'); $this->assertTrue($subscriber->isSubscribed()); $this->assertEquals(1, (int) $subscriber->getCustomerId()); $customer = $this->accountService->getCustomer(1); /** @var \Magento\Customer\Service\V1\Data\CustomerBuilder $customerBuilder */ $customerBuilder = $objectManager->get('Magento\\Customer\\Service\\V1\\Data\\CustomerBuilder'); $customerBuilder->populate($customer)->setEmail('*****@*****.**'); /** @var \Magento\Customer\Service\V1\Data\CustomerDetailsBuilder $customerDetailsBuilder */ $customerDetailsBuilder = $objectManager->get('Magento\\Customer\\Service\\V1\\Data\\CustomerDetailsBuilder'); $customerDetailsBuilder->setCustomer($customerBuilder->create()); $this->accountService->updateCustomer($customerDetailsBuilder->create()); $subscriber->loadByEmail('*****@*****.**'); $this->assertTrue($subscriber->isSubscribed()); $this->assertEquals(1, (int) $subscriber->getCustomerId()); }
/** * Submit the quote. Quote submit process will create the order based on quote data * * @return \Magento\Sales\Model\Order * @throws \Exception */ public function submitOrderWithDataObject() { $this->_deleteNominalItems(); $this->_validate(); $quote = $this->_quote; $isVirtual = $quote->isVirtual(); $transaction = $this->_transactionFactory->create(); $customerData = null; if (!$quote->getCustomerIsGuest()) { $customerData = $quote->getCustomerData(); $addresses = $quote->getCustomerAddressData(); $customerDetails = $this->_customerDetailsBuilder->setCustomer($customerData)->setAddresses($addresses)->create(); if ($customerData->getId()) { $this->_customerAccountService->updateCustomer($customerDetails); } else { //for new customers $customerData = $this->_customerAccountService->createCustomerWithPasswordHash($customerDetails, $quote->getPasswordHash()); $addresses = $this->_customerAddressService->getAddresses($customerData->getId()); //Update quote address information foreach ($addresses as $address) { if ($address->isDefaultBilling()) { $quote->getBillingAddress()->setCustomerAddressData($address); } else { if ($address->isDefaultShipping()) { $quote->getShippingAddress()->setCustomerAddressData($address); } } } if ($quote->getShippingAddress() && $quote->getShippingAddress()->getSameAsBilling()) { $quote->getShippingAddress()->setCustomerAddressData($quote->getBillingAddress()->getCustomerAddressData()); } } $quote->setCustomerData($customerData)->setCustomerAddressData($addresses); } $transaction->addObject($quote); $quote->reserveOrderId(); if ($isVirtual) { $order = $this->_convertor->addressToOrder($quote->getBillingAddress()); } else { $order = $this->_convertor->addressToOrder($quote->getShippingAddress()); } $order->setBillingAddress($this->_convertor->addressToOrderAddress($quote->getBillingAddress())); if ($quote->getBillingAddress()->getCustomerAddressData()) { $order->getBillingAddress()->setCustomerAddressData($quote->getBillingAddress()->getCustomerAddressData()); } if (!$isVirtual) { $order->setShippingAddress($this->_convertor->addressToOrderAddress($quote->getShippingAddress())); if ($quote->getShippingAddress()->getCustomerAddressData()) { $order->getShippingAddress()->setCustomerAddressData($quote->getShippingAddress()->getCustomerAddressData()); } } $order->setPayment($this->_convertor->paymentToOrderPayment($quote->getPayment())); foreach ($this->_orderData as $key => $value) { $order->setData($key, $value); } foreach ($quote->getAllItems() as $item) { $orderItem = $this->_convertor->itemToOrderItem($item); if ($item->getParentItem()) { $orderItem->setParentItem($order->getItemByQuoteItemId($item->getParentItem()->getId())); } $order->addItem($orderItem); } if ($customerData) { $order->setCustomerId($customerData->getId()); } $order->setQuote($quote); $transaction->addObject($order); $transaction->addCommitCallback(array($order, 'place')); $transaction->addCommitCallback(array($order, 'save')); /** * We can use configuration data for declare new order status */ $this->_eventManager->dispatch('checkout_type_onepage_save_order', array('order' => $order, 'quote' => $quote)); $this->_eventManager->dispatch('sales_model_service_quote_submit_before', array('order' => $order, 'quote' => $quote)); try { $transaction->save(); $this->_inactivateQuote(); $this->_eventManager->dispatch('sales_model_service_quote_submit_success', array('order' => $order, 'quote' => $quote)); } catch (\Exception $e) { //reset order ID's on exception, because order not saved $order->setId(null); /** @var $item \Magento\Sales\Model\Order\Item */ foreach ($order->getItemsCollection() as $item) { $item->setOrderId(null); $item->setItemId(null); } $this->_eventManager->dispatch('sales_model_service_quote_submit_failure', array('order' => $order, 'quote' => $quote)); throw $e; } $this->_order = $order; return $order; }