ent->type;
$this->response = 'WPForms Square: ' . $this->event_type . ' event received.';
$processed = $this->process_event( $event );
$this->response_code = $processed ? 200 : 202;
$this->respond();
} catch ( Exception $e ) {
$this->response = $e->getMessage();
$this->response_code = $e instanceof BadMethodCallException ? 501 : 500;
$this->respond();
}
}
/**
* Get webhook signature.
*
* @since 1.9.5
*
* @throws RuntimeException When Square signature is not set.
*
* @return string
*/
private function get_webhook_signature(): string {
if ( ! isset( $_SERVER['HTTP_X_SQUARE_HMACSHA256_SIGNATURE'] ) ) {
throw new RuntimeException( 'Square signature is not set.' );
}
return sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_SQUARE_HMACSHA256_SIGNATURE'] ) );
}
/**
* Get webhook signing secret.
*
* @since 1.9.5
*
* @throws RuntimeException When webhook signing secret is not set.
*
* @return string
*/
private function get_webhook_signing_secret(): string {
$secret = wpforms_setting( 'square-webhooks-secret-' . Helpers::get_mode() );
if ( empty( $secret ) ) {
throw new RuntimeException( 'Webhook signing secret is not set.' );
}
return $secret;
}
/**
* Process Square event.
*
* @since 1.9.5
*
* @param object $event Square event.
*
* @return bool True if event has handling class, false otherwise.
*/
private function process_event( $event ): bool {
$webhooks = self::get_event_whitelist();
// Event can't be handled.
if ( ! isset( $webhooks[ $event->type ] ) || ! class_exists( $webhooks[ $event->type ] ) ) {
return false;
}
$handler = new $webhooks[ $event->type ]();
$handler->setup( $event );
return $handler->handle();
}
/**
* Get event allowlist.
*
* @since 1.9.5
*
* @return array
*/
private static function get_event_whitelist(): array {
return [
'refund.updated' => Webhooks\RefundUpdated::class,
'payment.updated' => Webhooks\PaymentUpdated::class,
'payment.created' => Webhooks\PaymentCreated::class,
'subscription.created' => Webhooks\SubscriptionCreated::class,
'subscription.updated' => Webhooks\SubscriptionUpdated::class,
];
}
/**
* Check if rest verification is requested.
*
* @since 1.9.5
*
* @return bool
*/
private function is_rest_verification(): bool {
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
return isset( $_GET['verify'] ) && $_GET['verify'] === '1';
}
/**
* Respond to the request.
*
* @since 1.9.5
*/
private function respond() {
$this->log_webhook();
wp_die( esc_html( $this->response ), '', (int) $this->response_code );
}
/**
* Log webhook request.
*
* @since 1.9.5
*/
private function log_webhook() {
// log only if WP_DEBUG_LOG and WPFORMS_WEBHOOKS_DEBUG are set to true.
if (
! defined( 'WPFORMS_WEBHOOKS_DEBUG' ) ||
! WPFORMS_WEBHOOKS_DEBUG ||
! defined( 'WP_DEBUG_LOG' ) ||
! WP_DEBUG_LOG
) {
return;
}
// If it is set to explicitly display logs on output, return: this would make response to Square malformed.
if ( defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY ) {
return;
}
$webhook_log = maybe_serialize(
[
'event_type' => $this->event_type,
'response_code' => $this->response_code,
'response' => $this->response,
'payload' => $this->payload,
]
);
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
error_log( $webhook_log );
}
/**
* Get a webhook events list.
*
* @since 1.9.5
*
* @return array
*/
public static function get_webhooks_events_list(): array {
return array_keys( self::get_event_whitelist() );
}
}
Fatal error: Uncaught Error: Class 'WPForms\Integrations\Square\Api\WebhookRoute' not found in /home/emdadcar/public_html/assets/plugins/wpforms-lite/src/Integrations/Square/Square.php:257
Stack trace:
#0 /home/emdadcar/public_html/assets/plugins/wpforms-lite/src/Integrations/Square/Square.php(87): WPForms\Integrations\Square\Square->load_webhooks()
#1 /home/emdadcar/public_html/assets/plugins/wpforms-lite/src/Integrations/Loader.php(96): WPForms\Integrations\Square\Square->load()
#2 /home/emdadcar/public_html/assets/plugins/wpforms-lite/src/Integrations/Loader.php(81): WPForms\Integrations\Loader->load_integration(Object(WPForms\Integrations\Square\Square))
#3 /home/emdadcar/public_html/assets/plugins/wpforms-lite/src/Integrations/Loader.php(22): WPForms\Integrations\Loader->__construct()
#4 /home/emdadcar/public_html/wp-includes/class-wp-hook.php(353): WPForms\Integrations\Loader::get_instance('')
#5 /home/emdadcar/public_html/wp-includes/class-wp-hook.php(377): WP_Hook->apply_filters(Object(WPForms\Providers\Providers) in /home/emdadcar/public_html/assets/plugins/wpforms-lite/src/Integrations/Square/Square.php on line 257