*/
function civicrm_api3_payment_processor_create($params) {
if (empty($params['id']) && empty($params['payment_instrument_id'])) {
- $params['payment_instrument_id'] = civicrm_api3('PaymentProcessorType', 'getvalue', array(
+ $params['payment_instrument_id'] = civicrm_api3('PaymentProcessorType', 'getvalue', [
'id' => $params['payment_processor_type_id'],
'return' => 'payment_instrument_id',
- ));
+ ]);
}
return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'PaymentProcessor');
}
return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params);
}
-
/**
* Set default getlist parameters.
*
* @return array
*/
function _civicrm_api3_payment_processor_getlist_defaults(&$request) {
- return array(
- 'description_field' => array(
+ return [
+ 'description_field' => [
'payment_processor_type_id',
'description',
- ),
- 'params' => array(
+ ],
+ 'params' => [
'is_test' => 0,
'is_active' => 1,
- ),
- );
+ ],
+ ];
+}
+
+/**
+ * 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,
+ ];
}