3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
13 * This api exposes CiviCRM PaymentProcessor.
15 * @package CiviCRM_APIv3
19 * Add/Update a PaymentProcessor.
21 * @param array $params
26 function civicrm_api3_payment_processor_create($params) {
27 if (empty($params['id']) && empty($params['payment_instrument_id'])) {
28 $params['payment_instrument_id'] = civicrm_api3('PaymentProcessorType', 'getvalue', [
29 'id' => $params['payment_processor_type_id'],
30 'return' => 'payment_instrument_id',
33 return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__
), $params, 'PaymentProcessor');
37 * Adjust Metadata for Create action.
39 * The metadata is used for setting defaults, documentation & validation.
41 * @param array $params
42 * Array of parameters determined by getfields.
44 function _civicrm_api3_payment_processor_create_spec(&$params) {
45 $params['payment_processor_type_id']['api.required'] = 1;
46 $params['is_default']['api.default'] = 0;
47 $params['is_test']['api.default'] = 0;
48 $params['is_active']['api.default'] = TRUE;
49 $params['domain_id']['api.default'] = CRM_Core_Config
::domainID();
50 $params['financial_account_id']['api.default'] = CRM_Financial_BAO_PaymentProcessor
::getDefaultFinancialAccountID();
51 $params['financial_account_id']['api.required'] = TRUE;
52 $params['financial_account_id']['type'] = CRM_Utils_Type
::T_INT
;
53 $params['financial_account_id']['title'] = ts('Financial Account for Processor');
54 $params['financial_account_id']['pseudoconstant'] = [
55 'table' => 'civicrm_financial_account',
57 'labelColumn' => 'name',
62 * Deletes an existing PaymentProcessor.
64 * @param array $params
69 function civicrm_api3_payment_processor_delete($params) {
70 return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__
), $params);
74 * Retrieve one or more PaymentProcessor.
76 * @param array $params
77 * Array of name/value pairs.
82 function civicrm_api3_payment_processor_get($params) {
83 return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__
), $params);
87 * Set default getlist parameters.
89 * @see _civicrm_api3_generic_getlist_defaults
91 * @param array $request
95 function _civicrm_api3_payment_processor_getlist_defaults(&$request) {
97 'description_field' => [
98 'payment_processor_type_id',
111 * @param array $params
116 * @throws \API_Exception
117 * @throws \CiviCRM_API3_Exception
119 function civicrm_api3_payment_processor_pay($params) {
120 /* @var CRM_Core_Payment $processor */
121 $processor = Civi\Payment\System
::singleton()->getById($params['payment_processor_id']);
122 $processor->setPaymentProcessor(civicrm_api3('PaymentProcessor', 'getsingle', ['id' => $params['payment_processor_id']]));
124 $result = $processor->doPayment($params);
126 catch (\Civi\Payment\Exception\PaymentProcessorException
$e) {
127 $code = $e->getErrorCode();
128 $errorData = $e->getErrorData();
130 $code = 'EXTERNAL_FAILURE';
132 throw new API_Exception('Payment failed', $code, $errorData, $e);
134 return civicrm_api3_create_success(array($result), $params);
140 * @param array $params
142 function _civicrm_api3_payment_processor_pay_spec(&$params) {
143 $params['payment_processor_id'] = [
144 'api.required' => TRUE,
145 'title' => ts('Payment processor'),
146 'type' => CRM_Utils_Type
::T_INT
,
148 $params['amount'] = [
149 'api.required' => TRUE,
150 'title' => ts('Amount to pay'),
151 'type' => CRM_Utils_Type
::T_MONEY
,
153 $params['contribution_id'] = [
154 'api.required' => TRUE,
155 'title' => ts('Contribution ID'),
156 'type' => CRM_Utils_Type
::T_INT
,
157 'api.aliases' => ['order_id'],
159 $params['contact_id'] = [
160 'title' => ts('Contact ID'),
161 'type' => CRM_Utils_Type
::T_INT
,
163 $params['contribution_recur_id'] = [
164 'title' => ts('Contribution Recur ID'),
165 'type' => CRM_Utils_Type
::T_INT
,
167 $params['invoice_id'] = [
168 'title' => ts('Invoice ID'),
169 'type' => CRM_Utils_Type
::T_STRING
,
176 * @param array $params
181 * @throws \API_Exception
182 * @throws \CiviCRM_API3_Exception
183 * @throws \Civi\Payment\Exception\PaymentProcessorException
185 function civicrm_api3_payment_processor_refund($params) {
186 /** @var \CRM_Core_Payment $processor */
187 $processor = Civi\Payment\System
::singleton()->getById($params['payment_processor_id']);
188 $processor->setPaymentProcessor(civicrm_api3('PaymentProcessor', 'getsingle', ['id' => $params['payment_processor_id']]));
189 if (!$processor->supportsRefund()) {
190 throw new API_Exception('Payment Processor does not support refund');
192 $result = $processor->doRefund($params);
193 return civicrm_api3_create_success([$result], $params);
199 * @param array $params
202 function _civicrm_api3_payment_processor_refund_spec(&$params) {
203 $params['payment_processor_id'] = [
204 'api.required' => TRUE,
205 'title' => ts('Payment processor'),
206 'type' => CRM_Utils_Type
::T_INT
,
208 $params['amount'] = [
209 'api.required' => TRUE,
210 'title' => ts('Amount to refund'),
211 'type' => CRM_Utils_Type
::T_MONEY
,