Commit | Line | Data |
---|---|---|
21150aae CW |
1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
a30c801b | 4 | | Copyright CiviCRM LLC. All rights reserved. | |
21150aae | 5 | | | |
a30c801b TO |
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 | | |
21150aae | 9 | +--------------------------------------------------------------------+ |
d25dd0ee | 10 | */ |
21150aae CW |
11 | |
12 | /** | |
c28e1768 | 13 | * This api exposes CiviCRM PaymentProcessor. |
21150aae CW |
14 | * |
15 | * @package CiviCRM_APIv3 | |
21150aae CW |
16 | */ |
17 | ||
18 | /** | |
d1b0d05e | 19 | * Add/Update a PaymentProcessor. |
21150aae | 20 | * |
c490a46a | 21 | * @param array $params |
77b97be7 | 22 | * |
a6c01b45 | 23 | * @return array |
00f8641b | 24 | * API result array |
21150aae CW |
25 | */ |
26 | function civicrm_api3_payment_processor_create($params) { | |
08f3bb14 | 27 | return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'PaymentProcessor'); |
21150aae CW |
28 | } |
29 | ||
30 | /** | |
0aa0303c EM |
31 | * Adjust Metadata for Create action. |
32 | * | |
33 | * The metadata is used for setting defaults, documentation & validation. | |
21150aae | 34 | * |
cf470720 | 35 | * @param array $params |
b081365f | 36 | * Array of parameters determined by getfields. |
21150aae CW |
37 | */ |
38 | function _civicrm_api3_payment_processor_create_spec(&$params) { | |
39 | $params['payment_processor_type_id']['api.required'] = 1; | |
40 | $params['is_default']['api.default'] = 0; | |
41 | $params['is_test']['api.default'] = 0; | |
29adc103 | 42 | $params['is_active']['api.default'] = TRUE; |
26f5916f | 43 | $params['domain_id']['api.default'] = CRM_Core_Config::domainID(); |
8563c1ce | 44 | $params['financial_account_id']['api.default'] = CRM_Financial_BAO_PaymentProcessor::getDefaultFinancialAccountID(); |
45 | $params['financial_account_id']['api.required'] = TRUE; | |
6cc6cb8c | 46 | $params['financial_account_id']['type'] = CRM_Utils_Type::T_INT; |
8563c1ce | 47 | $params['financial_account_id']['title'] = ts('Financial Account for Processor'); |
6cc6cb8c | 48 | $params['financial_account_id']['pseudoconstant'] = [ |
49 | 'table' => 'civicrm_financial_account', | |
50 | 'keyColumn' => 'id', | |
51 | 'labelColumn' => 'name', | |
52 | ]; | |
21150aae CW |
53 | } |
54 | ||
55 | /** | |
d1b0d05e | 56 | * Deletes an existing PaymentProcessor. |
21150aae | 57 | * |
cf470720 | 58 | * @param array $params |
21150aae | 59 | * |
a6c01b45 | 60 | * @return array |
00f8641b | 61 | * API result array |
21150aae CW |
62 | */ |
63 | function civicrm_api3_payment_processor_delete($params) { | |
64 | return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params); | |
65 | } | |
66 | ||
67 | /** | |
d1b0d05e | 68 | * Retrieve one or more PaymentProcessor. |
21150aae | 69 | * |
cf470720 | 70 | * @param array $params |
d1b0d05e | 71 | * Array of name/value pairs. |
21150aae | 72 | * |
a6c01b45 | 73 | * @return array |
00f8641b | 74 | * API result array |
21150aae CW |
75 | */ |
76 | function civicrm_api3_payment_processor_get($params) { | |
77 | return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); | |
78 | } | |
6b4c9564 | 79 | |
6b4c9564 CW |
80 | /** |
81 | * Set default getlist parameters. | |
82 | * | |
83 | * @see _civicrm_api3_generic_getlist_defaults | |
84 | * | |
85 | * @param array $request | |
86 | * | |
87 | * @return array | |
88 | */ | |
89 | function _civicrm_api3_payment_processor_getlist_defaults(&$request) { | |
cf8f0fff CW |
90 | return [ |
91 | 'description_field' => [ | |
6b4c9564 CW |
92 | 'payment_processor_type_id', |
93 | 'description', | |
cf8f0fff CW |
94 | ], |
95 | 'params' => [ | |
6b4c9564 CW |
96 | 'is_test' => 0, |
97 | 'is_active' => 1, | |
cf8f0fff CW |
98 | ], |
99 | ]; | |
6b4c9564 | 100 | } |
6bc775cf | 101 | |
71b4fdf9 | 102 | /** |
103 | * Action payment. | |
104 | * | |
105 | * @param array $params | |
106 | * | |
107 | * @return array | |
108 | * API result array. | |
f15d3f21 | 109 | * |
110 | * @throws \API_Exception | |
abf0d662 | 111 | * @throws \CiviCRM_API3_Exception |
71b4fdf9 | 112 | */ |
113 | function civicrm_api3_payment_processor_pay($params) { | |
abf0d662 | 114 | /* @var CRM_Core_Payment $processor */ |
71b4fdf9 | 115 | $processor = Civi\Payment\System::singleton()->getById($params['payment_processor_id']); |
116 | $processor->setPaymentProcessor(civicrm_api3('PaymentProcessor', 'getsingle', ['id' => $params['payment_processor_id']])); | |
f15d3f21 | 117 | try { |
118 | $result = $processor->doPayment($params); | |
119 | } | |
120 | catch (\Civi\Payment\Exception\PaymentProcessorException $e) { | |
121 | $code = $e->getErrorCode(); | |
122 | $errorData = $e->getErrorData(); | |
123 | if (empty($code)) { | |
124 | $code = 'EXTERNAL_FAILURE'; | |
125 | } | |
126 | throw new API_Exception('Payment failed', $code, $errorData, $e); | |
127 | } | |
189e6408 | 128 | return civicrm_api3_create_success(array($result), $params); |
71b4fdf9 | 129 | } |
130 | ||
131 | /** | |
132 | * Action payment. | |
133 | * | |
134 | * @param array $params | |
135 | */ | |
136 | function _civicrm_api3_payment_processor_pay_spec(&$params) { | |
137 | $params['payment_processor_id'] = [ | |
abf0d662 | 138 | 'api.required' => TRUE, |
71b4fdf9 | 139 | 'title' => ts('Payment processor'), |
140 | 'type' => CRM_Utils_Type::T_INT, | |
141 | ]; | |
142 | $params['amount'] = [ | |
143 | 'api.required' => TRUE, | |
14df3f4a | 144 | 'title' => ts('Amount to pay'), |
71b4fdf9 | 145 | 'type' => CRM_Utils_Type::T_MONEY, |
146 | ]; | |
783b62a7 | 147 | $params['contribution_id'] = [ |
148 | 'api.required' => TRUE, | |
149 | 'title' => ts('Contribution ID'), | |
150 | 'type' => CRM_Utils_Type::T_INT, | |
49cba3ad | 151 | 'api.aliases' => ['order_id'], |
783b62a7 | 152 | ]; |
153 | $params['contact_id'] = [ | |
154 | 'title' => ts('Contact ID'), | |
155 | 'type' => CRM_Utils_Type::T_INT, | |
156 | ]; | |
157 | $params['contribution_recur_id'] = [ | |
158 | 'title' => ts('Contribution Recur ID'), | |
159 | 'type' => CRM_Utils_Type::T_INT, | |
160 | ]; | |
161 | $params['invoice_id'] = [ | |
162 | 'title' => ts('Invoice ID'), | |
163 | 'type' => CRM_Utils_Type::T_STRING, | |
164 | ]; | |
71b4fdf9 | 165 | } |
166 | ||
6bc775cf MD |
167 | /** |
168 | * Action refund. | |
169 | * | |
170 | * @param array $params | |
171 | * | |
172 | * @return array | |
173 | * API result array. | |
16b41ddb | 174 | * |
175 | * @throws \API_Exception | |
176 | * @throws \CiviCRM_API3_Exception | |
177 | * @throws \Civi\Payment\Exception\PaymentProcessorException | |
6bc775cf MD |
178 | */ |
179 | function civicrm_api3_payment_processor_refund($params) { | |
16b41ddb | 180 | /** @var \CRM_Core_Payment $processor */ |
6bc775cf | 181 | $processor = Civi\Payment\System::singleton()->getById($params['payment_processor_id']); |
16b41ddb | 182 | $processor->setPaymentProcessor(civicrm_api3('PaymentProcessor', 'getsingle', ['id' => $params['payment_processor_id']])); |
6bc775cf | 183 | if (!$processor->supportsRefund()) { |
16b41ddb | 184 | throw new API_Exception('Payment Processor does not support refund'); |
6bc775cf MD |
185 | } |
186 | $result = $processor->doRefund($params); | |
16b41ddb | 187 | return civicrm_api3_create_success([$result], $params); |
6bc775cf MD |
188 | } |
189 | ||
190 | /** | |
191 | * Action Refund. | |
192 | * | |
193 | * @param array $params | |
194 | * | |
195 | */ | |
196 | function _civicrm_api3_payment_processor_refund_spec(&$params) { | |
197 | $params['payment_processor_id'] = [ | |
16b41ddb | 198 | 'api.required' => TRUE, |
6bc775cf MD |
199 | 'title' => ts('Payment processor'), |
200 | 'type' => CRM_Utils_Type::T_INT, | |
201 | ]; | |
202 | $params['amount'] = [ | |
203 | 'api.required' => TRUE, | |
204 | 'title' => ts('Amount to refund'), | |
205 | 'type' => CRM_Utils_Type::T_MONEY, | |
206 | ]; | |
207 | } |