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());
 }
예제 #3
0
 /**
  * @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());
 }
예제 #4
0
파일: Quote.php 프로젝트: aiesh/magento2
 /**
  * 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;
 }