Commit | Line | Data |
---|---|---|
21150aae CW |
1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
fee14197 | 4 | | CiviCRM version 5 | |
21150aae | 5 | +--------------------------------------------------------------------+ |
f299f7db | 6 | | Copyright CiviCRM LLC (c) 2004-2020 | |
21150aae CW |
7 | +--------------------------------------------------------------------+ |
8 | | This file is a part of CiviCRM. | | |
9 | | | | |
10 | | CiviCRM is free software; you can copy, modify, and distribute it | | |
11 | | under the terms of the GNU Affero General Public License | | |
12 | | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | | |
13 | | | | |
14 | | CiviCRM is distributed in the hope that it will be useful, but | | |
15 | | WITHOUT ANY WARRANTY; without even the implied warranty of | | |
16 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | | |
17 | | See the GNU Affero General Public License for more details. | | |
18 | | | | |
19 | | You should have received a copy of the GNU Affero General Public | | |
20 | | License and the CiviCRM Licensing Exception along | | |
21 | | with this program; if not, contact CiviCRM LLC | | |
22 | | at info[AT]civicrm[DOT]org. If you have questions about the | | |
23 | | GNU Affero General Public License or the licensing of CiviCRM, | | |
24 | | see the CiviCRM license FAQ at http://civicrm.org/licensing | | |
25 | +--------------------------------------------------------------------+ | |
d25dd0ee | 26 | */ |
21150aae CW |
27 | |
28 | /** | |
c28e1768 | 29 | * This api exposes CiviCRM PaymentProcessor. |
21150aae CW |
30 | * |
31 | * @package CiviCRM_APIv3 | |
21150aae CW |
32 | */ |
33 | ||
34 | /** | |
d1b0d05e | 35 | * Add/Update a PaymentProcessor. |
21150aae | 36 | * |
c490a46a | 37 | * @param array $params |
77b97be7 | 38 | * |
a6c01b45 | 39 | * @return array |
00f8641b | 40 | * API result array |
21150aae CW |
41 | */ |
42 | function civicrm_api3_payment_processor_create($params) { | |
a1936a29 | 43 | if (empty($params['id']) && empty($params['payment_instrument_id'])) { |
cf8f0fff | 44 | $params['payment_instrument_id'] = civicrm_api3('PaymentProcessorType', 'getvalue', [ |
a1936a29 EM |
45 | 'id' => $params['payment_processor_type_id'], |
46 | 'return' => 'payment_instrument_id', | |
cf8f0fff | 47 | ]); |
a1936a29 | 48 | } |
08f3bb14 | 49 | return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'PaymentProcessor'); |
21150aae CW |
50 | } |
51 | ||
52 | /** | |
0aa0303c EM |
53 | * Adjust Metadata for Create action. |
54 | * | |
55 | * The metadata is used for setting defaults, documentation & validation. | |
21150aae | 56 | * |
cf470720 | 57 | * @param array $params |
b081365f | 58 | * Array of parameters determined by getfields. |
21150aae CW |
59 | */ |
60 | function _civicrm_api3_payment_processor_create_spec(&$params) { | |
61 | $params['payment_processor_type_id']['api.required'] = 1; | |
62 | $params['is_default']['api.default'] = 0; | |
63 | $params['is_test']['api.default'] = 0; | |
29adc103 | 64 | $params['is_active']['api.default'] = TRUE; |
26f5916f | 65 | $params['domain_id']['api.default'] = CRM_Core_Config::domainID(); |
8563c1ce | 66 | $params['financial_account_id']['api.default'] = CRM_Financial_BAO_PaymentProcessor::getDefaultFinancialAccountID(); |
67 | $params['financial_account_id']['api.required'] = TRUE; | |
6cc6cb8c | 68 | $params['financial_account_id']['type'] = CRM_Utils_Type::T_INT; |
8563c1ce | 69 | $params['financial_account_id']['title'] = ts('Financial Account for Processor'); |
6cc6cb8c | 70 | $params['financial_account_id']['pseudoconstant'] = [ |
71 | 'table' => 'civicrm_financial_account', | |
72 | 'keyColumn' => 'id', | |
73 | 'labelColumn' => 'name', | |
74 | ]; | |
21150aae CW |
75 | } |
76 | ||
77 | /** | |
d1b0d05e | 78 | * Deletes an existing PaymentProcessor. |
21150aae | 79 | * |
cf470720 | 80 | * @param array $params |
21150aae | 81 | * |
a6c01b45 | 82 | * @return array |
00f8641b | 83 | * API result array |
21150aae CW |
84 | */ |
85 | function civicrm_api3_payment_processor_delete($params) { | |
86 | return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params); | |
87 | } | |
88 | ||
89 | /** | |
d1b0d05e | 90 | * Retrieve one or more PaymentProcessor. |
21150aae | 91 | * |
cf470720 | 92 | * @param array $params |
d1b0d05e | 93 | * Array of name/value pairs. |
21150aae | 94 | * |
a6c01b45 | 95 | * @return array |
00f8641b | 96 | * API result array |
21150aae CW |
97 | */ |
98 | function civicrm_api3_payment_processor_get($params) { | |
99 | return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); | |
100 | } | |
6b4c9564 | 101 | |
6b4c9564 CW |
102 | /** |
103 | * Set default getlist parameters. | |
104 | * | |
105 | * @see _civicrm_api3_generic_getlist_defaults | |
106 | * | |
107 | * @param array $request | |
108 | * | |
109 | * @return array | |
110 | */ | |
111 | function _civicrm_api3_payment_processor_getlist_defaults(&$request) { | |
cf8f0fff CW |
112 | return [ |
113 | 'description_field' => [ | |
6b4c9564 CW |
114 | 'payment_processor_type_id', |
115 | 'description', | |
cf8f0fff CW |
116 | ], |
117 | 'params' => [ | |
6b4c9564 CW |
118 | 'is_test' => 0, |
119 | 'is_active' => 1, | |
cf8f0fff CW |
120 | ], |
121 | ]; | |
6b4c9564 | 122 | } |
6bc775cf | 123 | |
71b4fdf9 | 124 | /** |
125 | * Action payment. | |
126 | * | |
127 | * @param array $params | |
128 | * | |
129 | * @return array | |
130 | * API result array. | |
f15d3f21 | 131 | * |
132 | * @throws \API_Exception | |
abf0d662 | 133 | * @throws \CiviCRM_API3_Exception |
71b4fdf9 | 134 | */ |
135 | function civicrm_api3_payment_processor_pay($params) { | |
abf0d662 | 136 | /* @var CRM_Core_Payment $processor */ |
71b4fdf9 | 137 | $processor = Civi\Payment\System::singleton()->getById($params['payment_processor_id']); |
138 | $processor->setPaymentProcessor(civicrm_api3('PaymentProcessor', 'getsingle', ['id' => $params['payment_processor_id']])); | |
f15d3f21 | 139 | try { |
140 | $result = $processor->doPayment($params); | |
141 | } | |
142 | catch (\Civi\Payment\Exception\PaymentProcessorException $e) { | |
143 | $code = $e->getErrorCode(); | |
144 | $errorData = $e->getErrorData(); | |
145 | if (empty($code)) { | |
146 | $code = 'EXTERNAL_FAILURE'; | |
147 | } | |
148 | throw new API_Exception('Payment failed', $code, $errorData, $e); | |
149 | } | |
189e6408 | 150 | return civicrm_api3_create_success(array($result), $params); |
71b4fdf9 | 151 | } |
152 | ||
153 | /** | |
154 | * Action payment. | |
155 | * | |
156 | * @param array $params | |
157 | */ | |
158 | function _civicrm_api3_payment_processor_pay_spec(&$params) { | |
159 | $params['payment_processor_id'] = [ | |
abf0d662 | 160 | 'api.required' => TRUE, |
71b4fdf9 | 161 | 'title' => ts('Payment processor'), |
162 | 'type' => CRM_Utils_Type::T_INT, | |
163 | ]; | |
164 | $params['amount'] = [ | |
165 | 'api.required' => TRUE, | |
14df3f4a | 166 | 'title' => ts('Amount to pay'), |
71b4fdf9 | 167 | 'type' => CRM_Utils_Type::T_MONEY, |
168 | ]; | |
783b62a7 | 169 | $params['contribution_id'] = [ |
170 | 'api.required' => TRUE, | |
171 | 'title' => ts('Contribution ID'), | |
172 | 'type' => CRM_Utils_Type::T_INT, | |
49cba3ad | 173 | 'api.aliases' => ['order_id'], |
783b62a7 | 174 | ]; |
175 | $params['contact_id'] = [ | |
176 | 'title' => ts('Contact ID'), | |
177 | 'type' => CRM_Utils_Type::T_INT, | |
178 | ]; | |
179 | $params['contribution_recur_id'] = [ | |
180 | 'title' => ts('Contribution Recur ID'), | |
181 | 'type' => CRM_Utils_Type::T_INT, | |
182 | ]; | |
183 | $params['invoice_id'] = [ | |
184 | 'title' => ts('Invoice ID'), | |
185 | 'type' => CRM_Utils_Type::T_STRING, | |
186 | ]; | |
71b4fdf9 | 187 | } |
188 | ||
6bc775cf MD |
189 | /** |
190 | * Action refund. | |
191 | * | |
192 | * @param array $params | |
193 | * | |
194 | * @return array | |
195 | * API result array. | |
16b41ddb | 196 | * |
197 | * @throws \API_Exception | |
198 | * @throws \CiviCRM_API3_Exception | |
199 | * @throws \Civi\Payment\Exception\PaymentProcessorException | |
6bc775cf MD |
200 | */ |
201 | function civicrm_api3_payment_processor_refund($params) { | |
16b41ddb | 202 | /** @var \CRM_Core_Payment $processor */ |
6bc775cf | 203 | $processor = Civi\Payment\System::singleton()->getById($params['payment_processor_id']); |
16b41ddb | 204 | $processor->setPaymentProcessor(civicrm_api3('PaymentProcessor', 'getsingle', ['id' => $params['payment_processor_id']])); |
6bc775cf | 205 | if (!$processor->supportsRefund()) { |
16b41ddb | 206 | throw new API_Exception('Payment Processor does not support refund'); |
6bc775cf MD |
207 | } |
208 | $result = $processor->doRefund($params); | |
16b41ddb | 209 | return civicrm_api3_create_success([$result], $params); |
6bc775cf MD |
210 | } |
211 | ||
212 | /** | |
213 | * Action Refund. | |
214 | * | |
215 | * @param array $params | |
216 | * | |
217 | */ | |
218 | function _civicrm_api3_payment_processor_refund_spec(&$params) { | |
219 | $params['payment_processor_id'] = [ | |
16b41ddb | 220 | 'api.required' => TRUE, |
6bc775cf MD |
221 | 'title' => ts('Payment processor'), |
222 | 'type' => CRM_Utils_Type::T_INT, | |
223 | ]; | |
224 | $params['amount'] = [ | |
225 | 'api.required' => TRUE, | |
226 | 'title' => ts('Amount to refund'), | |
227 | 'type' => CRM_Utils_Type::T_MONEY, | |
228 | ]; | |
229 | } |