dolibarr  19.0.0-dev
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', 3);
237  $url .= '?test=1';
238  //global $dolibarr_main_instance_unique_id;
239  //$url .= '&securitykey='.dol_hash('stripeipn-'.$dolibarr_main_instance_unique_id.'-'.$conf->global->STRIPE_TEST_PUBLISHABLE_KEY, 'md5');
240  $out .= '<input type="text" id="onlinetestwebhookurl" class="minwidth500" value="'.$url.'" disabled>';
241  $out .= ajax_autoselect("onlinetestwebhookurl", 0);
242  print '<br>'.$out;
243  print '</td><td>';
244  if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
245  if (!empty($conf->global->STRIPE_TEST_WEBHOOK_KEY) && !empty($conf->global->STRIPE_TEST_SECRET_KEY) && !empty($conf->global->STRIPE_TEST_WEBHOOK_ID)) {
246  \Stripe\Stripe::setApiKey($conf->global->STRIPE_TEST_SECRET_KEY);
247  $endpoint = \Stripe\WebhookEndpoint::retrieve($conf->global->STRIPE_TEST_WEBHOOK_ID);
248  $endpoint->enabled_events = $stripearrayofwebhookevents;
249  if (GETPOST('webhook', 'alpha') == $conf->global->STRIPE_TEST_WEBHOOK_ID) {
250  if (!GETPOST('status', 'alpha')) {
251  $endpoint->disabled = true;
252  } else {
253  $endpoint->disabled = false;
254  }
255  }
256  $endpoint->url = $url;
257  $endpoint->save();
258  if ($endpoint->status == 'enabled') {
259  print '<a class="reposition" href="'.$_SERVER['PHP_SELF'].'?action=ipn&webhook='.$endpoint->id.'&status=0">';
260  print img_picto($langs->trans("Activated"), 'switch_on');
261  } else {
262  print '<a class="reposition" href="'.$_SERVER['PHP_SELF'].'?action=ipn&webhook='.$endpoint->id.'&status=1">';
263  print img_picto($langs->trans("Disabled"), 'switch_off');
264  }
265  //print $endpoint;
266  } else {
267  print img_picto($langs->trans("Inactive"), 'statut5');
268  }
269  }
270  print'</td></tr>';
271 } else {
272  print '<tr class="oddeven"><td>'.$langs->trans("StripeConnect").'</td>';
273  print '<td><b>'.$langs->trans("StripeConnect_Mode").'</b><br>';
274  print $langs->trans("STRIPE_APPLICATION_FEE_PLATFORM").' ';
275  print price($conf->global->STRIPE_APPLICATION_FEE_PERCENT);
276  print '% + ';
277  print price($conf->global->STRIPE_APPLICATION_FEE);
278  print ' '.$langs->getCurrencySymbol($conf->currency).' '.$langs->trans("minimum").' '.price($conf->global->STRIPE_APPLICATION_FEE_MINIMAL).' '.$langs->getCurrencySymbol($conf->currency);
279  print '</td><td></td></tr>';
280 }
281 
282 if (empty($conf->stripeconnect->enabled)) {
283  print '<tr class="oddeven"><td>';
284  print '<span class="fieldrequired">'.$langs->trans("STRIPE_LIVE_PUBLISHABLE_KEY").'</span></td><td>';
285  print '<input class="minwidth300" type="text" name="STRIPE_LIVE_PUBLISHABLE_KEY" value="'.getDolGlobalString('STRIPE_LIVE_PUBLISHABLE_KEY').'" placeholder="'.$langs->trans("Example").': pk_live_xxxxxxxxxxxxxxxxxxxxxxxx">';
286  print '</td><td></td></tr>';
287 
288  print '<tr class="oddeven"><td>';
289  print '<span class="fieldrequired">'.$langs->trans("STRIPE_LIVE_SECRET_KEY").'</span></td><td>';
290  print '<input class="minwidth300" type="text" name="STRIPE_LIVE_SECRET_KEY" value="'.getDolGlobalString('STRIPE_LIVE_SECRET_KEY').'" placeholder="'.$langs->trans("Example").': sk_live_xxxxxxxxxxxxxxxxxxxxxxxx">';
291  print '</td><td></td></tr>';
292 
293  print '<tr class="oddeven"><td>';
294  print '<span class="titlefield">'.$langs->trans("STRIPE_LIVE_WEBHOOK_KEY").'</span></td><td>';
295  if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
296  print '<input class="minwidth300" type="text" name="STRIPE_LIVE_WEBHOOK_ID" value="'.getDolGlobalString('STRIPE_LIVE_WEBHOOK_ID').'" placeholder="'.$langs->trans("Example").': we_xxxxxxxxxxxxxxxxxxxxxxxx">';
297  print '<br>';
298  }
299  print '<input class="minwidth300" type="text" name="STRIPE_LIVE_WEBHOOK_KEY" value="'.getDolGlobalString('STRIPE_LIVE_WEBHOOK_KEY').'" placeholder="'.$langs->trans("Example").': whsec_xxxxxxxxxxxxxxxxxxxxxxxx">';
300  $out = img_picto('', 'globe', 'class="pictofixedwidth"').' <span class="opacitymedium">'.$langs->trans("ToOfferALinkForLiveWebhook").'</span> ';
301  $url = dol_buildpath('/public/stripe/ipn.php', 3);
302  //global $dolibarr_main_instance_unique_id;
303  //$url .= '?securitykey='.dol_hash('stripeipn-'.$dolibarr_main_instance_unique_id.'-'.$conf->global->STRIPE_LIVE_PUBLISHABLE_KEY, 'md5');
304  $out .= '<input type="text" id="onlinelivewebhookurl" class="minwidth500" value="'.$url.'" disabled>';
305  $out .= ajax_autoselect("onlinelivewebhookurl", 0);
306  print '<br>'.$out;
307  print '</td><td>';
308  if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
309  if (!empty($conf->global->STRIPE_LIVE_WEBHOOK_KEY) && !empty($conf->global->STRIPE_LIVE_SECRET_KEY) && !empty($conf->global->STRIPE_LIVE_WEBHOOK_ID)) {
310  \Stripe\Stripe::setApiKey($conf->global->STRIPE_LIVE_SECRET_KEY);
311  $endpoint = \Stripe\WebhookEndpoint::retrieve($conf->global->STRIPE_LIVE_WEBHOOK_ID);
312  $endpoint->enabled_events = $stripearrayofwebhookevents;
313  if (GETPOST('webhook', 'alpha') == $conf->global->STRIPE_LIVE_WEBHOOK_ID) {
314  if (empty(GETPOST('status', 'alpha'))) {
315  $endpoint->disabled = true;
316  } else {
317  $endpoint->disabled = false;
318  }
319  }
320  $endpoint->url = $url;
321  $endpoint->save();
322  if ($endpoint->status == 'enabled') {
323  print '<a class="reposition" href="'.$_SERVER['PHP_SELF'].'?action=ipn&webhook='.$endpoint->id.'&status=0">';
324  print img_picto($langs->trans("Activated"), 'switch_on');
325  } else {
326  print '<a class="reposition" href="'.$_SERVER['PHP_SELF'].'?action=ipn&webhook='.$endpoint->id.'&status=1">';
327  print img_picto($langs->trans("Disabled"), 'switch_off');
328  }
329  //print $endpoint;
330  } else {
331  print img_picto($langs->trans("Inactive"), 'statut5');
332  }
333  }
334  print '</td></tr>';
335 } else {
336  print '<tr class="oddeven"><td>'.$langs->trans("StripeConnect").'</td>';
337  print '<td>'.$langs->trans("StripeConnect_Mode").'</td><td></td></tr>';
338 }
339 
340 
341 print '</table>';
342 print '</div>';
343 
344 print '<br>';
345 
346 
347 print '<div class="div-table-responsive-no-min">';
348 print '<table class="noborder centpercent">';
349 print '<tr class="liste_titre">';
350 print '<td>'.$langs->trans("UsageParameter").'</td>';
351 print '<td>'.$langs->trans("Value").'</td>';
352 print "</tr>\n";
353 
354 print '<tr class="oddeven"><td>';
355 print $langs->trans("PublicVendorName").'</td><td>';
356 print '<input class="minwidth300" type="text" name="ONLINE_PAYMENT_CREDITOR" value="'.getDolGlobalString('ONLINE_PAYMENT_CREDITOR').'">';
357 print ' &nbsp; <span class="opacitymedium">'.$langs->trans("Example").': '.$mysoc->name.'</span>';
358 print '</td></tr>';
359 
360 print '<tr class="oddeven"><td>';
361 print $langs->trans("StripeUserAccountForActions").'</td><td>';
362 print img_picto('', 'user', 'class="pictofixedwidth"').$form->select_dolusers(getDolGlobalString('STRIPE_USER_ACCOUNT_FOR_ACTIONS'), 'STRIPE_USER_ACCOUNT_FOR_ACTIONS', 0);
363 print '</td></tr>';
364 
365 print '<tr class="oddeven"><td>';
366 print $langs->trans("BankAccount").'</td><td>';
367 print img_picto('', 'bank_account', 'class="pictofixedwidth"');
368 $form->select_comptes(getDolGlobalString('STRIPE_BANK_ACCOUNT_FOR_PAYMENTS'), 'STRIPE_BANK_ACCOUNT_FOR_PAYMENTS', 0, '', 1);
369 print '</td></tr>';
370 
371 if (getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) { // What is this for ?
372  print '<tr class="oddeven"><td>';
373  print $langs->trans("BankAccountForBankTransfer").'</td><td>';
374  print img_picto('', 'bank_account', 'class="pictofixedwidth"');
375  $form->select_comptes(getDolGlobalString('STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS'), 'STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS', 0, '', 1);
376  print '</td></tr>';
377 }
378 
379 // Card Present for Stripe Terminal
380 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
381  print '<tr class="oddeven"><td>';
382  print $langs->trans("STRIPE_CARD_PRESENT").'</td><td>';
383  if ($conf->use_javascript_ajax) {
384  print ajax_constantonoff('STRIPE_CARD_PRESENT');
385  } else {
386  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
387  print $form->selectarray("STRIPE_CARD_PRESENT", $arrval, $conf->global->STRIPE_CARD_PRESENT);
388  }
389  print '</td></tr>';
390 }
391 
392 // Locations for Stripe Terminal
393 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
394  print '<tr class="oddeven"><td>';
395  print $langs->trans("TERMINAL_LOCATION").'</td><td>';
396  $service = 'StripeTest';
397  $servicestatus = 0;
398  if (!empty($conf->global->STRIPE_LIVE) && !GETPOST('forcesandbox', 'alpha')) {
399  $service = 'StripeLive';
400  $servicestatus = 1;
401  }
402 
403  try {
404  global $stripearrayofkeysbyenv;
405  $site_account = $stripearrayofkeysbyenv[$servicestatus]['secret_key'];
406  if (!empty($site_account)) {
407  \Stripe\Stripe::setApiKey($site_account);
408  }
409  if (isModEnabled('stripe') && (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox', 'alpha'))) {
410  $service = 'StripeTest';
411  $servicestatus = '0';
412  dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode', 'Stripe'), '', 'warning');
413  } else {
414  $service = 'StripeLive';
415  $servicestatus = '1';
416  }
417  $stripe = new Stripe($db);
418  if (!empty($site_account)) {
419  // If $site_account not defined, then key not set and no way to call API Location
420  $stripeacc = $stripe->getStripeAccount($service);
421  if ($stripeacc) {
422  $locations = \Stripe\Terminal\Location::all('', array("stripe_account" => $stripeacc));
423  } else {
424  $locations = \Stripe\Terminal\Location::all();
425  }
426  }
427  } catch (Exception $e) {
428  print $e->getMessage().'<br>';
429  }
430 
431  // Define the array $location
432  $location = array();
433  $location[""] = $langs->trans("NotDefined");
434  if (!empty($locations)) {
435  foreach ($locations as $tmplocation) {
436  $location[$tmplocation->id] = $tmplocation->display_name;
437  }
438  }
439 
440  print $form->selectarray("STRIPE_LOCATION", $location, getDolGlobalString('STRIPE_LOCATION'));
441  print '</td></tr>';
442 }
443 
444 print '<tr class="oddeven"><td>';
445 print $langs->trans("STRIPE_SEPA_DIRECT_DEBIT").'</td><td>';
446 if ($conf->use_javascript_ajax) {
447  print ajax_constantonoff('STRIPE_SEPA_DIRECT_DEBIT');
448 } else {
449  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
450  print $form->selectarray("STRIPE_SEPA_DIRECT_DEBIT", $arrval, getDolGlobalString('STRIPE_SEPA_DIRECT_DEBIT'));
451 }
452 print '</td></tr>';
453 
454 
455 // Activate Klarna
456 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
457  print '<tr class="oddeven"><td>';
458  print $langs->trans("STRIPE_KLARNA").'</td><td>';
459  if ($conf->use_javascript_ajax) {
460  print ajax_constantonoff('STRIPE_KLARNA');
461  } else {
462  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
463  print $form->selectarray("STRIPE_KLARNA", $arrval, $conf->global->STRIPE_KLARNA);
464  }
465  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForKlarnaCustomers").'</span>';
466  print '</td></tr>';
467 }
468 
469 // Activate Bancontact
470 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
471  print '<tr class="oddeven"><td>';
472  print $langs->trans("STRIPE_BANCONTACT").'</td><td>';
473  if ($conf->use_javascript_ajax) {
474  print ajax_constantonoff('STRIPE_BANCONTACT');
475  } else {
476  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
477  print $form->selectarray("STRIPE_BANCONTACT", $arrval, $conf->global->STRIPE_BANCONTACT);
478  }
479  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForBECustomers").'</span>';
480  print '</td></tr>';
481 }
482 
483 // Activate iDEAL
484 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
485  print '<tr class="oddeven"><td>';
486  print $langs->trans("STRIPE_IDEAL").'</td><td>';
487  if ($conf->use_javascript_ajax) {
488  print ajax_constantonoff('STRIPE_IDEAL');
489  } else {
490  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
491  print $form->selectarray("STRIPE_IDEAL", $arrval, $conf->global->STRIPE_SEPA_DIRECT_DEBIT);
492  }
493  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForNLCustomers").'</span>';
494  print '</td></tr>';
495 }
496 
497 // Activate Giropay
498 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
499  print '<tr class="oddeven"><td>';
500  print $langs->trans("STRIPE_GIROPAY").'</td><td>';
501  if ($conf->use_javascript_ajax) {
502  print ajax_constantonoff('STRIPE_GIROPAY');
503  } else {
504  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
505  print $form->selectarray("STRIPE_GIROPAY", $arrval, $conf->global->STRIPE_GIROPAY);
506  }
507  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForDECustomers").'</span>';
508  print '</td></tr>';
509 }
510 
511 // Activate Sofort
512 if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // TODO Not used by current code
513  print '<tr class="oddeven"><td>';
514  print $langs->trans("STRIPE_SOFORT").'</td><td>';
515  if ($conf->use_javascript_ajax) {
516  print ajax_constantonoff('STRIPE_SOFORT');
517  } else {
518  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
519  print $form->selectarray("STRIPE_SOFORT", $arrval, $conf->global->STRIPE_SOFORT);
520  }
521  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("ExampleOnlyForATBEDEITNLESCustomers").'</span>';
522  print '</td></tr>';
523 }
524 
525 print '<tr class="oddeven"><td>';
526 print $langs->trans("CSSUrlForPaymentForm").'</td><td>';
527 print '<input class="width500" type="text" name="ONLINE_PAYMENT_CSS_URL" value="'.$conf->global->ONLINE_PAYMENT_CSS_URL.'">';
528 print ' &nbsp; <span class="opacitymedium">'.$langs->trans("Example").': http://mysite/mycss.css</span>';
529 print '</td></tr>';
530 
531 print '<tr class="oddeven"><td>';
532 print $langs->trans("MessageForm").'</td><td>';
533 $doleditor = new DolEditor('ONLINE_PAYMENT_MESSAGE_FORM', $conf->global->ONLINE_PAYMENT_MESSAGE_FORM, '', 100, 'dolibarr_details', 'In', false, true, true, ROWS_2, '90%');
534 $doleditor->Create();
535 print '</td></tr>';
536 
537 print '<tr class="oddeven"><td>';
538 print $langs->trans("MessageOK").'</td><td>';
539 $doleditor = new DolEditor('ONLINE_PAYMENT_MESSAGE_OK', $conf->global->ONLINE_PAYMENT_MESSAGE_OK, '', 100, 'dolibarr_details', 'In', false, true, true, ROWS_2, '90%');
540 $doleditor->Create();
541 print '</td></tr>';
542 
543 print '<tr class="oddeven"><td>';
544 print $langs->trans("MessageKO").'</td><td>';
545 $doleditor = new DolEditor('ONLINE_PAYMENT_MESSAGE_KO', $conf->global->ONLINE_PAYMENT_MESSAGE_KO, '', 100, 'dolibarr_details', 'In', false, true, true, ROWS_2, '90%');
546 $doleditor->Create();
547 print '</td></tr>';
548 
549 print '<tr class="oddeven"><td>';
550 print $langs->trans("ONLINE_PAYMENT_SENDEMAIL").'</td><td>';
551 print img_picto('', 'email', 'class="pictofixedwidth"');
552 print '<input class="minwidth200" type="text" name="ONLINE_PAYMENT_SENDEMAIL" value="'.$conf->global->ONLINE_PAYMENT_SENDEMAIL.'">';
553 print ' &nbsp; <span class="opacitymedium">'.$langs->trans("Example").': myemail@myserver.com, Payment service &lt;myemail2@myserver2.com&gt;</span>';
554 print '</td></tr>';
555 
556 print '</table>';
557 print '</div>';
558 
559 print '<br>';
560 
561 print '<div class="div-table-responsive-no-min">';
562 print '<table class="noborder centpercent">';
563 
564 print '<tr class="liste_titre">';
565 print '<td>'.$langs->trans("UrlGenerationParameters").'</td>';
566 print '<td>'.$langs->trans("Value").'</td>';
567 print "</tr>\n";
568 
569 // Payment token for URL
570 print '<tr class="oddeven"><td>';
571 print $langs->trans("SecurityToken").'</td><td>';
572 print '<input class="minwidth300" type="text" id="PAYMENT_SECURITY_TOKEN" name="PAYMENT_SECURITY_TOKEN" value="'.$conf->global->PAYMENT_SECURITY_TOKEN.'">';
573 if (!empty($conf->use_javascript_ajax)) {
574  print '&nbsp;'.img_picto($langs->trans('Generate'), 'refresh', 'id="generate_token" class="linkobject"');
575 }
576 if (!empty($conf->global->PAYMENT_SECURITY_ACCEPT_ANY_TOKEN)) {
577  $langs->load("errors");
578  print img_warning($langs->trans("WarningTheHiddenOptionIsOn", 'PAYMENT_SECURITY_ACCEPT_ANY_TOKEN'), '', 'pictowarning marginleftonly');
579 }
580 print '</td></tr>';
581 
582 print '<tr class="oddeven"><td>';
583 print $langs->trans("SecurityTokenIsUnique").'</td><td>';
584 if ($conf->use_javascript_ajax) {
585  print ajax_constantonoff('PAYMENT_SECURITY_TOKEN_UNIQUE', null, null, 0, 0, 1);
586 } else {
587  $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
588  print $form->selectarray("PAYMENT_SECURITY_TOKEN_UNIQUE", $arrval, $conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE);
589 }
590 print '</td></tr>';
591 
592 print '</table>';
593 print '</div>';
594 
595 print dol_get_fiche_end();
596 
597 print $form->buttonsSaveCancel("Save", '');
598 
599 print '</form>';
600 
601 print '<br><br>';
602 
603 
604 $token = '';
605 
606 include DOL_DOCUMENT_ROOT.'/core/tpl/onlinepaymentlinks.tpl.php';
607 
608 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'));
609 
610 if (getDolGlobalString('STRIPE_SEPA_DIRECT_DEBIT')) {
611  print info_admin($langs->trans("ExampleOfTestBankAcountForSEPA", 'AT611904300234573201 (pending->succeed) or AT861904300235473202 (pending->failed)'));
612 }
613 
614 
615 
616 if (!empty($conf->use_javascript_ajax)) {
617  print "\n".'<script type="text/javascript">';
618  print '$(document).ready(function () {
619  $("#apidoc").hide();
620  $("#apidoca").click(function() {
621  console.log("We click on apidoca show/hide");
622  $("#apidoc").show();
623  $("#apidoca").hide();
624  return false;
625  });
626  });';
627  print '</script>';
628 }
629 
630 // End of page
631 llxFooter();
632 $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:638
ajax_constantonoff($code, $input=array(), $entity=null, $revertonoff=0, $strict=0, $forcereload=0, $marginleftonlyshort=2, $forcenoajax=0, $setzeroinsteadofdel=0, $suffix='', $mode='', $morecss='inline-block')
On/off button for constant.
Definition: ajax.lib.php:630
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.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
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.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
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.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
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