if ( ! defined( 'ABSPATH' ) ) {
class PayPal_Payment_Details {
public $billing_agreement_id = false;
public $redirect_required = false;
public $redirect_requested = false;
public $payments = false;
public $shipping_option_details = false;
public function loadFromDoECResponse( $doECResponse ) {
'BILLINGAGREEMENTID' => 'billing_agreement_id',
'REDIRECTREQUIRED' => 'redirect_required',
'SUCCESSPAGEREDIRECTREQUESTED' => 'redirect_requested',
foreach ( $doECResponse as $index => $value ) {
if ( array_key_exists( $index, $map ) ) {
if ( preg_match( '/^PAYMENTINFO_(\d)_(TRANSACTIONID|EBAYITEMAUCTIONTXNID|PARENTTRANSACTIONID|RECEIPTID|TRANSACTIONTYPE|PAYMENTTYPE|EXPECTEDECHECKCLEARDATE|ORDERTIME|AMT|CURRENCYCODE|FEEAMT|SETTLEAMT|TAXAMT|EXCHANGERATE|PAYMENTSTATUS|PENDINGREASON|REASONCODE|HOLDDECISION|SHIPPINGMETHOD|PROTECTIONELIGIBILITY|PROTECTIONELIGIBILITYTYPE|RECEIPTREFERENCENUMBER|SHIPPINGAMT|HANDLINGAMT|PAYMENTREQUESTID|INSTRUMENTCATEGORY|INSTRUMENTID|OFFERCODE|OFFERTRACKINGID|SHORTMESSAGE|LONGMESSAGE|ERRORCODE|SEVERITYCODE|ACK|SELLERPAYPALACCOUNTID|SECUREMERCHANTACCOUNTID|SELLERID|SELLERUSERNAME|SELLERREGISTRATIONDATE)$/', $index, $matches ) ) {
if ( $matches[1] > $max_payment_num ) {
$max_payment_num = $matches[1];
if ( $max_payment_num >= 0 ) {
$this->payments = array();
for ( $i = 0; $i <= $max_payment_num; $i++ ) {
$this->payments[ $i ] = new PayPal_Payment_Payment_Details();
$this->payments[ $i ]->loadFromDoECResponse( $doECResponse, $i );
$this->shipping_option_details = new PayPal_Payment_Shipping_Option_Details();
if ( ! $this->shipping_option_details->loadFromDoECResponse( $doECResponse ) ) {
$this->shipping_option_details = false;
class PayPal_Payment_Payment_FMF_Details {
public function loadFromDoECResponse( $doECResponse, $bucketNum ) {
foreach ( $doECResponse as $index => $value ) {
if ( preg_match( '/^L_PAYMENTINFO_' . $bucketNum . '_FMF(PENDING|REPORT|DENY|ACCEPT)(ID|NAME)(\d+)$/', $index, $matches ) ) {
if ( $matches[3] > $max_filter_num[ $matches[1] ] ) {
$max_filter_num[ $matches[1] ] = $matches[3];
$this->filters = array();
foreach ( $max_filter_num as $index => $value ) {
for ( $i = 0; $i <= $value; $i++ ) {
$prefix = 'L_PAYMENTINFO_' . $bucketNum . '_FMF' . $index;
if ( array_key_exists( $prefix . 'NAME' . $i, $doECResponse ) && array_key_exists( $prefix . 'ID' . $i, $doECResponse ) ) {