1 | <?php |
||||||
2 | /* For license terms, see /license.txt */ |
||||||
3 | |||||||
4 | use ChamiloSession as Session; |
||||||
5 | |||||||
6 | /** |
||||||
7 | * Process purchase confirmation script for the Buy Courses plugin. |
||||||
8 | * |
||||||
9 | * @package chamilo.plugin.buycourses |
||||||
10 | */ |
||||||
11 | require_once '../config.php'; |
||||||
12 | |||||||
13 | $plugin = BuyCoursesPlugin::create(); |
||||||
14 | $serviceSaleId = Session::read('bc_service_sale_id'); |
||||||
15 | $couponId = Session::read('bc_coupon_id'); |
||||||
16 | |||||||
17 | if (empty($serviceSaleId)) { |
||||||
18 | api_not_allowed(true); |
||||||
19 | } |
||||||
20 | |||||||
21 | $serviceSale = $plugin->getServiceSale($serviceSaleId, $coupon); |
||||||
22 | $userInfo = api_get_user_info($serviceSale['buyer']['id']); |
||||||
23 | |||||||
24 | if (!empty($couponId)) { |
||||||
25 | $coupon = $plugin->getCouponService($couponId, $serviceSale['service_id']); |
||||||
26 | $serviceSale['item'] = $plugin->getService($serviceSale['service_id'], $coupon); |
||||||
27 | } |
||||||
28 | |||||||
29 | if (empty($serviceSale)) { |
||||||
30 | api_not_allowed(true); |
||||||
31 | } |
||||||
32 | |||||||
33 | $currency = $plugin->getCurrency($serviceSale['currency_id']); |
||||||
34 | $globalParameters = $plugin->getGlobalParameters(); |
||||||
35 | |||||||
36 | switch ($serviceSale['payment_type']) { |
||||||
37 | case BuyCoursesPlugin::PAYMENT_TYPE_PAYPAL: |
||||||
38 | $paypalParams = $plugin->getPaypalParams(); |
||||||
39 | |||||||
40 | $pruebas = $paypalParams['sandbox'] == 1; |
||||||
41 | $paypalUsername = $paypalParams['username']; |
||||||
42 | $paypalPassword = $paypalParams['password']; |
||||||
43 | $paypalSignature = $paypalParams['signature']; |
||||||
44 | |||||||
45 | // This var $itemPrice may be "0" if the transaction does not include a one-time purchase such as when you set up |
||||||
46 | // a billing agreement for a recurring payment that is not immediately charged. When the field is set to 0, |
||||||
47 | // purchase-specific fields are ignored. This little condition handle this fact. |
||||||
48 | $itemPrice = $serviceSale['price']; |
||||||
49 | |||||||
50 | $returnUrl = api_get_path(WEB_PLUGIN_PATH).'buycourses/src/service_success.php'; |
||||||
51 | $cancelUrl = api_get_path(WEB_PLUGIN_PATH).'buycourses/src/service_error.php'; |
||||||
52 | |||||||
53 | // The extra params for handle the hard job, this var is VERY IMPORTANT !! |
||||||
54 | $extra = ''; |
||||||
55 | require_once 'paypalfunctions.php'; |
||||||
56 | |||||||
57 | $extra .= "&L_PAYMENTREQUEST_0_NAME0={$serviceSale['service']['name']}"; |
||||||
58 | $extra .= "&L_PAYMENTREQUEST_0_QTY0=1"; |
||||||
59 | $extra .= "&L_PAYMENTREQUEST_0_AMT0=$itemPrice"; |
||||||
60 | |||||||
61 | // Full Checkout express |
||||||
62 | $expressCheckout = CallShortcutExpressCheckout( |
||||||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||||||
63 | $itemPrice, |
||||||
64 | $currency['iso_code'], |
||||||
65 | 'paypal', |
||||||
66 | $returnUrl, |
||||||
67 | $cancelUrl, |
||||||
68 | $extra |
||||||
69 | ); |
||||||
70 | |||||||
71 | if ($expressCheckout['ACK'] !== 'Success') { |
||||||
72 | $erroMessage = vsprintf( |
||||||
73 | $plugin->get_lang('ErrorOccurred'), |
||||||
74 | [$expressCheckout['L_ERRORCODE0'], $expressCheckout['L_LONGMESSAGE0']] |
||||||
75 | ); |
||||||
76 | Display::addFlash( |
||||||
77 | Display::return_message($erroMessage, 'error', false) |
||||||
78 | ); |
||||||
79 | |||||||
80 | $plugin->cancelServiceSale($serviceSale['id']); |
||||||
81 | header('Location: '.api_get_path(WEB_PLUGIN_PATH).'buycourses/src/service_catalog.php'); |
||||||
82 | exit; |
||||||
83 | } |
||||||
84 | |||||||
85 | if (!empty($globalParameters['sale_email'])) { |
||||||
86 | $messageConfirmTemplate = new Template(); |
||||||
87 | $messageConfirmTemplate->assign('user', $userInfo); |
||||||
88 | $messageConfirmTemplate->assign( |
||||||
89 | 'sale', |
||||||
90 | [ |
||||||
91 | 'date' => $serviceSale['buy_date'], |
||||||
92 | 'product' => $serviceSale['service']['name'], |
||||||
93 | 'currency' => $currency['iso_code'], |
||||||
94 | 'price' => $serviceSale['price'], |
||||||
95 | 'reference' => $serviceSale['reference'], |
||||||
96 | ] |
||||||
97 | ); |
||||||
98 | |||||||
99 | api_mail_html( |
||||||
100 | '', |
||||||
101 | $globalParameters['sale_email'], |
||||||
102 | $plugin->get_lang('bc_subject'), |
||||||
103 | $messageConfirmTemplate->fetch('buycourses/view/message_confirm.tpl') |
||||||
104 | ); |
||||||
105 | } |
||||||
106 | |||||||
107 | RedirectToPayPal($expressCheckout['TOKEN']); |
||||||
0 ignored issues
–
show
The function
RedirectToPayPal was not found. Maybe you did not declare it correctly or list all dependencies?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
108 | break; |
||||||
109 | case BuyCoursesPlugin::PAYMENT_TYPE_TRANSFER: |
||||||
110 | $transferAccounts = $plugin->getTransferAccounts(); |
||||||
111 | |||||||
112 | $form = new FormValidator( |
||||||
113 | 'success', |
||||||
114 | 'POST', |
||||||
115 | api_get_self(), |
||||||
116 | null, |
||||||
117 | null, |
||||||
118 | FormValidator::LAYOUT_INLINE |
||||||
119 | ); |
||||||
120 | |||||||
121 | if ($form->validate()) { |
||||||
122 | $formValues = $form->getSubmitValues(); |
||||||
123 | |||||||
124 | if (isset($formValues['cancel'])) { |
||||||
125 | $plugin->cancelServiceSale($serviceSale['id']); |
||||||
126 | |||||||
127 | unset($_SESSION['bc_service_sale_id']); |
||||||
128 | unset($_SESSION['bc_coupon_id']); |
||||||
129 | Display::addFlash( |
||||||
130 | Display::return_message($plugin->get_lang('OrderCancelled'), 'error', false) |
||||||
131 | ); |
||||||
132 | header('Location: '.api_get_path(WEB_PLUGIN_PATH).'buycourses/src/service_catalog.php'); |
||||||
133 | exit; |
||||||
134 | } |
||||||
135 | |||||||
136 | $messageTemplate = new Template(); |
||||||
137 | $messageTemplate->assign( |
||||||
138 | 'service_sale', |
||||||
139 | [ |
||||||
140 | 'name' => $serviceSale['service']['name'], |
||||||
141 | 'buyer' => $serviceSale['buyer']['name'], |
||||||
142 | 'buy_date' => $serviceSale['buy_date'], |
||||||
143 | 'start_date' => $serviceSale['start_date'], |
||||||
144 | 'end_date' => $serviceSale['end_date'], |
||||||
145 | 'currency' => $currency['iso_code'], |
||||||
146 | 'price' => $serviceSale['price'], |
||||||
147 | 'reference' => $serviceSale['reference'], |
||||||
148 | ] |
||||||
149 | ); |
||||||
150 | $messageTemplate->assign('transfer_accounts', $transferAccounts); |
||||||
151 | $buyer = api_get_user_info($serviceSale['buyer']['id']); |
||||||
152 | |||||||
153 | MessageManager::send_message_simple( |
||||||
154 | $buyer['user_id'], |
||||||
155 | $plugin->get_lang('bc_subject'), |
||||||
156 | $messageTemplate->fetch('buycourses/view/service_message_transfer.tpl') |
||||||
157 | ); |
||||||
158 | |||||||
159 | if (!empty($globalParameters['sale_email'])) { |
||||||
160 | $messageConfirmTemplate = new Template(); |
||||||
161 | $messageConfirmTemplate->assign('user', $userInfo); |
||||||
162 | $messageConfirmTemplate->assign( |
||||||
163 | 'sale', |
||||||
164 | [ |
||||||
165 | 'date' => $serviceSale['buy_date'], |
||||||
166 | 'product' => $serviceSale['service']['name'], |
||||||
167 | 'currency' => $currency['iso_code'], |
||||||
168 | 'price' => $serviceSale['price'], |
||||||
169 | 'reference' => $serviceSale['reference'], |
||||||
170 | ] |
||||||
171 | ); |
||||||
172 | |||||||
173 | api_mail_html( |
||||||
174 | '', |
||||||
175 | $globalParameters['sale_email'], |
||||||
176 | $plugin->get_lang('bc_subject'), |
||||||
177 | $messageConfirmTemplate->fetch('buycourses/view/message_confirm.tpl') |
||||||
178 | ); |
||||||
179 | } |
||||||
180 | |||||||
181 | Display::addFlash( |
||||||
182 | Display::return_message( |
||||||
183 | sprintf( |
||||||
184 | $plugin->get_lang('PurchaseStatusX'), |
||||||
185 | $plugin->get_lang('PendingReasonByTransfer') |
||||||
186 | ), |
||||||
187 | 'success', |
||||||
188 | false |
||||||
189 | ) |
||||||
190 | ); |
||||||
191 | |||||||
192 | unset($_SESSION['bc_service_sale_id']); |
||||||
193 | unset($_SESSION['bc_coupon_id']); |
||||||
194 | header('Location: '.api_get_path(WEB_PLUGIN_PATH).'buycourses/src/service_catalog.php'); |
||||||
195 | exit; |
||||||
196 | } |
||||||
197 | |||||||
198 | $form->addButton( |
||||||
199 | 'confirm', |
||||||
200 | $plugin->get_lang('ConfirmOrder'), |
||||||
201 | 'check', |
||||||
202 | 'success', |
||||||
203 | 'default', |
||||||
204 | null, |
||||||
205 | ['id' => 'confirm'] |
||||||
206 | ); |
||||||
207 | $form->addButton( |
||||||
208 | 'cancel', |
||||||
209 | $plugin->get_lang('CancelOrder'), |
||||||
210 | 'times', |
||||||
211 | 'danger', |
||||||
212 | 'default', |
||||||
213 | null, |
||||||
214 | ['id' => 'cancel'] |
||||||
215 | ); |
||||||
216 | |||||||
217 | $template = new Template(); |
||||||
218 | $template->assign('terms', $globalParameters['terms_and_conditions']); |
||||||
219 | $template->assign('title', $serviceSale['service']['name']); |
||||||
220 | $template->assign('price', $serviceSale['price']); |
||||||
221 | $template->assign('currency', $serviceSale['currency_id']); |
||||||
222 | $template->assign('buying_service', $serviceSale); |
||||||
223 | $template->assign('user', $userInfo); |
||||||
224 | $template->assign('service', $serviceSale['service']); |
||||||
225 | $template->assign('service_item', $serviceSale['item']); |
||||||
226 | $template->assign('transfer_accounts', $transferAccounts); |
||||||
227 | $template->assign('form', $form->returnForm()); |
||||||
228 | |||||||
229 | $content = $template->fetch('buycourses/view/process_confirm.tpl'); |
||||||
230 | |||||||
231 | $template->assign('content', $content); |
||||||
232 | $template->display_one_col_template(); |
||||||
233 | break; |
||||||
234 | case BuyCoursesPlugin::PAYMENT_TYPE_CULQI: |
||||||
235 | // We need to include the main online script, acording to the Culqi documentation the JS needs to be loeaded |
||||||
236 | // directly from the main url "https://integ-pago.culqi.com" because a local copy of this JS is not supported |
||||||
237 | $htmlHeadXtra[] = '<script src="//integ-pago.culqi.com/js/v1"></script>'; |
||||||
238 | |||||||
239 | $form = new FormValidator( |
||||||
240 | 'success', |
||||||
241 | 'POST', |
||||||
242 | api_get_self(), |
||||||
243 | null, |
||||||
244 | null, |
||||||
245 | FormValidator::LAYOUT_INLINE |
||||||
246 | ); |
||||||
247 | |||||||
248 | if ($form->validate()) { |
||||||
249 | $formValues = $form->getSubmitValues(); |
||||||
250 | if (isset($formValues['cancel'])) { |
||||||
251 | $plugin->cancelServiceSale($serviceSale['id']); |
||||||
252 | |||||||
253 | unset($_SESSION['bc_service_sale_id']); |
||||||
254 | unset($_SESSION['bc_coupon_id']); |
||||||
255 | |||||||
256 | Display::addFlash( |
||||||
257 | Display::return_message( |
||||||
258 | $plugin->get_lang('OrderCanceled'), |
||||||
259 | 'warning', |
||||||
260 | false |
||||||
261 | ) |
||||||
262 | ); |
||||||
263 | |||||||
264 | header('Location: '.api_get_path(WEB_PLUGIN_PATH).'buycourses/index.php'); |
||||||
265 | exit; |
||||||
266 | } |
||||||
267 | } |
||||||
268 | $form->addButton( |
||||||
269 | 'confirm', |
||||||
270 | $plugin->get_lang('ConfirmOrder'), |
||||||
271 | 'check', |
||||||
272 | 'success', |
||||||
273 | 'default', |
||||||
274 | null, |
||||||
275 | ['id' => 'confirm'] |
||||||
276 | ); |
||||||
277 | $form->addButton( |
||||||
278 | 'cancel', |
||||||
279 | $plugin->get_lang('CancelOrder'), |
||||||
280 | 'times', |
||||||
281 | 'danger', |
||||||
282 | 'default', |
||||||
283 | null, |
||||||
284 | ['id' => 'cancel'] |
||||||
285 | ); |
||||||
286 | |||||||
287 | $template = new Template(); |
||||||
288 | $template->assign('terms', $globalParameters['terms_and_conditions']); |
||||||
289 | $template->assign('title', $serviceSale['service']['name']); |
||||||
290 | $template->assign('price', floatval($serviceSale['price'])); |
||||||
291 | $template->assign('currency', $plugin->getSelectedCurrency()); |
||||||
292 | $template->assign('buying_service', $serviceSale); |
||||||
293 | $template->assign('user', $userInfo); |
||||||
294 | $template->assign('service', $serviceSale['service']); |
||||||
295 | $template->assign('service_item', $serviceSale['item']); |
||||||
296 | $template->assign('form', $form->returnForm()); |
||||||
297 | $template->assign('is_culqi_payment', true); |
||||||
298 | $template->assign('culqi_params', $culqiParams = $plugin->getCulqiParams()); |
||||||
299 | $content = $template->fetch('buycourses/view/process_confirm.tpl'); |
||||||
300 | $template->assign('content', $content); |
||||||
301 | $template->display_one_col_template(); |
||||||
302 | break; |
||||||
303 | } |
||||||
304 |