Automattic\WooCommerce\Gateways\PayPal

WebhookHandler::process_payment_capture_pendingprivateWC 10.5.0

Process the PAYMENT.CAPTURE.PENDING webhook event.

Метод класса: WebhookHandler{}

Хуков нет.

Возвращает

null. Ничего (null).

Использование

// private - только в коде основоного (родительского) класса
$result = $this->process_payment_capture_pending( $event ): void;
$event(массив) (обязательный)
The webhook event data.

Список изменений

С версии 10.5.0 Введена.

Код WebhookHandler::process_payment_capture_pending() WC 11.0.1

private function process_payment_capture_pending( array $event ): void {
	$custom_id = $event['resource']['custom_id'] ?? '';
	$order     = PayPalHelper::get_wc_order_from_paypal_custom_id( $custom_id );
	if ( ! $order ) {
		\WC_Gateway_Paypal::log( 'Invalid order. Custom ID: ' . wc_print_r( $custom_id, true ) );
		return;
	}

	// Skip if the payment is already processed.
	if ( PayPalConstants::STATUS_COMPLETED === $order->get_meta( PayPalConstants::PAYPAL_ORDER_META_STATUS, true ) ) {
		return;
	}

	$transaction_id = $event['resource']['id'] ?? null;
	$status         = $event['resource']['status'] ?? null;
	$reason         = $event['resource']['status_details']['reason'] ?? 'Unknown';
	$order->set_transaction_id( $transaction_id );
	$order->update_meta_data( PayPalConstants::PAYPAL_ORDER_META_CAPTURE_ID, $transaction_id );
	$order->update_meta_data( PayPalConstants::PAYPAL_ORDER_META_STATUS, $status );
	/* translators: %s: reason */
	$order->update_status( OrderStatus::ON_HOLD, sprintf( __( 'Payment pending (reason: %s).', 'woocommerce' ), $reason ) );
	$order->save();
}