Merge pull request #15611 from seamuslee001/ref_deleteentry_ussage
[civicrm-core.git] / api / v3 / PaymentProcessor.php
index 5faa1318f4786a0f868cfd422abe185d14a8dddb..435fd97e977ea7779ec1167afe0c86e509f1fb6a 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,90 @@ 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 \API_Exception
+ * @throws \CiviCRM_API3_Exception
+ * @throws \Civi\Payment\Exception\PaymentProcessorException
+ */
+function civicrm_api3_payment_processor_refund($params) {
+  /** @var \CRM_Core_Payment $processor */
+  $processor = Civi\Payment\System::singleton()->getById($params['payment_processor_id']);
+  $processor->setPaymentProcessor(civicrm_api3('PaymentProcessor', 'getsingle', ['id' => $params['payment_processor_id']]));
+  if (!$processor->supportsRefund()) {
+    throw new API_Exception('Payment Processor does not support refund');
+  }
+  $result = $processor->doRefund($params);
+  return civicrm_api3_create_success([$result], $params);
+}
+
+/**
+ * Action Refund.
+ *
+ * @param array $params
+ *
+ */
+function _civicrm_api3_payment_processor_refund_spec(&$params) {
+  $params['payment_processor_id'] = [
+    'api.required' => TRUE,
+    '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,
+  ];
+}