【问题标题】:WooCommerce hook for "after payment complete" actions用于“付款完成后”操作的 WooCommerce 钩子
【发布时间】:2015-03-28 21:46:06
【问题描述】:

我正在使用 WooCommerce 和 Wordpress。我有一个自定义许可证密钥生成器,当有人通过 WooCommerce 成功购买我的插件时,我希望它生成一个许可证密钥。

看起来很简单:

  1. 用户在我的网站上完成结帐
  2. 用户被重定向到 Paypal,并在其中输入付款凭据
  3. Paypal 告诉我的网站付款已完成
  4. 我加入某种“付款完成”或“order_complete”WooCommerce 操作并生成许可证。

这就是问题所在:我真的不确定哪种钩子能很好地解决这个问题。 Woocommerce 在他们的网站上列出了他们的entire collection of hooks,但几乎没有关于哪个有什么好处的文档。

仅基于钩子名称,我认为woocommerce_payment_complete 将是一个很好的操作。不幸的是,它似乎根本没有被解雇。我读过的一些地方说它从未被解雇过。

我也读过一些关于 Paypal IPN 的文章,但我不明白我如何才能从其中挂钩通知(这是否连接到 Woocommerce 挂钩?)

简而言之,我想在验证付款后立即生成许可证密钥。为了实现这一目标,我应该加入什么?

【问题讨论】:

    标签: php wordpress paypal woocommerce


    【解决方案1】:

    好的,我想出了几个可能的解决方案。

    处理支付验证

    WooCommerce 的 Paypal 标准网关实际上内置了对 Paypal 的 IPN 服务的支持。无论您选择哪种“挂钩”路线,您都需要使用它。

    如何设置 PAYPAL IPN

    Paypal IPN 连接到收款人帐户。例如,如果您通过 myemail@gmail.com 获得付款,那么您需要使用该帐户设置 IPN。所有 IPN 是,Paypal 是否发送“付款完成!” (各种)通知您选择的 URL。为了选择您希望 Paypal 发送通知的 URL,您需要执行以下步骤:

    1. 登录支付宝
    2. 点击右上角的小脸图标
    3. 点击“配置文件和设置”
    4. 点击左侧边栏中的“我的销售工具”
    5. 找到“即时付款通知”并点击“更新”
    6. 启用它们并设置 URL。您的 WooCommerce Paypal Payments Standard 网关网址为:http://yoursite.com/?wc-api=WC_Gateway_Paypal(在 WooCommerce 的Paypal Standard documentation 中注明)。
    7. 保存您的设置

    付款完成后,您的 WooCommerce 安装现在将收到 Paypal 的消息。哦,顺便说一句,请确保:

    • 您在 Paypal 设置中的“收款人电子邮件”是正确的
    • 您的服务器上启用了 fsockopen(您可以在 WooCommerce 设置中检查此“系统状态”)

    现在让我们开始工作

    选项 1:自动完成已完成付款的订单并连接到 woocommerce_order_status_completed 以执行您的特殊操作/功能

    为了让您的产品在验证付款后自动完成,您只需安装 Mirko Grewing 的绝妙WooCommerce Autocomplete Order 插件。请务必设置正确的设置(将显示在 WooCommerce 设置中的“Woo Extra Options”选项卡下)。

    现在您的订单会在付款得到验证后自动完成,您可以简单地挂接到您的完成挂钩 `woocommerce_order_status_completed,以获得您的特殊功能。

    该方法的好处是,如果允许您按已完成的任何顺序进行挂钩,无论您是手动完成还是自动完成。换句话说,它用途广泛。

    选项 2:连接到 woocommerce_payment_complete_order_status 过滤器,表示付款成功。

    我想这是不言自明的。这种方法的好处是它几乎是整个过程的第一步,并且发生在上面的完成钩子之前(如果您适当地设置了优先级)。

    我不知道一个是否比另一个更好,但它们似乎都实现了我的目标:在验证付款后执行操作。

    【讨论】:

    • Pete,你是从这个钩子中获取 OrderID 吗?我没有得到任何数据。发布的内容是 {"action":"woocommerce_payment_complete_order_status","arg":"processing"}
    • @PonSaravanan:woocommerce_payment_complete_order_status 过滤器有两个参数。第一个是订单状态,第二个是订单id。或者,您可以使用仅提供订单 ID 的 woocommerce_payment_complete 操作。
    • 对Paypal的依赖意味着任何其他支付方式都不会生成License,这是非常有限的。此外,对另一个插件的依赖会导致另一个可能的故障点。为什么不使用基本的 woocommerce 挂钩 woocommerce_payment_complete?这样,如果您需要手动批准付款(例如电汇或现金),您的系统仍然可以工作。见:stackoverflow.com/a/33821379/552983
    • 嗯...这不依赖于 Paypal。 :-) 这仅查看订单何时收到“完成”订单状态。这意味着它也适用于手动完成的订单(我的帖子中甚至有一行说“该方法的好处是,如果允许您挂钩任何已完成的订单 - 无论您是否手动完成它或它是自动完成的”)。额外的自动完成插件只是消除了在您收到付款时必须手动完成订单的步骤。
    【解决方案2】:

    woocommerce_payment_complete_order_status 也会在付款被取消时触发。我刚刚在 Woocommerce 3.1.2 上使用 Paypal 作为网关进行了测试。

    动作woocommerce_payment_complete似乎只有在支付成功时才会触发。

    【讨论】:

    • 确认了吗?或者这会触发失败的状态吗?
    【解决方案3】:

    woocommerce_payment_complete 挂钩仅对具有以下状态之一的订单激活:

    • 暂停
    • 待定
    • 失败
    • 已取消

    钩子:woocommerce_valid_order_statuses_for_payment_complete

    如果您更改订单状态 (带有自定义订单状态) 在付款完成之前(例如使用woocommerce_new_order 挂钩,在创建订单之后但在付款之前)您应该通过 woocommerce_valid_order_statuses_for_payment_complete 挂钩添加新状态。

    例如:

    add_filter( 'woocommerce_valid_order_statuses_for_payment_complete', 'add_woocommerce_valid_order_statuses_for_payment_complete', 10, 2 );
    function add_woocommerce_valid_order_statuses_for_payment_complete( $statuses, $order ) {
        $statuses[] = 'processing';
        return $statuses;
    }
    

    钩子:woocommerce_pre_payment_complete

    或者,您可以使用woocommerce_pre_payment_complete 钩子,它在付款完成但在保存订单之前激活(不像woocommerce_payment_complete 在保存订单后激活)

    woocommerce_pre_payment_complete 挂钩将始终在之后激活 无论订单状态如何,都已完成付款。

    【讨论】:

      猜你喜欢
      • 2016-02-22
      • 2020-03-15
      • 2017-10-10
      • 2023-04-01
      • 1970-01-01
      • 2016-06-11
      • 2019-08-29
      • 2020-11-18
      • 1970-01-01
      相关资源
      最近更新 更多