CRM-11338 retrieve fee_amount from paypal
authoreileenmcnaugton <eileen@fuzion.co.nz>
Sun, 23 Aug 2015 20:49:22 +0000 (08:49 +1200)
committereileenmcnaugton <eileen@fuzion.co.nz>
Sat, 26 Sep 2015 02:31:59 +0000 (14:31 +1200)
CRM/Core/Payment.php
CRM/Core/Payment/PayPalImpl.php

index 3a45446495579baa04ef1c631ff78d2b87a623e9..7d44af4d394c74cbef133243466e5eb71da9b552 100644 (file)
@@ -537,6 +537,24 @@ abstract class CRM_Core_Payment {
     return $result;
   }
 
+  /**
+   * Query payment processor for details about a transaction.
+   *
+   * @param array $params
+   *   Array of parameters containing one of:
+   *   - trxn_id Id of an individual transaction.
+   *   - processor_id Id of a recurring contribution series as stored in the civicrm_contribution_recur table.
+   *
+   * @return array
+   *   Extra parameters retrieved.
+   *   Any parameters retrievable through this should be documented in the function comments at
+   *   CRM_Core_Payment::doQuery. Currently:
+   *   - fee_amount Amount of fee paid
+   */
+  public function doQuery($params) {
+    return array();
+  }
+
   /**
    * This function checks to see if we have the right config values.
    *
index 28ba5849bdb23b59b7a96bbe97fe3bb949146544..cf8337e00b346fa3e60659b74ef52f9cdfcb7fb0 100644 (file)
@@ -392,9 +392,42 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
 
     $params['trxn_id'] = CRM_Utils_Array::value('transactionid', $result);
     $params['gross_amount'] = CRM_Utils_Array::value('amt', $result);
+    $params = array_merge($params, $this->doQuery($params));
     return $params;
   }
 
+  /**
+   * Query payment processor for details about a transaction.
+   *
+   * For paypal see : https://developer.paypal.com/webapps/developer/docs/classic/api/merchant/GetTransactionDetails_API_Operation_NVP/
+   *
+   * @param array $params
+   *   Array of parameters containing one of:
+   *   - trxn_id Id of an individual transaction.
+   *   - processor_id Id of a recurring contribution series as stored in the civicrm_contribution_recur table.
+   *
+   * @return array
+   *   Extra parameters retrieved.
+   *   Any parameters retrievable through this should be documented in the function comments at
+   *   CRM_Core_Payment::doQuery. Currently
+   *   - fee_amount Amount of fee paid
+   *
+   * @throws \Civi\Payment\Exception\PaymentProcessorException
+   */
+  public function doQuery($params) {
+    if (empty($params['trxn_id'])) {
+      throw new \Civi\Payment\Exception\PaymentProcessorException('transaction id not set');
+    }
+    $args = array(
+      'TRANSACTIONID' => $params['trxn_id'],
+    );
+    $this->initialize($args, 'GetTransactionDetails');
+    $result = $this->invokeAPI($args);
+    return array(
+      'fee_amount' => $result['feeamt'],
+    );
+  }
+
   /**
    * This function checks to see if we have the right config values.
    *