【问题标题】:auto invoice on email confirmation电子邮件确认自动发票
【发布时间】:2013-02-01 10:44:57
【问题描述】:

成功下订单后,我需要在 Magento 中以编程方式为某些产品类型的订单开具发票。这是针对虚拟礼品卡的,为了将礼品卡号码通过电子邮件发送出去,订单必须在管理后端开具发票。

我认为“虚拟商品”已经有了这样的功能,但我的产品类型是“礼品卡”,而不是“虚拟”,因此我必须自己做。

到目前为止,我已设法确保该产品只能单独订购,因此订单中不会混入任何实物产品。此外,我还能够在结账时检测到礼品卡,以隐藏任何非直接或不可靠的付款方式。

现在我所要做的就是添加一个观察者来检查订单状态更改为“已收到付款(在帐户中保留)”或只是从任何先前的订单状态中“收到付款”,例如“付款待处理”。只是 Magento 中没有这样的事件 - 至少据我通过搜索得知。

所以我想我会将自动发票代码连接到 Magento 发送订单确认电子邮件的位置 - 但我根本找不到那个位置。

关于我可以在哪里插入代码以自动为订单开票的任何建议?就收到的付款而言,最好尽可能“安全” - 但我会解决任何问题,并且总是可以手动返回并阻止与可疑欺诈和未收到付款的订单有关的礼品卡。

提前感谢您提供有关如何完成此操作的任何提示!

【问题讨论】:

  • 由于我还没有为正常订单开自动发票,我似乎无法使用:sales_order_payment_capturesales_order_payment_pay。但我可能正在做某事。通过使用事件sales_order_payment_place_end,我认为订单状态被正确设置为“新”的订单在我的后端获得状态“付款保留/已收到” - 根据此解释:blog.baobaz.com/en/tag/magento-state-and-status
  • 现在尝试使用事件sales_order_place_after 来获取订单对象。

标签: php magento checkout observers


【解决方案1】:

我认为最好的选择是观察事件sales_order_place_aftersales_order_payment_place_end,它们在下订单付款时被触发(see here)。 要 100% 确保向您的观察者添加一个代码,以检查到期订单是否为零 $order->getTotalDue() == 0

【讨论】:

  • 这就是我现在正在尝试的,但它似乎在真正下订单之前运行。如果我在观察者内部运行代码为订单开票,订单似乎直接从状态“处理”到状态“完成”,不确定我是否可以确信付款会通过。
  • 从商店的角度来看,这个逻辑是正确的 - 虚拟商品(例如礼品卡)不需要发货,因此一旦订单付款并开具发票,其状态就会更改为“完成” ”。您是否想避免这种状态更改,因为您无法确定付款是否通过?您的付款方式是否提供任何方法来确保这一点?
  • 当用户在第三方网站上用信用卡付款时,订单状态设置为processing,所以我需要等待它清除并且状态更改为@ 987654326@。我可以很容易地检查订单状态,但除非我可以在信用卡付款完成后将我的代码放在某个观察者中,否则我能做的就是打印错误并中止。您是否知道流程后期的任何事件,例如发送“订单完成”电子邮件时,或者可能在购物车/成功页面?一种解决方案是让我覆盖 core/Mage/Checkout/controllers/OnepageController.php 文件的successAction
  • 好吧,结帐成功操作确实会发送一个您可以使用的事件:checkout_onepage_controller_success_action - 此时会发送一封确认电子邮件并下订单。但是,我认为这并不能确保其他一些付款方式通过。例如,贝宝可能仍在审核中并最终失败。
  • checkout_onepage_controller_success_action 成功了! :D 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 2012-11-19
相关资源
最近更新 更多