2012-04-30 6 views
7

"Firecheckout"이라는 템플릿 마스터에서 맞춤 체크 아웃 확장 프로그램을 사용합니다. 관련성이 있는지는 확실하지 않지만 언급해야한다고 생각했습니다. 때때로 "거래 방법을 지정하십시오"라는 이유로 거래가 실패한 것을 볼 수 있습니다. 나는이 일이 어떻게 일어날 수 있는지를 추적하려고 오랜 시간을 보냈고, 나는 길을 잃었다. 나는 문제를 복제하기 위해 내가 생각할 수있는 모든 것을 시도했다. 내가하는 일들의 조합에 따라 (장바구니에서 항목 추가/제거, 배송 옵션을 변경하는 쿠폰 코드 추가/제거, 모바일 사이트와 데스크톱 사이트 간 전환 등) 체크 아웃 페이지가 실행되지 않도록 할 수있었습니다. 운송 방법에 대해 옵션이 선택되었습니다. 그러나 주문을 제출하려고하면 배송 방법 섹션에 "배송 방법을 지정하십시오."라고 적힌 즉각적인 빨간색 메시지가 나타납니다 (전자 메일에 표시된 내용과 페이지에 표시된 오류의 내용에 유의하십시오). ... "a"누락). 이로 인해 오류 전자 메일이 발생하지 않습니다. I 오류 이메일이 TM_FireCheckout_Model_Service_Quote에 트리거 것을 알게 코드를 검색Magento 거래 오류 "배송 방법을 지정하십시오."

이 경우에 _validate의 클래스 방법

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

(Mage_Sales_Model_Service_Quote을 확장), 나도 $를 추측 방법 또는 $ rate은 null 또는 false이지만 그 이유는 무엇입니까? 이런 일이 발생하지 않도록 할 수있는 일이 있습니까? FireCheckout의 _validate 메소드와 부모 클래스의 _validate 메소드의 유일한 차이점은 필수 필드로 간주됩니다. 어떤 식 으로든 주소 개체를 변경하지 않으므로 getShippingMethodgetShippingRateByCode에 대한 후속 호출은 기본 설치와 동일해야합니다.

필요한 경우 추가 정보를 제공 할 수 있습니다. 나는 기본적으로 그 오류를 유발할 수있는 것을 이해하려고 노력하고 그것을 재현 할 수있어서 궁극적으로 그것을 초래하는 구멍을 패치 할 수 있습니다.

감사합니다.

+2

왜 var_dump ($ rate), null, 'mydebug.log', true)를 사용하여 _validate()'Mage :: log ("Firecheckout :". var_dump ($ method) ; 'Mage_Sales_Model_Service_Quote의 로컬 사본에이 사용자 정의 로그 파일을 꼬리 말고, 주문 및 고객 ID를 추가하여 해당 값이 지속되는지 확인하십시오. – B00MER

+1

정확히 같은 오류가 있지만 Apptha의 Onestepcheckout Extension을 사용하고 있습니다. 어떤 도움을 주시면 감사하겠습니다. – Lennon

답변

0

전에 비슷한 문제가 발생했지만 Firecheckout과 관련이 없습니다. 그러나 그것은 또한 @Lennon과 같은 Apptha의 Onestepcheckout Extension이었습니다. 짧게 말하자면, 자바 스크립트 처리에서 데이터를 버린 것은 불균형입니다. 나는 명확한 답을 갖고 있지는 않지만, 양식 유효성 검사와 계산 양식 사이에 어떤 일이 일어나는지 살펴볼 것을 권장합니다.

조사를 시작할 수있는 방법은 FF로 Firebug를 실행하고 콘솔을보고 데이터가 계속 전달되는지 확인하는 것입니다. 또한하여 controler_action_predispatch 행사에서 다음을 수행하는 간단한 관찰자 모듈을 만들 수 있습니다

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

바로 바로 체크 아웃 경로 내에서 컨트롤러 파일을 편집 .. 또는. 뭐든간에 당신 보트를 뜨게.

로그 사용 및 tail -f var/logs/system.log. 요청이 로그와 일치하는지 확인해야합니다. 그래서 어떻게 내 문제를 해결하기 시작했다.

다시 말하지만, 이것은 "copypasta"픽스 또는 문제의 근본을 다루는 튜토리얼이 아니며, 처음 경험에서 내 문제를 어떻게 진단했는지에 대한 경험을 공유합니다.

당신은 http://www.silksoftware.com/magento-module-creator

0

에서 매우 빠르게 모듈을 만들 수 있습니다 당신은 변경 후 배송 방법을 정의 할 필요가있다. 예를 들어 Firecheckout의 "indexController"에서 함수를 "saveShippingAction"으로 만듭니다. 이 함수는 매번 고객 데이터를 변경하거나 원하는 경우 Ajax를 통해 호출 할 수 있습니다.

내부 장소 : 귀하의 경우 새 클라이언트에 저장할 필요하면 다시 고객의 마지막 주소로 전송 데이터를 기록이 예에서

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

은, 단지 그를 위해 주소를 생성하고 배달 주소로 저장하십시오.

저는 행운을 빌어 도움이되기를 바랍니다.

관련 문제