Files
carpseeds.pl/wp-content/plugins/woocommerce-gateway-paypal-express-checkout/includes/exceptions/class-wc-gateway-ppec-api-exception.php
2024-07-15 11:28:08 +02:00

74 lines
2.3 KiB
PHP

<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* PayPal API Exception.
*/
class PayPal_API_Exception extends Exception {
/**
* List of errors from PayPal API.
*
* @var array
*/
public $errors;
/**
* Unique identifier of PayPal transaction.
*
* This identifies the PayPal application that processed the request and
* must be provided to Merchant Technical Support if you need their assistance
* with a specific transaction.
*
* @var string
*/
public $correlation_id;
/**
* Constructor.
*
* This constructor takes the API response received from PayPal, parses out the
* errors in the response, then places those errors into the $errors property.
* It also captures correlation ID and places that in the $correlation_id property.
*
* @param array $response Response from PayPal API
*/
public function __construct( $response ) {
parent::__construct( __( 'An error occurred while calling the PayPal API.', 'woocommerce-gateway-paypal-express-checkout' ) );
$errors = array();
foreach ( $response as $index => $value ) {
if ( preg_match( '/^L_ERRORCODE(\d+)$/', $index, $matches ) ) {
$errors[ $matches[1] ]['code'] = $value;
} elseif ( preg_match( '/^L_SHORTMESSAGE(\d+)$/', $index, $matches ) ) {
$errors[ $matches[1] ]['message'] = $value;
} elseif ( preg_match( '/^L_LONGMESSAGE(\d+)$/', $index, $matches ) ) {
$errors[ $matches[1] ]['long'] = $value;
} elseif ( preg_match( '/^L_SEVERITYCODE(\d+)$/', $index, $matches ) ) {
$errors[ $matches[1] ]['severity'] = $value;
} elseif ( 'CORRELATIONID' == $index ) {
$this->correlation_id = $value;
}
}
$this->errors = array();
$error_messages = array();
foreach ( $errors as $value ) {
$error = new PayPal_API_Error( $value['code'], $value['message'], $value['long'], $value['severity'] );
$this->errors[] = $error;
/* translators: placeholders are error code and message from PayPal */
$error_messages[] = sprintf( __( 'PayPal error (%1$s): %2$s', 'woocommerce-gateway-paypal-express-checkout' ), $error->error_code, $error->maptoBuyerFriendlyError() );
}
if ( empty( $error_messages ) ) {
$error_messages[] = __( 'An error occurred while calling the PayPal API.', 'woocommerce-gateway-paypal-express-checkout' );
}
$this->message = implode( PHP_EOL, $error_messages );
}
}