2012-12-08 86 views
13

Một lỗi liên tục và dường như ngẫu nhiên ảnh hưởng đến thanh toán Magento trên ít nhất ba trang web khác nhau. Có một số chủ đề về chủ đề này trên diễn đàn Magento với một số lời khuyên xấu (nuốt các trường hợp ngoại lệ). Vấn đề là gây ra doanh số bị mất và dẫn đến rất nhiều thất vọng cho chủ sở hữu trang web. Vấn đề này đã được đăng nhập với Magento kể từ tháng 3 năm 2011 (http://www.magentocommerce.com/bug-tracking/issue/?issue=11081).Magento "Tổng số trích dẫn phải được thu thập" Ngoại lệ do mẫu thử nghiệm thất bại Form.serizalize trong thanh toán

Không có mẫu trong phương thức thanh toán, trình duyệt, phiên bản Magento hoặc các yếu tố khác mà chúng tôi đã cố gắng tương quan. Các triệu chứng chính là một ngoại lệ được ghi lại trong var/log/exception.log mà nói "Tổng số báo cáo phải được thu thập" được ném trong Mage_Sales_Model_Quote::prepareRecurringPaymentProfiles().

Chúng tôi đã ghi thông số Yêu cầu khi ngoại lệ xảy ra và xác định rằng thông số payment trống. Chúng tôi tin rằng Magento sẽ gửi lại các phần tử biểu mẫu từ bước Thanh toán tại thời điểm khách hàng nhấp vào Đặt hàng (để chi tiết thẻ tín dụng không được duy trì trên trang web giữa các yêu cầu AJAX) và tuần tự hóa biểu mẫu không thành công và trả về giá trị rỗng/empty mà mã opcheckout.js sau đó chuyển sang PHP kích hoạt ngoại lệ.

Bạn có thể đề xuất điều kiện hoặc dữ liệu nào sẽ khiến phương thức Form.serialize của nguyên mẫu thất bại theo cách này và/hoặc cách tiếp tục tấn công vấn đề này không?

+1

Hey, @ Jonathan, phương thức thanh toán của bạn là gì? –

+0

cảm ơn bốn câu trả lời của bạn @Ivan nó dường như không quan trọng phương thức thanh toán nào. xảy ra với CC trực tiếp eway, chuyển hướng Paypal và chuyển hướng CC khác –

+1

Xin chào @ Jonathan, phiên bản Magento là gì? Bạn có nhật ký về những trình duyệt nào được khách hàng sử dụng hay không, ai đã gặp sự cố này? –

Trả lời

9

Thực ra, có rất ít lý do có thể cho điều đó.

Phương pháp Form.serialize() của nguyên mẫu đang sử dụng một phương pháp khác từ cùng một lớp, được gọi là Form.getElements(). Bạn có thể thử các mã sau đây quá xem những gì các yếu tố được thông qua từ đối tượng payment.form. Chỉ cần ghi đè lên phương thức review.save() trong khi chạy cho mục đích gỡ lỗi.

Bạn có thể dán đoạn mã sau vào giao diện điều khiển của trình duyệt yêu thích của bạn (Chrome, Firefox hoặc Safari):

review.save = review.save.wrap(function (originalMethod) { 
    console.log(payment.form); // Check what is in the form object 
    console.log(Form.getElements(payment.form)); // Check what items are returned for serializing 
    originalMethod(); // Calling original place order functionality to see if the issue occurs, so you can compare above debug info 
}); 

Tôi nghĩ rằng nó sẽ giúp bạn trong việc tìm ra các vấn đề với quá trình tuần tự. Nó có thể được có thể là hình thức thanh toán bằng cách nào đó đã trống rỗng, hoặc tất cả các mục trong các hình thức đã bị vô hiệu hóa và vân vân ...

Trân trọng, Ivan

+2

cách tiếp cận rất tốt đẹp, sẽ cung cấp cho nó một thử. Vấn đề là không thể tái tạo nó một cách nhất quán :-( –

+2

Đã là nạn nhân của vấn đề này tôi có thể chứng thực rằng đó là ngẫu nhiên và vô cùng khó khăn để tái sản xuất.Một đoạn mã nhỏ ở đây - Tôi rất vui khi chuyển nó sang QA để xem chúng tôi có thể thiết lập một số tự động hóa và thử nghiệm chống lại nó hay không ... – philwinkle

+0

@philwinkle vui lòng cho chúng tôi biết những gì được phát hiện! –

1

tôi phải đối mặt với một vấn đề tương tự. Để giải quyết vấn đề này trong các bước đơn giản, hãy mở datbase của bạn, bây giờ là cơ sở dữ liệu < < bảng 'core_config_data' và thay đổi giá trị cho đường dẫn 'thiết kế/email/tiêu đề' và 'thiết kế/email/chân trang' từ '2' thành '0'.

Luồng thanh toán giờ đây sẽ hoạt động bình thường ... Làm việc cho tôi !!