dolibarr  x.y.z
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  global $stripearrayofkeysbyenv;
398  $site_account = $stripearrayofkeysbyenv[$servicestatus]['secret_key'];
399  if (!empty($site_account)) {
400  \Stripe\Stripe::setApiKey($site_account);
401  }
402  if (isModEnabled('stripe') && (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox', 'alpha'))) {
403  $service = 'StripeTest';
404  $servicestatus = '0';
405  dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode', 'Stripe'), '', 'warning');
406  } else {
407  $service = 'StripeLive';
408  $servicestatus = '1';
409  }
410  $stripe = new Stripe($db);
411  if (!empty($site_account)) {
412  // If $site_account not defined, then key not set and no way to call API Location
413  $stripeacc = $stripe->getStripeAccount($service);
414  if ($stripeacc) {
415  $locations = \Stripe\Terminal\Location::all('', array("stripe_account" => $stripeacc));
416  } else {
417  $locations = \Stripe\Terminal\Location::all();
418  }
419  }
420 
421  $location = array();
422  $location[""] = $langs->trans("NotDefined");
423  foreach ($locations as $tmplocation) {
424  $location[$tmplocation->id] = $tmplocation->display_name;
425  }
426  print $form->selectarray("STRIPE_LOCATION", $location, getDolGlobalString('STRIPE_LOCATION'));
427  print '</td></tr>';
428 }
429 
430 // Activate Payment Request API
431 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
432  print '<tr class="oddeven"><td>';
433  print $langs->trans("STRIPE_PAYMENT_REQUEST_API").' ?? Not used, what is it for ??</td><td>';
434  if ($conf->use_javascript_ajax) {
435  print ajax_constantonoff('STRIPE_PAYMENT_REQUEST_API');
436  } else {
437  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
438  print $form->selectarray("STRIPE_PAYMENT_REQUEST_API", $arrval, getDolGlobalString('STRIPE_PAYMENT_REQUEST_API'));
439  }
440  print '</td></tr>';
441 }
442 
443 // Activate SEPA DIRECT_DEBIT
444 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
445  print '<tr class="oddeven"><td>';
446  print $langs->trans("STRIPE_SEPA_DIRECT_DEBIT").'</td><td>';
447  if ($conf->use_javascript_ajax) {
448  print ajax_constantonoff('STRIPE_SEPA_DIRECT_DEBIT');
449  } else {
450  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
451  print $form->selectarray("STRIPE_SEPA_DIRECT_DEBIT", $arrval, getDolGlobalString('STRIPE_SEPA_DIRECT_DEBIT'));
452  }
453  print '</td></tr>';
454 }
455 
456 // Activate Klarna
457 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
458  print '<tr class="oddeven"><td>';
459  print $langs->trans("STRIPE_KLARNA").'</td><td>';
460  if ($conf->use_javascript_ajax) {
461  print ajax_constantonoff('STRIPE_KLARNA');
462  } else {
463  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
464  print $form->selectarray("STRIPE_KLARNA", $arrval, $conf->global->STRIPE_KLARNA);
465  }
466  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForKlarnaCustomers").'</span>';
467  print '</td></tr>';
468 }
469 
470 // Activate Bancontact
471 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
472  print '<tr class="oddeven"><td>';
473  print $langs->trans("STRIPE_BANCONTACT").'</td><td>';
474  if ($conf->use_javascript_ajax) {
475  print ajax_constantonoff('STRIPE_BANCONTACT');
476  } else {
477  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
478  print $form->selectarray("STRIPE_BANCONTACT", $arrval, $conf->global->STRIPE_BANCONTACT);
479  }
480  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForBECustomers").'</span>';
481  print '</td></tr>';
482 }
483 
484 // Activate iDEAL
485 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
486  print '<tr class="oddeven"><td>';
487  print $langs->trans("STRIPE_IDEAL").'</td><td>';
488  if ($conf->use_javascript_ajax) {
489  print ajax_constantonoff('STRIPE_IDEAL');
490  } else {
491  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
492  print $form->selectarray("STRIPE_IDEAL", $arrval, $conf->global->STRIPE_SEPA_DIRECT_DEBIT);
493  }
494  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForNLCustomers").'</span>';
495  print '</td></tr>';
496 }
497 
498 // Activate Giropay
499 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
500  print '<tr class="oddeven"><td>';
501  print $langs->trans("STRIPE_GIROPAY").'</td><td>';
502  if ($conf->use_javascript_ajax) {
503  print ajax_constantonoff('STRIPE_GIROPAY');
504  } else {
505  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
506  print $form->selectarray("STRIPE_GIROPAY", $arrval, $conf->global->STRIPE_GIROPAY);
507  }
508  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForDECustomers").'</span>';
509  print '</td></tr>';
510 }
511 
512 // Activate Sofort
513 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
514  print '<tr class="oddeven"><td>';
515  print $langs->trans("STRIPE_SOFORT").'</td><td>';
516  if ($conf->use_javascript_ajax) {
517  print ajax_constantonoff('STRIPE_SOFORT');
518  } else {
519  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
520  print $form->selectarray("STRIPE_SOFORT", $arrval, $conf->global->STRIPE_SOFORT);
521  }
522  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForATBEDEITNLESCustomers").'</span>';
523  print '</td></tr>';
524 }
525 
526 print '<tr class="oddeven"><td>';
527 print $langs->trans("CSSUrlForPaymentForm").'</td><td>';
528 print '<input class="width500" type="text" name="ONLINE_PAYMENT_CSS_URL" value="'.$conf->global->ONLINE_PAYMENT_CSS_URL.'">';
529 print ' &nbsp; <span class="opacitymedium">'.$langs->trans("Example").': http://mysite/mycss.css</span>';
530 print '</td></tr>';
531 
532 print '<tr class="oddeven"><td>';
533 print $langs->trans("MessageForm").'</td><td>';
534 $doleditor = new DolEditor('ONLINE_PAYMENT_MESSAGE_FORM', $conf->global->ONLINE_PAYMENT_MESSAGE_FORM, '', 100, 'dolibarr_details', 'In', false, true, true, ROWS_2, '90%');
535 $doleditor->Create();
536 print '</td></tr>';
537 
538 print '<tr class="oddeven"><td>';
539 print $langs->trans("MessageOK").'</td><td>';
540 $doleditor = new DolEditor('ONLINE_PAYMENT_MESSAGE_OK', $conf->global->ONLINE_PAYMENT_MESSAGE_OK, '', 100, 'dolibarr_details', 'In', false, true, true, ROWS_2, '90%');
541 $doleditor->Create();
542 print '</td></tr>';
543 
544 print '<tr class="oddeven"><td>';
545 print $langs->trans("MessageKO").'</td><td>';
546 $doleditor = new DolEditor('ONLINE_PAYMENT_MESSAGE_KO', $conf->global->ONLINE_PAYMENT_MESSAGE_KO, '', 100, 'dolibarr_details', 'In', false, true, true, ROWS_2, '90%');
547 $doleditor->Create();
548 print '</td></tr>';
549 
550 print '<tr class="oddeven"><td>';
551 print $langs->trans("ONLINE_PAYMENT_SENDEMAIL").'</td><td>';
552 print img_picto('', 'email', 'class="pictofixedwidth"');
553 print '<input class="minwidth200" type="text" name="ONLINE_PAYMENT_SENDEMAIL" value="'.$conf->global->ONLINE_PAYMENT_SENDEMAIL.'">';
554 print ' &nbsp; <span class="opacitymedium">'.$langs->trans("Example").': myemail@myserver.com, Payment service &lt;myemail2@myserver2.com&gt;</span>';
555 print '</td></tr>';
556 
557 print '</table>';
558 print '</div>';
559 
560 print '<br>';
561 
562 print '<div class="div-table-responsive-no-min">';
563 print '<table class="noborder centpercent">';
564 
565 print '<tr class="liste_titre">';
566 print '<td>'.$langs->trans("UrlGenerationParameters").'</td>';
567 print '<td>'.$langs->trans("Value").'</td>';
568 print "</tr>\n";
569 
570 // Payment token for URL
571 print '<tr class="oddeven"><td>';
572 print $langs->trans("SecurityToken").'</td><td>';
573 print '<input class="minwidth300" type="text" id="PAYMENT_SECURITY_TOKEN" name="PAYMENT_SECURITY_TOKEN" value="'.$conf->global->PAYMENT_SECURITY_TOKEN.'">';
574 if (!empty($conf->use_javascript_ajax)) {
575  print '&nbsp;'.img_picto($langs->trans('Generate'), 'refresh', 'id="generate_token" class="linkobject"');
576 }
577 if (!empty($conf->global->PAYMENT_SECURITY_ACCEPT_ANY_TOKEN)) {
578  $langs->load("errors");
579  print img_warning($langs->trans("WarningTheHiddenOptionIsOn", 'PAYMENT_SECURITY_ACCEPT_ANY_TOKEN'), '', 'pictowarning marginleftonly');
580 }
581 print '</td></tr>';
582 
583 print '<tr class="oddeven"><td>';
584 print $langs->trans("SecurityTokenIsUnique").'</td><td>';
585 if ($conf->use_javascript_ajax) {
586  print ajax_constantonoff('PAYMENT_SECURITY_TOKEN_UNIQUE', null, null, 0, 0, 1);
587 } else {
588  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
589  print $form->selectarray("PAYMENT_SECURITY_TOKEN_UNIQUE", $arrval, $conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE);
590 }
591 print '</td></tr>';
592 
593 print '</table>';
594 print '</div>';
595 
596 print dol_get_fiche_end();
597 
598 print $form->buttonsSaveCancel("Save", '');
599 
600 print '</form>';
601 
602 print '<br><br>';
603 
604 
605 $token = '';
606 
607 include DOL_DOCUMENT_ROOT.'/core/tpl/onlinepaymentlinks.tpl.php';
608 
609 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'));
610 
611 if (!empty($conf->use_javascript_ajax)) {
612  print "\n".'<script type="text/javascript">';
613  print '$(document).ready(function () {
614  $("#apidoc").hide();
615  $("#apidoca").click(function() {
616  console.log("We click on apidoca show/hide");
617  $("#apidoc").show();
618  $("#apidoca").hide();
619  return false;
620  });
621  });';
622  print '</script>';
623 }
624 
625 // End of page
626 llxFooter();
627 $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='', $morecss='')
On/off button for constant.
Definition: ajax.lib.php:601
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