dolibarr  17.0.4
stripe.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2017 Alexandre Spangaro <aspangaro@open-dsi.fr>
3  * Copyright (C) 2017 Olivier Geffroy <jeff@jeffinfo.com>
4  * Copyright (C) 2017 Saasprov <saasprov@gmail.com>
5  * Copyright (C) 2018-2022 Thibault FOUCART <support@ptibogxiv.net>
6  * Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program. If not, see <https://www.gnu.org/licenses/>.
20  */
21 
28 // Load Dolibarr environment
29 require '../../main.inc.php';
30 require_once DOL_DOCUMENT_ROOT.'/stripe/lib/stripe.lib.php';
31 require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
33 require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php';
35 
36 $servicename = 'Stripe';
37 
38 // Load translation files required by the page
39 $langs->loadLangs(array('admin', 'other', 'paypal', 'paybox', 'stripe'));
40 
41 if (empty($user->admin)) {
43 }
44 if (empty($conf->stripe->enabled)) {
46 }
47 
48 $action = GETPOST('action', 'aZ09');
49 
50 
51 /*
52  * Actions
53  */
54 
55 if ($action == 'setvalue' && $user->admin) {
56  $db->begin();
57 
58  if (empty($conf->stripeconnect->enabled)) {
59  $result = dolibarr_set_const($db, "STRIPE_TEST_PUBLISHABLE_KEY", GETPOST('STRIPE_TEST_PUBLISHABLE_KEY', 'alpha'), 'chaine', 0, '', $conf->entity);
60  if (!($result > 0)) {
61  $error++;
62  }
63  $result = dolibarr_set_const($db, "STRIPE_TEST_SECRET_KEY", GETPOST('STRIPE_TEST_SECRET_KEY', 'alpha'), 'chaine', 0, '', $conf->entity);
64  if (!($result > 0)) {
65  $error++;
66  }
67  $result = dolibarr_set_const($db, "STRIPE_TEST_WEBHOOK_ID", GETPOST('STRIPE_TEST_WEBHOOK_ID', 'alpha'), 'chaine', 0, '', $conf->entity);
68  if (!($result > 0)) {
69  $error++;
70  }
71  $result = dolibarr_set_const($db, "STRIPE_TEST_WEBHOOK_KEY", GETPOST('STRIPE_TEST_WEBHOOK_KEY', 'alpha'), 'chaine', 0, '', $conf->entity);
72  if (!($result > 0)) {
73  $error++;
74  }
75  $result = dolibarr_set_const($db, "STRIPE_LIVE_PUBLISHABLE_KEY", GETPOST('STRIPE_LIVE_PUBLISHABLE_KEY', 'alpha'), 'chaine', 0, '', $conf->entity);
76  if (!($result > 0)) {
77  $error++;
78  }
79  $result = dolibarr_set_const($db, "STRIPE_LIVE_SECRET_KEY", GETPOST('STRIPE_LIVE_SECRET_KEY', 'alpha'), 'chaine', 0, '', $conf->entity);
80  if (!($result > 0)) {
81  $error++;
82  }
83  $result = dolibarr_set_const($db, "STRIPE_LIVE_WEBHOOK_ID", GETPOST('STRIPE_LIVE_WEBHOOK_ID', 'alpha'), 'chaine', 0, '', $conf->entity);
84  if (!($result > 0)) {
85  $error++;
86  }
87  $result = dolibarr_set_const($db, "STRIPE_LIVE_WEBHOOK_KEY", GETPOST('STRIPE_LIVE_WEBHOOK_KEY', 'alpha'), 'chaine', 0, '', $conf->entity);
88  if (!($result > 0)) {
89  $error++;
90  }
91  }
92  $result = dolibarr_set_const($db, "ONLINE_PAYMENT_CREDITOR", GETPOST('ONLINE_PAYMENT_CREDITOR', 'alpha'), 'chaine', 0, '', $conf->entity);
93  if (!($result > 0)) {
94  $error++;
95  }
96  $result = dolibarr_set_const($db, "STRIPE_BANK_ACCOUNT_FOR_PAYMENTS", GETPOST('STRIPE_BANK_ACCOUNT_FOR_PAYMENTS', 'int'), 'chaine', 0, '', $conf->entity);
97  if (!($result > 0)) {
98  $error++;
99  }
100  $result = dolibarr_set_const($db, "STRIPE_USER_ACCOUNT_FOR_ACTIONS", GETPOST('STRIPE_USER_ACCOUNT_FOR_ACTIONS', 'int'), 'chaine', 0, '', $conf->entity);
101  if (!($result > 0)) {
102  $error++;
103  }
104  $result = dolibarr_set_const($db, "STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS", GETPOST('STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS', 'int'), 'chaine', 0, '', $conf->entity);
105  if (!($result > 0)) {
106  $error++;
107  }
108  if (GETPOSTISSET('STRIPE_LOCATION')) {
109  $result = dolibarr_set_const($db, "STRIPE_LOCATION", GETPOST('STRIPE_LOCATION', 'alpha'), 'chaine', 0, '', $conf->entity);
110  if (!$result > 0) {
111  $error++;
112  }
113  }
114  $result = dolibarr_set_const($db, "ONLINE_PAYMENT_CSS_URL", GETPOST('ONLINE_PAYMENT_CSS_URL', 'alpha'), 'chaine', 0, '', $conf->entity);
115  if (!($result > 0)) {
116  $error++;
117  }
118  $result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_FORM", GETPOST('ONLINE_PAYMENT_MESSAGE_FORM', 'restricthtml'), 'chaine', 0, '', $conf->entity);
119  if (!($result > 0)) {
120  $error++;
121  }
122  $result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_OK", GETPOST('ONLINE_PAYMENT_MESSAGE_OK', 'restricthtml'), 'chaine', 0, '', $conf->entity);
123  if (!($result > 0)) {
124  $error++;
125  }
126  $result = dolibarr_set_const($db, "ONLINE_PAYMENT_MESSAGE_KO", GETPOST('ONLINE_PAYMENT_MESSAGE_KO', 'restricthtml'), 'chaine', 0, '', $conf->entity);
127  if (!($result > 0)) {
128  $error++;
129  }
130  $result = dolibarr_set_const($db, "ONLINE_PAYMENT_SENDEMAIL", GETPOST('ONLINE_PAYMENT_SENDEMAIL'), 'chaine', 0, '', $conf->entity);
131  if (!($result > 0)) {
132  $error++;
133  }
134  // Stock decrement
135  //$result = dolibarr_set_const($db, "ONLINE_PAYMENT_WAREHOUSE", (GETPOST('ONLINE_PAYMENT_WAREHOUSE', 'alpha') > 0 ? GETPOST('ONLINE_PAYMENT_WAREHOUSE', 'alpha') : ''), 'chaine', 0, '', $conf->entity);
136  //if (! $result > 0)
137  // $error ++;
138 
139  // Payment token for URL
140  $result = dolibarr_set_const($db, "PAYMENT_SECURITY_TOKEN", GETPOST('PAYMENT_SECURITY_TOKEN', 'alpha'), 'chaine', 0, '', $conf->entity);
141  if (!($result > 0)) {
142  $error++;
143  }
144  if (empty($conf->use_javascript_ajax)) {
145  $result = dolibarr_set_const($db, "PAYMENT_SECURITY_TOKEN_UNIQUE", GETPOST('PAYMENT_SECURITY_TOKEN_UNIQUE', 'alpha'), 'chaine', 0, '', $conf->entity);
146  if (!($result > 0)) {
147  $error++;
148  }
149  }
150 
151  if (!$error) {
152  $db->commit();
153  setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
154  } else {
155  $db->rollback();
156  dol_print_error($db);
157  }
158 }
159 
160 if ($action == "setlive") {
161  $liveenable = GETPOST('value', 'int');
162  $res = dolibarr_set_const($db, "STRIPE_LIVE", $liveenable, 'yesno', 0, '', $conf->entity);
163  if ($res > 0) {
164  setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
165  } else {
166  setEventMessages($langs->trans("Error"), null, 'errors');
167  }
168 }
169 //TODO: import script for stripe account saving in alone or connect mode for stripe.class.php
170 
171 
172 /*
173  * View
174  */
175 
176 $form = new Form($db);
177 $formproduct = new FormProduct($db);
178 
179 llxHeader('', $langs->trans("StripeSetup"));
180 
181 $linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
182 print load_fiche_titre($langs->trans("ModuleSetup").' Stripe', $linkback);
183 
184 $head = stripeadmin_prepare_head();
185 
186 print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
187 print '<input type="hidden" name="token" value="'.newToken().'">';
188 print '<input type="hidden" name="action" value="setvalue">';
189 
190 print dol_get_fiche_head($head, 'stripeaccount', '', -1);
191 
192 $stripearrayofwebhookevents = array('account.updated', 'payout.created', 'payout.paid', 'charge.pending', 'charge.refunded', 'charge.succeeded', 'charge.failed', 'payment_intent.succeeded', 'payment_intent.payment_failed', 'payment_method.attached', 'payment_method.updated', 'payment_method.card_automatically_updated', 'payment_method.detached', 'source.chargeable', 'customer.deleted');
193 
194 print '<span class="opacitymedium">'.$langs->trans("StripeDesc")."</span><br>\n";
195 
196 print '<br>';
197 
198 print '<div class="div-table-responsive-no-min">';
199 print '<table class="noborder centpercent">';
200 print '<tr class="liste_titre">';
201 print '<td>'.$langs->trans("AccountParameter").'</td>';
202 print '<td>'.$langs->trans("Value").'</td>';
203 print '<td></td>';
204 print "</tr>\n";
205 
206 print '<tr class="oddeven">';
207 print '<td>';
208 print $langs->trans("StripeLiveEnabled").'</td><td>';
209 if ($conf->use_javascript_ajax) {
210  print ajax_constantonoff('STRIPE_LIVE');
211 } else {
212  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
213  print $form->selectarray("STRIPE_LIVE", $arrval, $conf->global->STRIPE_LIVE);
214 }
215 print '</td><td></td></tr>';
216 
217 if (empty($conf->stripeconnect->enabled)) {
218  print '<tr class="oddeven"><td>';
219  print '<span class="fieldrequired">'.$langs->trans("STRIPE_TEST_PUBLISHABLE_KEY").'</span></td><td>';
220  print '<input class="minwidth300" type="text" name="STRIPE_TEST_PUBLISHABLE_KEY" value="'.$conf->global->STRIPE_TEST_PUBLISHABLE_KEY.'" placeholder="'.$langs->trans("Example").': pk_test_xxxxxxxxxxxxxxxxxxxxxxxx">';
221  print '</td><td></td></tr>';
222 
223  print '<tr class="oddeven"><td>';
224  print '<span class="titlefield fieldrequired">'.$langs->trans("STRIPE_TEST_SECRET_KEY").'</span></td><td>';
225  print '<input class="minwidth300" type="text" name="STRIPE_TEST_SECRET_KEY" value="'.$conf->global->STRIPE_TEST_SECRET_KEY.'" placeholder="'.$langs->trans("Example").': sk_test_xxxxxxxxxxxxxxxxxxxxxxxx">';
226  print '</td><td></td></tr>';
227 
228  print '<tr class="oddeven"><td>';
229  print '<span class="titlefield">'.$langs->trans("STRIPE_TEST_WEBHOOK_KEY").'</span></td><td>';
230  if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
231  print '<input class="minwidth300" type="text" name="STRIPE_TEST_WEBHOOK_ID" value="'.getDolGlobalString('STRIPE_TEST_WEBHOOK_ID').'" placeholder="'.$langs->trans("Example").': we_xxxxxxxxxxxxxxxxxxxxxxxx">';
232  print '<br>';
233  }
234  print '<input class="minwidth300" type="text" name="STRIPE_TEST_WEBHOOK_KEY" value="'.getDolGlobalString('STRIPE_TEST_WEBHOOK_KEY').'" placeholder="'.$langs->trans("Example").': whsec_xxxxxxxxxxxxxxxxxxxxxxxx">';
235  $out = img_picto('', 'globe').' <span class="opacitymedium">'.$langs->trans("ToOfferALinkForTestWebhook").'</span> ';
236  $url = dol_buildpath('/public/stripe/ipn.php?test', 3);
237  $out .= '<input type="text" id="onlinetestwebhookurl" class="minwidth500" value="'.$url.'" disabled>';
238  $out .= ajax_autoselect("onlinetestwebhookurl", 0);
239  print '<br>'.$out;
240  print '</td><td>';
241  if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
242  if (!empty($conf->global->STRIPE_TEST_WEBHOOK_KEY) && !empty($conf->global->STRIPE_TEST_SECRET_KEY) && !empty($conf->global->STRIPE_TEST_WEBHOOK_ID)) {
243  \Stripe\Stripe::setApiKey($conf->global->STRIPE_TEST_SECRET_KEY);
244  $endpoint = \Stripe\WebhookEndpoint::retrieve($conf->global->STRIPE_TEST_WEBHOOK_ID);
245  $endpoint->enabled_events = $stripearrayofwebhookevents;
246  if (GETPOST('webhook', 'alpha') == $conf->global->STRIPE_TEST_WEBHOOK_ID) {
247  if (!GETPOST('status', 'alpha')) {
248  $endpoint->disabled = true;
249  } else {
250  $endpoint->disabled = false;
251  }
252  }
253  $endpoint->url = dol_buildpath('/public/stripe/ipn.php?test', 3);
254  $endpoint->save();
255  if ($endpoint->status == 'enabled') {
256  print '<a class="reposition" href="'.$_SERVER['PHP_SELF'].'?action=ipn&webhook='.$endpoint->id.'&status=0">';
257  print img_picto($langs->trans("Activated"), 'switch_on');
258  } else {
259  print '<a class="reposition" href="'.$_SERVER['PHP_SELF'].'?action=ipn&webhook='.$endpoint->id.'&status=1">';
260  print img_picto($langs->trans("Disabled"), 'switch_off');
261  }
262  //print $endpoint;
263  } else {
264  print img_picto($langs->trans("Inactive"), 'statut5');
265  }
266  }
267  print'</td></tr>';
268 } else {
269  print '<tr class="oddeven"><td>'.$langs->trans("StripeConnect").'</td>';
270  print '<td><b>'.$langs->trans("StripeConnect_Mode").'</b><br>';
271  print $langs->trans("STRIPE_APPLICATION_FEE_PLATFORM").' ';
272  print price($conf->global->STRIPE_APPLICATION_FEE_PERCENT);
273  print '% + ';
274  print price($conf->global->STRIPE_APPLICATION_FEE);
275  print ' '.$langs->getCurrencySymbol($conf->currency).' '.$langs->trans("minimum").' '.price($conf->global->STRIPE_APPLICATION_FEE_MINIMAL).' '.$langs->getCurrencySymbol($conf->currency);
276  print '</td><td></td></tr>';
277 }
278 
279 if (empty($conf->stripeconnect->enabled)) {
280  print '<tr class="oddeven"><td>';
281  print '<span class="fieldrequired">'.$langs->trans("STRIPE_LIVE_PUBLISHABLE_KEY").'</span></td><td>';
282  print '<input class="minwidth300" type="text" name="STRIPE_LIVE_PUBLISHABLE_KEY" value="'.getDolGlobalString('STRIPE_LIVE_PUBLISHABLE_KEY').'" placeholder="'.$langs->trans("Example").': pk_live_xxxxxxxxxxxxxxxxxxxxxxxx">';
283  print '</td><td></td></tr>';
284 
285  print '<tr class="oddeven"><td>';
286  print '<span class="fieldrequired">'.$langs->trans("STRIPE_LIVE_SECRET_KEY").'</span></td><td>';
287  print '<input class="minwidth300" type="text" name="STRIPE_LIVE_SECRET_KEY" value="'.getDolGlobalString('STRIPE_LIVE_SECRET_KEY').'" placeholder="'.$langs->trans("Example").': sk_live_xxxxxxxxxxxxxxxxxxxxxxxx">';
288  print '</td><td></td></tr>';
289 
290  print '<tr class="oddeven"><td>';
291  print '<span class="titlefield">'.$langs->trans("STRIPE_LIVE_WEBHOOK_KEY").'</span></td><td>';
292  if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
293  print '<input class="minwidth300" type="text" name="STRIPE_LIVE_WEBHOOK_ID" value="'.getDolGlobalString('STRIPE_LIVE_WEBHOOK_ID').'" placeholder="'.$langs->trans("Example").': we_xxxxxxxxxxxxxxxxxxxxxxxx">';
294  print '<br>';
295  }
296  print '<input class="minwidth300" type="text" name="STRIPE_LIVE_WEBHOOK_KEY" value="'.getDolGlobalString('STRIPE_LIVE_WEBHOOK_KEY').'" placeholder="'.$langs->trans("Example").': whsec_xxxxxxxxxxxxxxxxxxxxxxxx">';
297  $out = img_picto('', 'globe', 'class="pictofixedwidth"').' <span class="opacitymedium">'.$langs->trans("ToOfferALinkForLiveWebhook").'</span> ';
298  $url = dol_buildpath('/public/stripe/ipn.php', 3);
299  $out .= '<input type="text" id="onlinelivewebhookurl" class="minwidth500" value="'.$url.'" disabled>';
300  $out .= ajax_autoselect("onlinelivewebhookurl", 0);
301  print '<br>'.$out;
302  print '</td><td>';
303  if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
304  if (!empty($conf->global->STRIPE_LIVE_WEBHOOK_KEY) && !empty($conf->global->STRIPE_LIVE_SECRET_KEY) && !empty($conf->global->STRIPE_LIVE_WEBHOOK_ID)) {
305  \Stripe\Stripe::setApiKey($conf->global->STRIPE_LIVE_SECRET_KEY);
306  $endpoint = \Stripe\WebhookEndpoint::retrieve($conf->global->STRIPE_LIVE_WEBHOOK_ID);
307  $endpoint->enabled_events = $stripearrayofwebhookevents;
308  if (GETPOST('webhook', 'alpha') == $conf->global->STRIPE_LIVE_WEBHOOK_ID) {
309  if (empty(GETPOST('status', 'alpha'))) {
310  $endpoint->disabled = true;
311  } else {
312  $endpoint->disabled = false;
313  }
314  }
315  $endpoint->url = dol_buildpath('/public/stripe/ipn.php', 3);
316  $endpoint->save();
317  if ($endpoint->status == 'enabled') {
318  print '<a class="reposition" href="'.$_SERVER['PHP_SELF'].'?action=ipn&webhook='.$endpoint->id.'&status=0">';
319  print img_picto($langs->trans("Activated"), 'switch_on');
320  } else {
321  print '<a class="reposition" href="'.$_SERVER['PHP_SELF'].'?action=ipn&webhook='.$endpoint->id.'&status=1">';
322  print img_picto($langs->trans("Disabled"), 'switch_off');
323  }
324  //print $endpoint;
325  } else {
326  print img_picto($langs->trans("Inactive"), 'statut5');
327  }
328  }
329  print '</td></tr>';
330 } else {
331  print '<tr class="oddeven"><td>'.$langs->trans("StripeConnect").'</td>';
332  print '<td>'.$langs->trans("StripeConnect_Mode").'</td><td></td></tr>';
333 }
334 
335 
336 print '</table>';
337 print '</div>';
338 
339 print '<br>';
340 
341 
342 print '<div class="div-table-responsive-no-min">';
343 print '<table class="noborder centpercent">';
344 print '<tr class="liste_titre">';
345 print '<td>'.$langs->trans("UsageParameter").'</td>';
346 print '<td>'.$langs->trans("Value").'</td>';
347 print "</tr>\n";
348 
349 print '<tr class="oddeven"><td>';
350 print $langs->trans("PublicVendorName").'</td><td>';
351 print '<input class="minwidth300" type="text" name="ONLINE_PAYMENT_CREDITOR" value="'.getDolGlobalString('ONLINE_PAYMENT_CREDITOR').'">';
352 print ' &nbsp; <span class="opacitymedium">'.$langs->trans("Example").': '.$mysoc->name.'</span>';
353 print '</td></tr>';
354 
355 print '<tr class="oddeven"><td>';
356 print $langs->trans("StripeUserAccountForActions").'</td><td>';
357 print img_picto('', 'user', 'class="pictofixedwidth"').$form->select_dolusers(getDolGlobalString('STRIPE_USER_ACCOUNT_FOR_ACTIONS'), 'STRIPE_USER_ACCOUNT_FOR_ACTIONS', 0);
358 print '</td></tr>';
359 
360 print '<tr class="oddeven"><td>';
361 print $langs->trans("BankAccount").'</td><td>';
362 print img_picto('', 'bank_account', 'class="pictofixedwidth"');
363 $form->select_comptes(getDolGlobalString('STRIPE_BANK_ACCOUNT_FOR_PAYMENTS'), 'STRIPE_BANK_ACCOUNT_FOR_PAYMENTS', 0, '', 1);
364 print '</td></tr>';
365 
366 if (getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) { // What is this for ?
367  print '<tr class="oddeven"><td>';
368  print $langs->trans("BankAccountForBankTransfer").'</td><td>';
369  print img_picto('', 'bank_account', 'class="pictofixedwidth"');
370  $form->select_comptes(getDolGlobalString('STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS'), 'STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS', 0, '', 1);
371  print '</td></tr>';
372 }
373 
374 // Card Present for Stripe Terminal
375 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
376  print '<tr class="oddeven"><td>';
377  print $langs->trans("STRIPE_CARD_PRESENT").'</td><td>';
378  if ($conf->use_javascript_ajax) {
379  print ajax_constantonoff('STRIPE_CARD_PRESENT');
380  } else {
381  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
382  print $form->selectarray("STRIPE_CARD_PRESENT", $arrval, $conf->global->STRIPE_CARD_PRESENT);
383  }
384  print '</td></tr>';
385 }
386 
387 // Locations for Stripe Terminal
388 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
389  print '<tr class="oddeven"><td>';
390  print $langs->trans("TERMINAL_LOCATION").'</td><td>';
391  $service = 'StripeTest';
392  $servicestatus = 0;
393  if (!empty($conf->global->STRIPE_LIVE) && !GETPOST('forcesandbox', 'alpha')) {
394  $service = 'StripeLive';
395  $servicestatus = 1;
396  }
397 
398  try {
399  global $stripearrayofkeysbyenv;
400  $site_account = $stripearrayofkeysbyenv[$servicestatus]['secret_key'];
401  if (!empty($site_account)) {
402  \Stripe\Stripe::setApiKey($site_account);
403  }
404  if (isModEnabled('stripe') && (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox', 'alpha'))) {
405  $service = 'StripeTest';
406  $servicestatus = '0';
407  dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode', 'Stripe'), '', 'warning');
408  } else {
409  $service = 'StripeLive';
410  $servicestatus = '1';
411  }
412  $stripe = new Stripe($db);
413  if (!empty($site_account)) {
414  // If $site_account not defined, then key not set and no way to call API Location
415  $stripeacc = $stripe->getStripeAccount($service);
416  if ($stripeacc) {
417  $locations = \Stripe\Terminal\Location::all('', array("stripe_account" => $stripeacc));
418  } else {
419  $locations = \Stripe\Terminal\Location::all();
420  }
421  }
422  } catch (Exception $e) {
423  print $e->getMessage().'<br>';
424  }
425 
426  // Define the array $location
427  $location = array();
428  $location[""] = $langs->trans("NotDefined");
429  if (!empty($locations)) {
430  foreach ($locations as $tmplocation) {
431  $location[$tmplocation->id] = $tmplocation->display_name;
432  }
433  }
434 
435  print $form->selectarray("STRIPE_LOCATION", $location, getDolGlobalString('STRIPE_LOCATION'));
436  print '</td></tr>';
437 }
438 
439 // Activate Payment Request API
440 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
441  print '<tr class="oddeven"><td>';
442  print $langs->trans("STRIPE_PAYMENT_REQUEST_API").' ?? Not used, what is it for ??</td><td>';
443  if ($conf->use_javascript_ajax) {
444  print ajax_constantonoff('STRIPE_PAYMENT_REQUEST_API');
445  } else {
446  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
447  print $form->selectarray("STRIPE_PAYMENT_REQUEST_API", $arrval, getDolGlobalString('STRIPE_PAYMENT_REQUEST_API'));
448  }
449  print '</td></tr>';
450 }
451 
452 // Activate SEPA DIRECT_DEBIT
453 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
454  print '<tr class="oddeven"><td>';
455  print $langs->trans("STRIPE_SEPA_DIRECT_DEBIT").'</td><td>';
456  if ($conf->use_javascript_ajax) {
457  print ajax_constantonoff('STRIPE_SEPA_DIRECT_DEBIT');
458  } else {
459  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
460  print $form->selectarray("STRIPE_SEPA_DIRECT_DEBIT", $arrval, getDolGlobalString('STRIPE_SEPA_DIRECT_DEBIT'));
461  }
462  print '</td></tr>';
463 }
464 
465 // Activate Klarna
466 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
467  print '<tr class="oddeven"><td>';
468  print $langs->trans("STRIPE_KLARNA").'</td><td>';
469  if ($conf->use_javascript_ajax) {
470  print ajax_constantonoff('STRIPE_KLARNA');
471  } else {
472  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
473  print $form->selectarray("STRIPE_KLARNA", $arrval, $conf->global->STRIPE_KLARNA);
474  }
475  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForKlarnaCustomers").'</span>';
476  print '</td></tr>';
477 }
478 
479 // Activate Bancontact
480 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
481  print '<tr class="oddeven"><td>';
482  print $langs->trans("STRIPE_BANCONTACT").'</td><td>';
483  if ($conf->use_javascript_ajax) {
484  print ajax_constantonoff('STRIPE_BANCONTACT');
485  } else {
486  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
487  print $form->selectarray("STRIPE_BANCONTACT", $arrval, $conf->global->STRIPE_BANCONTACT);
488  }
489  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForBECustomers").'</span>';
490  print '</td></tr>';
491 }
492 
493 // Activate iDEAL
494 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
495  print '<tr class="oddeven"><td>';
496  print $langs->trans("STRIPE_IDEAL").'</td><td>';
497  if ($conf->use_javascript_ajax) {
498  print ajax_constantonoff('STRIPE_IDEAL');
499  } else {
500  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
501  print $form->selectarray("STRIPE_IDEAL", $arrval, $conf->global->STRIPE_SEPA_DIRECT_DEBIT);
502  }
503  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForNLCustomers").'</span>';
504  print '</td></tr>';
505 }
506 
507 // Activate Giropay
508 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
509  print '<tr class="oddeven"><td>';
510  print $langs->trans("STRIPE_GIROPAY").'</td><td>';
511  if ($conf->use_javascript_ajax) {
512  print ajax_constantonoff('STRIPE_GIROPAY');
513  } else {
514  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
515  print $form->selectarray("STRIPE_GIROPAY", $arrval, $conf->global->STRIPE_GIROPAY);
516  }
517  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForDECustomers").'</span>';
518  print '</td></tr>';
519 }
520 
521 // Activate Sofort
522 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
523  print '<tr class="oddeven"><td>';
524  print $langs->trans("STRIPE_SOFORT").'</td><td>';
525  if ($conf->use_javascript_ajax) {
526  print ajax_constantonoff('STRIPE_SOFORT');
527  } else {
528  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
529  print $form->selectarray("STRIPE_SOFORT", $arrval, $conf->global->STRIPE_SOFORT);
530  }
531  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForATBEDEITNLESCustomers").'</span>';
532  print '</td></tr>';
533 }
534 
535 print '<tr class="oddeven"><td>';
536 print $langs->trans("CSSUrlForPaymentForm").'</td><td>';
537 print '<input size="64" type="text" name="ONLINE_PAYMENT_CSS_URL" value="'.$conf->global->ONLINE_PAYMENT_CSS_URL.'">';
538 print ' &nbsp; <span class="opacitymedium">'.$langs->trans("Example").': http://mysite/mycss.css</span>';
539 print '</td></tr>';
540 
541 print '<tr class="oddeven"><td>';
542 print $langs->trans("MessageForm").'</td><td>';
543 $doleditor = new DolEditor('ONLINE_PAYMENT_MESSAGE_FORM', $conf->global->ONLINE_PAYMENT_MESSAGE_FORM, '', 100, 'dolibarr_details', 'In', false, true, true, ROWS_2, '90%');
544 $doleditor->Create();
545 print '</td></tr>';
546 
547 print '<tr class="oddeven"><td>';
548 print $langs->trans("MessageOK").'</td><td>';
549 $doleditor = new DolEditor('ONLINE_PAYMENT_MESSAGE_OK', $conf->global->ONLINE_PAYMENT_MESSAGE_OK, '', 100, 'dolibarr_details', 'In', false, true, true, ROWS_2, '90%');
550 $doleditor->Create();
551 print '</td></tr>';
552 
553 print '<tr class="oddeven"><td>';
554 print $langs->trans("MessageKO").'</td><td>';
555 $doleditor = new DolEditor('ONLINE_PAYMENT_MESSAGE_KO', $conf->global->ONLINE_PAYMENT_MESSAGE_KO, '', 100, 'dolibarr_details', 'In', false, true, true, ROWS_2, '90%');
556 $doleditor->Create();
557 print '</td></tr>';
558 
559 print '<tr class="oddeven"><td>';
560 print $langs->trans("ONLINE_PAYMENT_SENDEMAIL").'</td><td>';
561 print img_picto('', 'email', 'class="pictofixedwidth"');
562 print '<input class="minwidth200" type="text" name="ONLINE_PAYMENT_SENDEMAIL" value="'.$conf->global->ONLINE_PAYMENT_SENDEMAIL.'">';
563 print ' &nbsp; <span class="opacitymedium">'.$langs->trans("Example").': myemail@myserver.com, Payment service &lt;myemail2@myserver2.com&gt;</span>';
564 print '</td></tr>';
565 
566 print '</table>';
567 print '</div>';
568 
569 print '<br>';
570 
571 print '<div class="div-table-responsive-no-min">';
572 print '<table class="noborder centpercent">';
573 
574 print '<tr class="liste_titre">';
575 print '<td>'.$langs->trans("UrlGenerationParameters").'</td>';
576 print '<td>'.$langs->trans("Value").'</td>';
577 print "</tr>\n";
578 
579 // Payment token for URL
580 print '<tr class="oddeven"><td>';
581 print $langs->trans("SecurityToken").'</td><td>';
582 print '<input class="minwidth300" type="text" id="PAYMENT_SECURITY_TOKEN" name="PAYMENT_SECURITY_TOKEN" value="'.$conf->global->PAYMENT_SECURITY_TOKEN.'">';
583 if (!empty($conf->use_javascript_ajax)) {
584  print '&nbsp;'.img_picto($langs->trans('Generate'), 'refresh', 'id="generate_token" class="linkobject"');
585 }
586 if (!empty($conf->global->PAYMENT_SECURITY_ACCEPT_ANY_TOKEN)) {
587  $langs->load("errors");
588  print img_warning($langs->trans("WarningTheHiddenOptionIsOn", 'PAYMENT_SECURITY_ACCEPT_ANY_TOKEN'), '', 'pictowarning marginleftonly');
589 }
590 print '</td></tr>';
591 
592 print '<tr class="oddeven"><td>';
593 print $langs->trans("SecurityTokenIsUnique").'</td><td>';
594 if ($conf->use_javascript_ajax) {
595  print ajax_constantonoff('PAYMENT_SECURITY_TOKEN_UNIQUE', null, null, 0, 0, 1);
596 } else {
597  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
598  print $form->selectarray("PAYMENT_SECURITY_TOKEN_UNIQUE", $arrval, $conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE);
599 }
600 print '</td></tr>';
601 
602 print '</table>';
603 print '</div>';
604 
605 print dol_get_fiche_end();
606 
607 print $form->buttonsSaveCancel("Save", '');
608 
609 print '</form>';
610 
611 print '<br><br>';
612 
613 
614 $token = '';
615 
616 include DOL_DOCUMENT_ROOT.'/core/tpl/onlinepaymentlinks.tpl.php';
617 
618 print info_admin($langs->trans("ExampleOfTestCreditCard", '4242424242424242 (no 3DSecure) or 4000000000003063 (3DSecure required) or 4000002760003184 (3DSecure2 required on all transaction) or 4000003800000446 (3DSecure2 required, the off-session allowed)', '4000000000000101', '4000000000000069', '4000000000000341'));
619 
620 if (!empty($conf->use_javascript_ajax)) {
621  print "\n".'<script type="text/javascript">';
622  print '$(document).ready(function () {
623  $("#apidoc").hide();
624  $("#apidoca").click(function() {
625  console.log("We click on apidoca show/hide");
626  $("#apidoc").show();
627  $("#apidoca").hide();
628  return false;
629  });
630  });';
631  print '</script>';
632 }
633 
634 // End of page
635 llxFooter();
636 $db->close();
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
Definition: admin.lib.php:632
ajax_constantonoff($code, $input=array(), $entity=null, $revertonoff=0, $strict=0, $forcereload=0, $marginleftonlyshort=2, $forcenoajax=0, $setzeroinsteadofdel=0, $suffix='', $mode='')
On/off button for constant.
Definition: ajax.lib.php:600
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
Class to manage a WYSIWYG editor.
Class to manage generation of HTML components Only common components must be here.
Class with static methods for building HTML components related to products Only components common to ...
Stripe class.
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='')
Show tabs of a record.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
ajax_autoselect($htmlname, $addlink='', $textonlink='Link')
Make content of an input box selected when we click into input field.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information for admin users or standard users.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
if(!function_exists('utf8_encode')) if(!function_exists('utf8_decode')) getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_htmloutput_mesg($mesgstring='', $mesgarray=array(), $style='ok', $keepembedded=0)
Print formated messages to output (Used to show messages on html output).
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isModEnabled($module)
Is Dolibarr module enabled.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
stripeadmin_prepare_head()
Define head array for tabs of stripe tools setup pages.
Definition: stripe.lib.php:31