손님 체크 아웃을 위해 고객 이름을 저장하는 방법은 무엇입니까?


9

onestepcheckout 모듈에 고객 이름이 저장되지 않았습니다. 주문 저장에서 놓친 단계가 있습니까?

$shippingInfo = array(
        'city'=> (string)$shippingAddress->City,
        'country_id' => (string)$shippingAddress->CountryCode,
        'email' => (string)$customerInfo->Email,
        'firstname' => (string)$firstname,
        'lastname' => (string)$lastname,
        'postcode' => (string)$shippingAddress->PostalCode,
        'street' => array(   (string)$shippingAddress->AddressLine1, ),
        'telephone' => (string)$shippingAddress->Phone,
        'use_for_shipping' => '1',
        'name'=>'hello there'
    );
    if(!empty($regionId)){
        $shippingInfo['region_id'] = $regionId;
    }
    else{
        $shippingInfo['region'] = $regionCode;
    }

$quote = $this->getOnepage()->getQuote();  
$quote->collectTotals()->save();
$quote->getBillingAddress()
    ->addData($shippingInfo);

$quote->getShippingAddress()
    ->addData($shippingInfo);
$quote->setCheckoutMethod('guest')
        ->setCustomerId(null)
        ->setCustomerEmail('test@example.com')
        ->setCustomerIsGuest(true)
        ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID)->save();
    $this->getOnepage()->saveOrder();
    $this->getOnepage()->getQuote()->save();

여기에 이미지 설명을 입력하십시오

답변:


9

슬프게도 한 걸음도 놓치지 않았습니다. 관리 섹션 템플리트 /app/design/adminhtml/default/default/template/sales/order/view/info.phtml에서 주문에서 getCustomerName에 대한 호출을 볼 수 있습니다.

주문 클래스 Mage_Sales_Model_Order에서 getCustomerName 함수는 다음과 같습니다.

public function getCustomerName()
{
    if ($this->getCustomerFirstname()) {
        $customerName = $this->getCustomerFirstname() . ' ' . $this->getCustomerLastname();
    }
    else {
        $customerName = Mage::helper('sales')->__('Guest');
    }
    return $customerName;
}

게스트 견적이 시스템에 의해 준비되면 이름과 성을 설정하지 않으므로 주문에 저장되지 않습니다.

protected function _prepareGuestQuote()
{
    $quote = $this->getQuote();
    $quote->setCustomerId(null)
        ->setCustomerEmail($quote->getBillingAddress()->getEmail())
        ->setCustomerIsGuest(true)
        ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID);
    return $this;
}

슬프게도 모든 손님 주문은 관리자 섹션에 손님으로 표시됩니다. 여기서 다음 중 하나를 수행 할 수 있습니다.

  1. 코드가 표준 프로세스가 아닌 경우 다음 $quote->setCustomerFirstname($firstname)과를 사용하십시오 $quote->setCustomerLastname($lastname).
  2. 프론트 엔드 주문 이메일 표시를 반영하고 청구서 수신 주소에 설정된 이름을 사용하십시오. $customerName = $this->getBillingAddress()->getName();
  3. 작업에서 고객의 성과 이름 (주소에서)을 설정 sales_order_place_before하거나sales_convert_quote_to_order

관찰자 sales_convert_quote_to_order가 작동하지 않습니다. 아마 내가 뭘 잘못하고있다class Amazon_Payments_Model_Observer extends Varien_Object { public function salesQuoteSaveAfter($observer) { $order = $observer->getEvent()->getOrder(); $order->setCustomerFirstname('ljslkdfjds'); $order->save();
Vlad Vinnikov

그것에 오류가 있습니까?
David Manners

getMethodInstance() 객체가 아닌 객체 의 멤버 함수 를 호출합니다 app/code/core/Mage/Payment/Model/Observer.php.
블라드 Vinnikov

3

결제 코드를 업데이트하면 내 문제가 해결되었습니다. app/code/local/AW/Onestepcheckout/controllers/AjaxController.php

$quote = $this->getOnepage()->getQuote();
$quote->collectTotals()->save();
$quote->getBillingAddress()
        ->addData($shippingInfo);

$quote->getShippingAddress()
        ->addData($shippingInfo);

$quote->setCustomerFirstname('first')->setCustomerLastname('last');
$this->getOnepage()->saveOrder();
$this->getOnepage()->getQuote()->save();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.