74 lines
2.3 KiB
PHP
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 );
|
|
}
|
|
}
|