"after payment complete" 操作的 WooCommerce 挂钩

WooCommerce hook for "after payment complete" actions

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

看起来很简单:

  1. 用户在我的网站上完成结帐
  2. 用户被重定向到 Paypal,他们在那里输入他们的支付凭据
  3. Paypal 告诉我的网站付款已完成
  4. 我连接到某种 "payment complete" 或 "order_complete" WooCommerce 操作并生成许可证。

问题是:我真的不确定哪个钩子适合这个。 Woocommerce 在他们的网站上列出了他们的 entire collection of hooks,但几乎没有关于哪个有用的文档。

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

我也读过一些有关 Paypal IPN 的内容,但我不明白我如何才能从中连接到通知(它是否连接到 Woocommerce 挂钩?)

简而言之,我想在验证付款后立即生成许可证密钥。为了实现这一点,我需要连接什么?

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

处理付款验证

WooCommerce 的 Paypal 标准网关实际上内置了对 Paypal 的 IPN 服务的支持。无论您选择 'hook' 路线如何,您都需要使用它。

如何设置 PAYPAL IPN

Paypal IPN 连接到收款账户。例如,如果您通过 myemail@gmail.com 收到付款,则您需要使用该帐户设置 IPN。所有 IPN 都是 Paypal 向您选择的 URL 发送 "Payment Complete!"(某种)通知。为了选择您希望 Paypal 将通知发送到的 url,您需要执行以下步骤:

  1. 登录贝宝
  2. 点击右上角的小脸图标
  3. 点击"Profile and settings"
  4. 点击左侧边栏中的"My selling tools"
  5. 找到 "Instant payment notifications" 并单击 "Update"
  6. 启用它们并设置 url。您的 WooCommerce Paypal 支付标准网关 url 是:http://yoursite.com/?wc-api=WC_Gateway_Paypal (which is noted in WooCommerce's Paypal Standard documentation).
  7. 保存您的设置

付款完成后,您的 WooCommerce 安装现在会收到来自 Paypal 的消息。哦,顺便说一下,确保:

  • 您在 Paypal 设置中的 "Receiver E-mail" 是正确的
  • fsockopen 在您的服务器上启用(您可以在您的 WooCommerce 设置中检查 "System Status")

现在让我们开始处理钩子

选项 1:自动完成已完成付款的订单并挂接到 woocommerce_order_status_completed 以获得您的特价 actions/functions

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

既然您的订单在验证付款时会自动完成,您只需连接到您的完成挂钩,`woocommerce_order_status_completed,以获得您的特殊功能。

该方法的好处是,如果允许您挂钩任何已完成的订单——无论您是手动完成还是自动完成。换句话说,它非常通用。

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

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

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

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

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

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 在保存订单后激活顺序).

The woocommerce_pre_payment_complete hook will always activate after a completed payment regardless of the order status.