Я пытаюсь написать некоторую функциональность, чтобы более разумно управлять тем, как WooCommerce обрабатывает неудачные веб-хуки. В настоящее время он просто отключает webhook после 5 неудачных попыток. Я пытаюсь сделать так, чтобы он делал попытки в постепенно увеличивающихся временных интервалах, пока он либо не преуспеет, либо окончательно потерпит неудачу после того, как временной интервал достигнет одного дня (86400).
Проблема в том, что я не могу найти способ поймать проваленный веб-крючок. Я пытаюсь получить код ответа и идентификатор webhook из хука woocommerce_webhook_delivery
, как определено в WC_Webhook::deliver()
в источнике WC. Проблема в том, что ... несмотря на то, что мои тестовые веб-заезды WC запускаются и доставляются нормально, я никогда не могу обнаружить, что этот метод работает, хотя все методы, отвечающие за доставку веб-хуков, ссылаются на него. Я попробовал XDebug, вставив туда error_logs, если они работали в фоновом режиме. Все еще нет игры в кости. Поэтому моя идея поймать woocommerce_webhook_delivery
не работает, и я действительно не знаю другого, более простого способа.
Вот небольшой код, который у меня есть на данный момент, если я могу обнаружить код ответа, я могу справиться с остальными ....
WC_WebhookBackoff {
protected $webhook;
protected $webhook_id;
public function __construct() {
add_action('woocommerce_webhook_delivery', [$this, 'catch_webhook_failure'], 1, 5);
}
public function hooks() {
}
public function catch_webhook_failure($http_args, $response, $duration, $arg, $id) {
$failed_hooks = get_option( '_failed_wc_webhooks', true ) ? json_decode(get_option( '_wds_failed_wc_webhooks', true ) ) : [];
error_log("This should be called.");
if ( 200 !== $response ) {
$failed_hooks = [];
$this->update_failed_hooks();
}
}
[...snip...]
И да, это определенно создается, и крюк определенно регистрируется.
Для справки вот крючок, на который я смотрю:
do_action( 'woocommerce_webhook_delivery', $http_args, $response, $duration, $arg, $this->get_id() );
Любая помощь очень ценится.