문제

기본적인 문제는 이렇습니다. 무료(소계 0) 주문에 대한 송장 생성을 활성화했습니다.이는 정상적으로 작동하며 송장 이메일이 전송되지 않는다는 점을 제외하면 송장이 생성됩니다.

나는 메소드가 생성될 때마다 메소드를 재정의해야 한다고 예상했습니다. 아마도 $invoice->sendEmail(), 하지만 이것이 정확히 어디에 있는지 찾는 데 어려움을 겪고 있습니다.

도움이 되었습니까?

해결책

아웃바운드 이메일 주소를 올바르게 설정했다고 가정합니다. Menu > System > Configuration :매장 이메일 주소:

Menu  loading= System > Configuration : Store Email Addresses Configuration">

판매 찾아보기:위와 동일한 인터페이스에서 판매 이메일 탭을 클릭하고 송장 아코디언 메뉴를 확장합니다.Sales : Sales Emails tab Invoice Email Settings

다음을 확인해야 합니다.

  1. 송장 이메일이 활성화되어 있는지
  2. 위에서 구성한 주소를 기반으로 보낸 사람 주소를 선택했습니다.이 예에서는 영업 담당자를 사용하지만 적절하게 구성된 이메일 주소를 선택할 수 있습니다.
  3. 등록된 사용자에 대해 템플릿이 선택되었는지(등록된 사용자를 테스트하는 경우)
  4. 게스트 사용자를 위해 템플릿이 선택되었는지 확인(게스트 사용자를 테스트하는 경우)

CE 1.9.1에서 이 스크린샷을 찍었지만 EE에서도 설정이 비슷할 것입니다.사용 중인 Magento EE 버전은 이러한 설정을 올바르게 구성하고 사용자 정의 관찰자를 구현하는 한 새로운 대기열 시스템을 활용하지 않습니다. 이 블로그 게시물의 코드와 유사합니다., 인보이스 이메일이 전송되어야 합니다.

핵심은 사용자 정의 모듈에 관찰자를 연결하도록 하는 것입니다. sales_order_invoice_save_after 이벤트 - 청구서를 저장한 후 청구서 내용을 쿼리하고 이메일을 보낼 수 있습니다.

* 중요 참고 사항 *

귀하의 목표가 @xinqiu와 같이 일반적인 제품과 마찬가지로 Zero Subtotal Checkout Invoices에서 다운로드 가능한 제품에 이 기능을 적용하도록 하는 것이라면 댓글에 언급된, 아마도 관찰자를 연결해야 할 것입니다. sales_order_invoice_save_commit_after 대신 이벤트.

언제 sales_order_invoice_save_after 실행되면 구매한 다운로드 가능한 제품 링크의 세부 정보가 포함된 쓰기 작업이 아직 데이터베이스에 저장되지 않았습니다. 다른 주문/송장 및 기타 품목 정보가 저장되었을 수도 있습니다.

직접적인 경험이 없는 영역이지만, 데이터베이스 수준에서 오류가 발생하고 트랜잭션이 MySQL에 의해 롤백되면 고유한 다운로드 가능한 제품 링크를 위해 원래 생성된 URL이 다시 생성된다는 것을 알고 있습니다. Magento가 저장/커밋 작업을 재시도할 때

더 간결하게 말하면 고유 URL이 데이터베이스에 안전하게 유지되었고 DB 트랜잭션에서 성공적으로 커밋되었는지 알 수 없습니다. sales_order_invoice_save_commit_after 이벤트가 발생합니다(총액, 주문/송장 번호 등과 같은 다른 상위 수준 주문 세부 정보가 이미 MySQL에 커밋된 경우에도...)

아직 직접 시도해 볼 기회는 없었지만 그 전략의 논리에서 결함을 찾을 수 없는 것 같습니다. 내가 선호하는).나는 당신이 조금 파고 실험한 후에 그것을 확인할 수 있을 것이라고 생각합니다. - 간단히 스스로 실험할 때 나는 사용하는 것이 더 신중할 것이라고 느꼈다고 고백해야 합니다. sales_order_invoice_save_commit_after...

