Я пытаюсь написать некоторые функции для более разумного управления тем, как WooCommerce обрабатывает неудачные веб-перехватчики. В настоящее время он просто отключает веб-хук после 5 неудачных попыток. Я пытаюсь сделать так, чтобы он делал попытки с постепенно увеличивающимися временными интервалами, пока он либо не преуспеет, либо, наконец, не завершится неудачей после того, как временной интервал достигнет одного дня (86400).
Проблема в том, что я не могу найти способ поймать неудачный веб-хук. Я пытаюсь получить код ответа и идентификатор веб-хука из хука 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() );
Любая помощь приветствуется.