Làm thế nào để lưu tên khách hàng để kiểm tra khách?


9

Tên khách hàng không được lưu trong mô-đun onestepcheckout. Có một bước tôi đã bỏ lỡ trong thứ tự tiết kiệm?

$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();

nhập mô tả hình ảnh ở đây

Câu trả lời:


9

Đáng buồn thay, bạn đã không bỏ lỡ một bước. Trong mẫu phần quản trị, /app/design/adminhtml/default/default/template/sales/order/view/info.phtmlbạn có thể thấy lệnh gọi getCustomerName theo đơn đặt hàng.

Trong lớp thứ tự Mage_Sales_Model_Order, hàm getCustomerName như sau:

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

Khi hệ thống báo giá của khách được chuẩn bị bởi hệ thống, nó không bao giờ đặt tên và họ và vì vậy nó không bao giờ được lưu vào đơn hàng:

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;
}

Thật đáng buồn, tất cả các đơn đặt hàng của khách sẽ được hiển thị dưới dạng khách trong phần quản trị. Bạn có thể làm một trong những điều sau đây.

  1. Nếu mã không trong quy trình chuẩn, chỉ cần sử dụng như sau $quote->setCustomerFirstname($firstname)$quote->setCustomerLastname($lastname).
  2. Phản chiếu màn hình email thứ tự giao diện người dùng và đặt tên được đặt trong địa chỉ thanh toán. $customerName = $this->getBillingAddress()->getName();
  3. Đặt tên và họ của khách hàng (từ địa chỉ) trên hành động sales_order_place_beforehoặcsales_convert_quote_to_order

Người quan sát sales_convert_quote_to_order không hoạt động. có lẽ tôi đang làm gì đó saiclass Amazon_Payments_Model_Observer extends Varien_Object { public function salesQuoteSaveAfter($observer) { $order = $observer->getEvent()->getOrder(); $order->setCustomerFirstname('ljslkdfjds'); $order->save();
Vlad Vinnikov

Bạn có nhận được bất kỳ lỗi với điều đó?
David Manners

Gọi một hàm thành viên getMethodInstance() trên một đối tượng không app/code/core/Mage/Payment/Model/Observer.php.
Vlad Vinnikov

3

cập nhật mã thanh toán đã giải quyết vấn đề của tôi: 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();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.