...Magento 스토어에서 어떤 종류의 제품을 다루고 있는지에 관계없이...전체 Magento 주문/인보이스 발행 워크플로의 (나중에) 순서를 고려하면 최소한 이 시점에서는 모든 관련 제품이 주문 및 광고 항목 세부정보가 저장되었고 일종의 예외가 생성되었으며 적절하게 롤백 및 재시도되었거나 정상적으로 예상한 대로 작동했습니다.

송장 이메일을 생성하는 데 사용하는 템플릿에 다운로드 가능한 제품에 대한 링크를 포함시키려면 아래에 첨부할 코드를 수정해야 합니다. sales_order_invoice_save_commit_after 그러면 주문 및 다운로드 가능한 제품에 대한 모든 관련 정보가 데이터베이스에 저장되고 트랜잭션에 커밋됩니다(가능한 경우).

왜 사용하는지 알 수 없습니다 sales_order_invoice_save_commit_after 다른 문제가 발생할 수 있습니다. 하지만 제가 직접 해본 적이 없다는 주의 사항과 아래에 제공하는 코드는 여러 번 성공적으로 사용했기 때문에 틀렸을 수도 있습니다 & "마일리지가 다를 수 있습니다."

* 중요 참고 사항 *

해당 예제의 모듈 코드는 매우 간단합니다.기본적으로 송장 이메일 보내기 기능은 고객에게 송장 이메일을 수동으로 보내기 위해 관리 인터페이스에서 버튼을 클릭할 때 $0.00 송장에 대해서만 실행됩니다(총액 < 0인 경우 자동으로 전송됩니다).

위 코드는 버튼과 동일한 논리를 실행하지만 이벤트가 관찰자를 트리거할 때 트리거됩니다.솔루션은 3가지 기본 구성요소입니다.

모듈 config.xml :

<config>
  <modules>
    <Havsund_Autoorder>
      <version>1.0.0</version>
    </Havsund_Autoorder>
  </modules>
  <global>
  <events>
    <sales_order_invoice_save_after>
      <observers>
        <havsund_autoorder_observer>
          <type>singleton</type>
          <class>Havsund_Autoorder_Model_Observer</class>
          <method>automaticallyInvoiceShipCompleteOrder</method>
        </havsund_autoorder_observer>
       </observers>
     </sales_order_invoice_save_after>
    </events>
  </global>
</config>

관찰자 코드:

class Havsund_Autoorder_Model_Observer
{

/* @var Magento_Sales_Model_Order_Invoice */
var $_invoice;

/**
* Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
* protected $_eventPrefix = 'sales_order';
* protected $_eventObject = 'order';
* event: sales_order_save_after
*/
public function automaticallyInvoiceShipCompleteOrder($observer)
{
   try {
      /* @var $order Magento_Sales_Model_Order_Invoice */
      $this->_invoice = $observer->getEvent()->getInvoice();
      $this->_invoice->sendEmail();

   } catch (Mage_Core_Exception $e) {
       Mage::log("HAVSUND AUTOORDER: Fehler #58 " . $e->getMessage());
   }

   return $this;
}

}

모듈 활성화 구성:

<?xml version="1.0"?>
  <config>
    <modules>
      <Havsund_Autoorder>
        <active>true</active>
        <version>1.0.0</version>
        <codePool>local</codePool>
        <depends>
        </depends>
      </Havsund_Autoorder>
    </modules>
   </config>

메모:컴파일을 활성화한 경우 실행하려면 사용자 지정을 배포한 후 비활성화하거나 다시 컴파일해야 합니다. 오류가 발생할 수 있습니다 좋다:

Warning: get_class() expects parameter 1 to be object, boolean given in /app/code/core/Mage/Core/Model/App.php on line 1340

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top