Commit | Line | Data |
---|---|---|
21150aae CW |
1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
fee14197 | 4 | | CiviCRM version 5 | |
21150aae | 5 | +--------------------------------------------------------------------+ |
6b83d5bd | 6 | | Copyright CiviCRM LLC (c) 2004-2019 | |
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; | |
68 | $params['financial_account_id']['title'] = ts('Financial Account for Processor'); | |
21150aae CW |
69 | } |
70 | ||
71 | /** | |
d1b0d05e | 72 | * Deletes an existing PaymentProcessor. |
21150aae | 73 | * |
cf470720 | 74 | * @param array $params |
21150aae | 75 | * |
a6c01b45 | 76 | * @return array |
00f8641b | 77 | * API result array |
21150aae CW |
78 | */ |
79 | function civicrm_api3_payment_processor_delete($params) { | |
80 | return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params); | |
81 | } | |
82 | ||
83 | /** | |
d1b0d05e | 84 | * Retrieve one or more PaymentProcessor. |
21150aae | 85 | * |
cf470720 | 86 | * @param array $params |
d1b0d05e | 87 | * Array of name/value pairs. |
21150aae | 88 | * |
a6c01b45 | 89 | * @return array |
00f8641b | 90 | * API result array |
21150aae CW |
91 | */ |
92 | function civicrm_api3_payment_processor_get($params) { | |
93 | return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); | |
94 | } | |
6b4c9564 | 95 | |
6b4c9564 CW |
96 | /** |
97 | * Set default getlist parameters. | |
98 | * | |
99 | * @see _civicrm_api3_generic_getlist_defaults | |
100 | * | |
101 | * @param array $request | |
102 | * | |
103 | * @return array | |
104 | */ | |
105 | function _civicrm_api3_payment_processor_getlist_defaults(&$request) { | |
cf8f0fff CW |
106 | return [ |
107 | 'description_field' => [ | |
6b4c9564 CW |
108 | 'payment_processor_type_id', |
109 | 'description', | |
cf8f0fff CW |
110 | ], |
111 | 'params' => [ | |
6b4c9564 CW |
112 | 'is_test' => 0, |
113 | 'is_active' => 1, | |
cf8f0fff CW |
114 | ], |
115 | ]; | |
6b4c9564 | 116 | } |
6bc775cf | 117 | |
71b4fdf9 | 118 | /** |
119 | * Action payment. | |
120 | * | |
121 | * @param array $params | |
122 | * | |
123 | * @return array | |
124 | * API result array. | |
f15d3f21 | 125 | * |
126 | * @throws \API_Exception | |
71b4fdf9 | 127 | */ |
128 | function civicrm_api3_payment_processor_pay($params) { | |
129 | $processor = Civi\Payment\System::singleton()->getById($params['payment_processor_id']); | |
130 | $processor->setPaymentProcessor(civicrm_api3('PaymentProcessor', 'getsingle', ['id' => $params['payment_processor_id']])); | |
f15d3f21 | 131 | try { |
132 | $result = $processor->doPayment($params); | |
133 | } | |
134 | catch (\Civi\Payment\Exception\PaymentProcessorException $e) { | |
135 | $code = $e->getErrorCode(); | |
136 | $errorData = $e->getErrorData(); | |
137 | if (empty($code)) { | |
138 | $code = 'EXTERNAL_FAILURE'; | |
139 | } | |
140 | throw new API_Exception('Payment failed', $code, $errorData, $e); | |
141 | } | |
71b4fdf9 | 142 | return civicrm_api3_create_success(array($result), $params); |
143 | } | |
144 | ||
145 | /** | |
146 | * Action payment. | |
147 | * | |
148 | * @param array $params | |
149 | */ | |
150 | function _civicrm_api3_payment_processor_pay_spec(&$params) { | |
151 | $params['payment_processor_id'] = [ | |
152 | 'api.required' => 1, | |
153 | 'title' => ts('Payment processor'), | |
154 | 'type' => CRM_Utils_Type::T_INT, | |
155 | ]; | |
156 | $params['amount'] = [ | |
157 | 'api.required' => TRUE, | |
14df3f4a | 158 | 'title' => ts('Amount to pay'), |
71b4fdf9 | 159 | 'type' => CRM_Utils_Type::T_MONEY, |
160 | ]; | |
161 | } | |
162 | ||
6bc775cf MD |
163 | /** |
164 | * Action refund. | |
165 | * | |
166 | * @param array $params | |
167 | * | |
168 | * @return array | |
169 | * API result array. | |
170 | * @throws CiviCRM_API3_Exception | |
171 | */ | |
172 | function civicrm_api3_payment_processor_refund($params) { | |
173 | $processor = Civi\Payment\System::singleton()->getById($params['payment_processor_id']); | |
174 | $processor->setPaymentProcessor(civicrm_api3('PaymentProcessor', 'getsingle', array('id' => $params['payment_processor_id']))); | |
175 | if (!$processor->supportsRefund()) { | |
176 | throw API_Exception('Payment Processor does not support refund'); | |
177 | } | |
178 | $result = $processor->doRefund($params); | |
179 | return civicrm_api3_create_success(array($result), $params); | |
180 | } | |
181 | ||
182 | /** | |
183 | * Action Refund. | |
184 | * | |
185 | * @param array $params | |
186 | * | |
187 | */ | |
188 | function _civicrm_api3_payment_processor_refund_spec(&$params) { | |
189 | $params['payment_processor_id'] = [ | |
190 | 'api.required' => 1, | |
191 | 'title' => ts('Payment processor'), | |
192 | 'type' => CRM_Utils_Type::T_INT, | |
193 | ]; | |
194 | $params['amount'] = [ | |
195 | 'api.required' => TRUE, | |
196 | 'title' => ts('Amount to refund'), | |
197 | 'type' => CRM_Utils_Type::T_MONEY, | |
198 | ]; | |
199 | } |