Merge pull request #13365 from mattwire/caseformatcustomdata
[civicrm-core.git] / api / v3 / PaymentProcessor.php
index 5faa1318f4786a0f868cfd422abe185d14a8dddb..5cd0195f0949ca012c5efcfaec49ad5a92996639 100644 (file)
@@ -93,7 +93,6 @@ function civicrm_api3_payment_processor_get($params) {
   return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
-
 /**
  * Set default getlist parameters.
  *
@@ -115,3 +114,86 @@ function _civicrm_api3_payment_processor_getlist_defaults(&$request) {
     ],
   ];
 }
+
+/**
+ * Action payment.
+ *
+ * @param array $params
+ *
+ * @return array
+ *   API result array.
+ *
+ * @throws \API_Exception
+ */
+function civicrm_api3_payment_processor_pay($params) {
+  $processor = Civi\Payment\System::singleton()->getById($params['payment_processor_id']);
+  $processor->setPaymentProcessor(civicrm_api3('PaymentProcessor', 'getsingle', ['id' => $params['payment_processor_id']]));
+  try {
+    $result = $processor->doPayment($params);
+  }
+  catch (\Civi\Payment\Exception\PaymentProcessorException $e) {
+    $code = $e->getErrorCode();
+    $errorData = $e->getErrorData();
+    if (empty($code)) {
+      $code = 'EXTERNAL_FAILURE';
+    }
+    throw new API_Exception('Payment failed', $code, $errorData, $e);
+  }
+  return civicrm_api3_create_success(array($result), $params);
+}
+
+/**
+ * Action payment.
+ *
+ * @param array $params
+ */
+function _civicrm_api3_payment_processor_pay_spec(&$params) {
+  $params['payment_processor_id'] = [
+    'api.required' => 1,
+    'title' => ts('Payment processor'),
+    'type' => CRM_Utils_Type::T_INT,
+  ];
+  $params['amount'] = [
+    'api.required' => TRUE,
+    'title' => ts('Amount to pay'),
+    'type' => CRM_Utils_Type::T_MONEY,
+  ];
+}
+
+/**
+ * Action refund.
+ *
+ * @param array $params
+ *
+ * @return array
+ *   API result array.
+ * @throws CiviCRM_API3_Exception
+ */
+function civicrm_api3_payment_processor_refund($params) {
+  $processor = Civi\Payment\System::singleton()->getById($params['payment_processor_id']);
+  $processor->setPaymentProcessor(civicrm_api3('PaymentProcessor', 'getsingle', array('id' => $params['payment_processor_id'])));
+  if (!$processor->supportsRefund()) {
+    throw API_Exception('Payment Processor does not support refund');
+  }
+  $result = $processor->doRefund($params);
+  return civicrm_api3_create_success(array($result), $params);
+}
+
+/**
+ * Action Refund.
+ *
+ * @param array $params
+ *
+ */
+function _civicrm_api3_payment_processor_refund_spec(&$params) {
+  $params['payment_processor_id'] = [
+    'api.required' => 1,
+    'title' => ts('Payment processor'),
+    'type' => CRM_Utils_Type::T_INT,
+  ];
+  $params['amount'] = [
+    'api.required' => TRUE,
+    'title' => ts('Amount to refund'),
+    'type' => CRM_Utils_Type::T_MONEY,
+  ];
+}