2012-04-30 30 views
7

Chúng tôi sử dụng tiện ích thanh toán tùy chỉnh của Mẫu được gọi là "Firecheckout". Không chắc chắn nếu đó là có liên quan, nhưng figured tôi nên đề cập đến nó. Thỉnh thoảng tôi thấy một email giao dịch không thành công với lý do là "Vui lòng chỉ định phương thức giao hàng". Tôi đã dành một thời gian dài cố gắng để theo dõi làm thế nào điều này có thể xảy ra và tôi bị mất. Tôi đã thử tất cả mọi thứ tôi có thể nghĩ đến để nhân đôi vấn đề. Tùy thuộc vào sự kết hợp của những thứ tôi làm (thêm/xóa các mục khỏi giỏ hàng, thêm/xóa mã phiếu giảm giá thay đổi tùy chọn giao hàng, chuyển đổi giữa các trang web trên thiết bị di động và máy tính để bàn, v.v.) Không có tùy chọn nào được chọn cho phương thức giao hàng. Tuy nhiên, nếu tôi cố gắng gửi đơn đặt hàng, tôi nhận được thông báo màu đỏ ngay lập tức trong phần phương thức giao hàng cho biết "Vui lòng chỉ định phương thức giao hàng" (Lưu ý sự khác biệt giữa nội dung trong email và nội dung được nêu trong lỗi được hiển thị trên trang ... thiếu "a"). Điều này không dẫn đến một email lỗi.Lỗi giao dịch Magento "Vui lòng chỉ định phương thức giao hàng"

Tìm kiếm thông qua các mã tôi thấy rằng các email lỗi được kích hoạt trong TM_FireCheckout_Model_Service_Quote (mở rộng Mage_Sales_Model_Service_Quote) lớp trong _validate phương pháp

$method= $address->getShippingMethod(); 
$rate = $address->getShippingRateByCode($method); 
if (!$this->getQuote()->isVirtual() && (!$method || !$rate)) { 
    Mage::throwException($helper->__('Please specify a shipping method.')); 
} 

Trong trường hợp này, tôi đoán hoặc $ phương thức hoặc $ rate là không đúng hoặc sai, nhưng tại sao/như thế nào? Tôi có thể làm gì để đảm bảo điều này không bao giờ xảy ra? Sự khác biệt duy nhất giữa phương pháp _validate của FireCheckout và phương thức _validate của FireCheckout là trường được xem là bắt buộc. Nó không làm thay đổi đối tượng địa chỉ theo bất kỳ cách nào, vì vậy các lệnh gọi tiếp theo tới getShippingMethodgetShippingRateByCode phải giống như một cài đặt mặc định.

Tôi có thể cung cấp thêm chi tiết nếu cần. Về cơ bản tôi đang cố gắng hiểu những gì có thể gây ra lỗi và cách tôi có thể tái tạo nó để cuối cùng tôi có thể vá lỗ hổng đang gây ra nó ngay từ đầu.

Cảm ơn!

+2

tại sao không thêm dòng nhật ký trong _validate() 'Mage :: log (" Firecheckout: ". Var_dump ($ method)." | ". Var_dump ($ rate), null, 'mydebug.log', true) ; 'vào một bản sao cục bộ của Mage_Sales_Model_Service_Quote và đuôi tệp nhật ký tùy chỉnh này, có lẽ thêm cả thứ tự và ID khách hàng để xem liệu các giá trị đó có bền bỉ không? – B00MER

+1

Tôi có chính xác cùng một lỗi, nhưng tôi đang sử dụng Onestepcheckout Extension từ Apptha. Bất kỳ trợ giúp sẽ được đánh giá cao. – Lennon

Trả lời

0

Tôi đã gặp phải điều gì đó tương tự trước đây, nhưng không phải với Firecheckout. Nhưng nó cũng là Onestepcheckout Extension từ Apptha như @Lennon. Câu chuyện dài ngắn, nó là một sự khác biệt trong xử lý javascript mà thùng rác dữ liệu. Tôi không có câu trả lời rõ ràng cho bạn nhưng tôi khuyên bạn nên xem xét những gì xảy ra ở giữa các xác thực biểu mẫu và dữ liệu được lưu trên biểu mẫu thanh toán.

Những việc bạn có thể làm để bắt đầu điều tra là kích hoạt Firebug trên FF, xem bảng điều khiển và xem liệu dữ liệu của bạn có đang được truyền đi hay không. Bạn cũng có thể tạo một module quan sát đơn giản để làm như sau tại sự kiện controler_action_predispatch:

$request = $observer->getControllerAction()->getRequest(); 
Mage::log(var_export($request->getParams(),true)); 

..or chỉ chỉnh sửa trực tiếp các tập tin điều khiển trong phạm vi tuyến đường thanh toán của bạn. tuỳ bạn thôi.

Bật nhật ký và tail -f var/logs/system.log. Bạn nên đảm bảo rằng các yêu cầu khớp với nhật ký. Đó là cách tôi bắt đầu giải quyết vấn đề của tôi mặc dù.

Một lần nữa, đây không phải là bản sửa lỗi "copypasta" hoặc hướng dẫn tại gốc của vấn đề, mà là chia sẻ kinh nghiệm của tôi về cách tôi chẩn đoán vấn đề của mình từ trải nghiệm đầu tiên.

Bạn có thể tạo một module rất nhanh chóng tại http://www.silksoftware.com/magento-module-creator

0

bạn cần xác định phương thức giao hàng sau khi thay đổi. Ví dụ, trong "indexController" của Firecheckout tạo ra một chức năng như "saveShippingAction". Chức năng này bạn có thể gọi qua Ajax mỗi lần thay đổi dữ liệu khách hàng hoặc theo ý muốn của bạn.

Bên trong nơi:

$customer = Mage::getSingleton('customer/session')->getCustomer(); 
    $shippingData = $this->getRequest()->getParam('shipping'); 
    $shippingData['street'] = implode("\n", $shippingData['street']); 
    $customerAddress = $customer->getAddresses(); 
    $customerAddress = end($customerAddress); 
    $customerAddress->setIsDefaultShipping(true)->setSaveInAddressBook(true); 
    $customerAddress->addData($shippingData)->save(); 

Trong ví dụ này, tôi ghi lại dữ liệu truyền đi lại đến địa chỉ cuối cùng của khách hàng, nếu trong trường hợp của bạn, bạn cần phải lưu cho một khách hàng mới, chỉ cần tạo một địa chỉ cho anh ta và lưu dưới dạng địa chỉ giao hàng.

Tôi hy vọng sẽ giúp, chúc bạn may mắn.

Các vấn đề liên quan