条纹付款上未调用woocommerce_order_status_completed

时间:2019-02-16 02:16:53

标签: php stripe-payments hook-woocommerce

我已经编写了一个自定义插件,并且该插件的一部分使用“ woocommerce_order_status_completed”钩子为:

add_action( 'woocommerce_order_status_completed', 'mmd_woointerface_order_complete', 1);
mmd_woointerface_order_complete($order)
{
 //print to log file here
}

我正在使用条纹支付系统,并检查并仔细检查了API密钥,并根据woocommerce插件的建议定义了Webhook端点。

  1. 我尝试进行购买,系统似乎正确响应,订单显示在我网站的后端。
  2. 我尝试过使用测试条后端发送测试webhooks。

这些选项均不会导致执行 mmd_woointerface_order_complete 操作。我的自定义呼叫永远不会启动。我错过了什么吗?

有人能与Stripe合作吗?需要帮助。

1 个答案:

答案 0 :(得分:0)

问题已解决! 如果您使用Stripe并希望编写在付款时被调用的代码。 woocommerce条形插件具有一个完整的其他动作挂钩sdk。

您可以在此处找到呼叫的链接: https://docs.woocommerce.com/document/stripe/#section-13

最有效但与标准woocommerce挂钩不同的是 “ wc_gateway_stripe_process_response($ stripe_response,$ order)”

您将需要检查$ stripe-response变量,该变量被分配了以下字符串值之一:“成功”,“失败”,“待定”和“保留”

这是我编写的代码,效果非常好。

function ProcessStripePayment($stripe_response, $order)
  {
    switch($stripe_response->status)
    {
    case 'succeeded';
       DebugLog('wc_gateway_stripe_process_payment HOOK FIRED  succeeded'); 
    break;

    case 'failed';
     DebugLog('wc_gateway_stripe_process_payment HOOK FIRED - failed'); 
    break;

    case 'pending';
        DebugLog('wc_gateway_stripe_process_payment HOOK FIRED - pending'); 
    break;

    case 'on-hold';
       DebugLog('wc_gateway_stripe_process_payment HOOK FIRED - on-hold');  
    break;          
    }   
  }

到目前为止,另一个相当大的陷阱是,这在插件中不起作用。您必须将其放在function.php中,或者我使用了一个名为片段的插件。这样就可以了。

您需要编写的其余代码是类结构的一部分。

$order               = new WC_Order( $order_id ); 

相当简单,直到您进入woocommerce结帐字段使用的Meta_data。为此可行:

foreach($MetaData as $SubRow)
 {
 switch($SubRow->key)
   {
    case 'Your Custom Field Name':
    break;
   } // switch($SubRow->key) 

DebugLog($SubRow->key); 
DebugLog($SubRow->value);       
}   // foreach($MetaData as $SubRow)