Automattic\WooCommerce\Internal\Orders

PaymentInfo::get_wcpay_card_info()private staticWC 1.0

Get info about the card used for payment on an order, when the payment gateway is WooPayments.

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

Хуков нет.

Возвращает

Массив.

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

$result = PaymentInfo::get_wcpay_card_info( $order ): array;
$order(WC_Abstract_Order) (обязательный)
The order in question.

Заметки

Код PaymentInfo::get_wcpay_card_info() WC 9.5.1

private static function get_wcpay_card_info( WC_Abstract_Order $order ): array {
	if ( 'woocommerce_payments' !== $order->get_payment_method() ) {
		return array();
	}

	// For testing purposes: if WooCommerce Payments development mode is enabled, an order meta item with
	// key '_wcpay_payment_details' will be used if it exists as a replacement for the call to the Stripe
	// API's 'get intent' endpoint. The value must be the JSON encoding of an array simulating the
	// "payment_details" part of the response from the endpoint.
	$stored_payment_details = Constants::get_constant( 'WCPAY_DEV_MODE' ) ? $order->get_meta( '_wcpay_payment_details' ) : '';
	$payment_details        = json_decode( $stored_payment_details, true );

	if ( ! $payment_details ) {
		if ( ! class_exists( \WC_Payments::class ) ) {
			return array();
		}

		$payment_method_id = $order->get_meta( '_payment_method_id' );
		if ( ! $payment_method_id ) {
			return array();
		}

		try {
			$payment_details = \WC_Payments::get_payments_api_client()->get_payment_method( $payment_method_id );
		} catch ( \Throwable $ex ) {
			$order_id = $order->get_id();
			$message  = $ex->getMessage();
			wc_get_logger()->error(
				sprintf(
					'%s - retrieving info for payment method %s for order %s: %s',
					StringUtil::class_name_without_namespace( static::class ),
					$payment_method_id,
					$order_id,
					$message
				),
				array(
					'source' => 'payment-info',
				)
			);

			return array();
		}
	}

	$card_info = array();

	if ( isset( $payment_details['type'], $payment_details[ $payment_details['type'] ] ) ) {
		$details = $payment_details[ $payment_details['type'] ];
		switch ( $payment_details['type'] ) {
			case 'card':
			default:
				$card_info['brand'] = $details['brand'] ?? '';
				$card_info['last4'] = $details['last4'] ?? '';
				break;
			case 'card_present':
			case 'interac_present':
				$card_info['brand']        = $details['brand'] ?? '';
				$card_info['last4']        = $details['last4'] ?? '';
				$card_info['account_type'] = $details['receipt']['account_type'] ?? '';
				$card_info['aid']          = $details['receipt']['dedicated_file_name'] ?? '';
				$card_info['app_name']     = $details['receipt']['application_preferred_name'] ?? '';
				break;
		}
	}

	return array_map( 'sanitize_text_field', $card_info );
}