39 if (!defined(
'NOLOGIN')) {
42 if (!defined(
'NOCSRFCHECK')) {
43 define(
"NOCSRFCHECK", 1);
45 if (!defined(
'NOIPCHECK')) {
46 define(
'NOIPCHECK',
'1');
48 if (!defined(
'NOBROWSERNOTIF')) {
49 define(
'NOBROWSERNOTIF',
'1');
54 $entity = (!empty($_GET[
'entity']) ? (int) $_GET[
'entity'] : (!empty($_POST[
'entity']) ? (int) $_POST[
'entity'] : (!empty($_GET[
'e']) ? (int) $_GET[
'e'] : (!empty($_POST[
'e']) ? (int) $_POST[
'e'] : 1))));
55 if (is_numeric($entity)) {
56 define(
"DOLENTITY", $entity);
60 require
'../../main.inc.php';
61 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
62 require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
63 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
64 require_once DOL_DOCUMENT_ROOT.
'/eventorganization/class/conferenceorboothattendee.class.php';
65 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
66 require_once DOL_DOCUMENT_ROOT.
'/societe/class/societeaccount.class.php';
67 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
68 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
70 include_once DOL_DOCUMENT_ROOT.
'/core/class/hookmanager.class.php';
72 $hookmanager->initHooks(array(
'newpayment'));
75 $langs->loadLangs(array(
"main",
"other",
"dict",
"bills",
"companies",
"errors",
"paybox",
"paypal",
"stripe"));
80 $action =
GETPOST(
'action',
'aZ09');
89 $suffix =
GETPOST(
"suffix",
'aZ09');
91 if (!
GETPOST(
"currency",
'alpha')) {
92 $currency = $conf->currency;
94 $currency =
GETPOST(
"currency",
'aZ09');
97 $getpostlang =
GETPOST(
'lang',
'aZ09');
100 if (!
GETPOST(
"amount",
'alpha') && !$source) {
101 print $langs->trans(
'ErrorBadParameters').
" - amount or source";
104 if (is_numeric($amount) && !
GETPOST(
"tag",
'alpha') && !$source) {
105 print $langs->trans(
'ErrorBadParameters').
" - tag or source";
108 if ($source && !
GETPOST(
"ref",
'alpha')) {
109 print $langs->trans(
'ErrorBadParameters').
" - ref";
114 if ($source ==
'organizedeventregistration') {
118 $invoiceid =
GETPOST(
'ref',
'int');
121 $resultinvoice = $invoice->fetch($invoiceid);
123 if ($resultinvoice <= 0) {
136 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"eventorganization_conferenceorboothattendee";
137 $sql .=
" WHERE fk_invoice = ".((int) $invoiceid);
138 $resql = $db->query($sql);
140 $obj = $db->fetch_object(
$resql);
142 $attendeeid = $obj->rowid;
146 if ($attendeeid > 0) {
147 $resultattendee = $attendee->fetch($attendeeid);
149 if ($resultattendee <= 0) {
152 $attendee->fetch_projet();
154 $amount =
price2num($invoice->total_ttc);
156 $thirdparty =
new Societe($db);
157 $resultthirdparty = $thirdparty->fetch($invoice->socid);
158 if ($resultthirdparty <= 0) {
161 $object = $thirdparty;
165 } elseif ($source ==
'boothlocation') {
169 $resultinvoice = $invoice->fetch($invoiceid);
170 if ($resultinvoice <= 0) {
173 $amount =
price2num($invoice->total_ttc);
175 $thirdparty =
new Societe($db);
176 $resultthirdparty = $thirdparty->fetch($invoice->socid);
177 if ($resultthirdparty <= 0) {
180 $object = $thirdparty;
185 $paymentmethod =
GETPOST(
'paymentmethod',
'alphanohtml') ?
GETPOST(
'paymentmethod',
'alphanohtml') :
'';
186 $validpaymentmethod = array();
189 foreach ($_POST as $key => $val) {
191 if (preg_match(
'/^dopayment_(.*)$/', $key, $reg)) {
192 $paymentmethod = $reg[1];
201 $urlwithroot = DOL_MAIN_URL_ROOT;
203 $urlok = $urlwithroot.
'/public/payment/paymentok.php?';
204 $urlko = $urlwithroot.
'/public/payment/paymentko.php?';
207 $ref = $REF =
GETPOST(
'ref',
'alpha');
208 $TAG =
GETPOST(
"tag",
'alpha');
209 $FULLTAG =
GETPOST(
"fulltag",
'alpha');
210 $SECUREKEY =
GETPOST(
"securekey");
212 if ($paymentmethod && !preg_match(
'/'.preg_quote(
'PM='.$paymentmethod,
'/').
'/', $FULLTAG)) {
213 $FULLTAG .= ($FULLTAG ?
'.' :
'').
'PM='.$paymentmethod;
216 if (!empty($suffix)) {
217 $urlok .=
'suffix='.urlencode($suffix).
'&';
218 $urlko .=
'suffix='.urlencode($suffix).
'&';
221 $urlok .=
's='.urlencode($source).
'&';
222 $urlko .=
's='.urlencode($source).
'&';
225 $urlok .=
'ref='.urlencode($REF).
'&';
226 $urlko .=
'ref='.urlencode($REF).
'&';
229 $urlok .=
'tag='.urlencode($TAG).
'&';
230 $urlko .=
'tag='.urlencode($TAG).
'&';
232 if (!empty($FULLTAG)) {
233 $urlok .=
'fulltag='.urlencode($FULLTAG).
'&';
234 $urlko .=
'fulltag='.urlencode($FULLTAG).
'&';
236 if (!empty($SECUREKEY)) {
237 $urlok .=
'securekey='.urlencode($SECUREKEY).
'&';
238 $urlko .=
'securekey='.urlencode($SECUREKEY).
'&';
240 if (!empty($entity)) {
241 $urlok .=
'e='.urlencode($entity).
'&';
242 $urlko .=
'e='.urlencode($entity).
'&';
244 if (!empty($getpostlang)) {
245 $urlok .=
'lang='.urlencode($getpostlang).
'&';
246 $urlko .=
'lang='.urlencode($getpostlang).
'&';
248 $urlok = preg_replace(
'/&$/',
'', $urlok);
249 $urlko = preg_replace(
'/&$/',
'', $urlko);
254 if ((empty($paymentmethod) || $paymentmethod ==
'paypal') &&
isModEnabled(
'paypal')) {
255 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypal.lib.php';
256 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypalfunctions.lib.php';
261 $PAYPAL_API_OK = $urlok;
265 $PAYPAL_API_KO = $urlko;
267 if (empty($PAYPAL_API_USER)) {
271 if (empty($PAYPAL_API_PASSWORD)) {
272 dol_print_error(
'',
"Paypal setup param PAYPAL_API_PASSWORD not defined");
275 if (empty($PAYPAL_API_SIGNATURE)) {
276 dol_print_error(
'',
"Paypal setup param PAYPAL_API_SIGNATURE not defined");
280 if ((empty($paymentmethod) || $paymentmethod ==
'paybox') &&
isModEnabled(
'paybox')) {
283 if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe')) {
284 require_once DOL_DOCUMENT_ROOT.
'/stripe/config.php';
288 $validpaymentmethod = getValidOnlinePaymentMethods($paymentmethod);
292 'paymentmethod' => $paymentmethod,
293 'validpaymentmethod' => &$validpaymentmethod
295 $reshook = $hookmanager->executeHooks(
'doValidatePayment', $parameters, $object, $action);
298 } elseif ($reshook > 0) {
299 print $hookmanager->resPrint;
303 $tmpsource = $source;
304 if ($tmpsource ==
'membersubscription') {
305 $tmpsource =
'member';
308 if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) {
310 if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) {
311 if ($tmpsource && $REF) {
313 $tokenisok =
dol_verifyHash($conf->global->PAYMENT_SECURITY_TOKEN.$tmpsource.$REF, $SECUREKEY,
'2');
315 if ($tmpsource != $source) {
316 $tokenisok =
dol_verifyHash($conf->global->PAYMENT_SECURITY_TOKEN.$source.$REF, $SECUREKEY,
'2');
319 $tokenisok =
dol_verifyHash($conf->global->PAYMENT_SECURITY_TOKEN, $SECUREKEY,
'2');
322 $tokenisok = ($conf->global->PAYMENT_SECURITY_TOKEN == $SECUREKEY);
326 if (empty($conf->global->PAYMENT_SECURITY_ACCEPT_ANY_TOKEN)) {
329 dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING);
334 print
'<div class="error">Bad value for key.</div>';
340 if (!empty($paymentmethod) && empty($validpaymentmethod[$paymentmethod])) {
341 print
'Payment module for payment method '.$paymentmethod.
' is not active';
344 if (empty($validpaymentmethod)) {
345 print
'No active payment module (Paypal, Stripe, Paybox, ...)';
350 $creditor = $mysoc->name;
351 $paramcreditor =
'ONLINE_PAYMENT_CREDITOR';
352 $paramcreditorlong =
'ONLINE_PAYMENT_CREDITOR_'.$suffix;
353 if (!empty($conf->global->$paramcreditorlong)) {
354 $creditor = $conf->global->$paramcreditorlong;
355 } elseif (!empty($conf->global->$paramcreditor)) {
356 $creditor = $conf->global->$paramcreditor;
367 if ($action ==
'dopayment') {
368 dol_syslog(
"--- newpayment.php Execute action = ".$action.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha'), LOG_DEBUG, 0,
'_payment');
370 if ($paymentmethod ==
'paypal') {
372 $PAYPAL_PAYMENT_TYPE =
'Sale';
375 $origfulltag =
GETPOST(
"fulltag",
'alpha');
376 $shipToName =
GETPOST(
"shipToName",
'alpha');
377 $shipToStreet =
GETPOST(
"shipToStreet",
'alpha');
378 $shipToCity =
GETPOST(
"shipToCity",
'alpha');
379 $shipToState =
GETPOST(
"shipToState",
'alpha');
380 $shipToCountryCode =
GETPOST(
"shipToCountryCode",
'alpha');
381 $shipToZip =
GETPOST(
"shipToZip",
'alpha');
382 $shipToStreet2 =
GETPOST(
"shipToStreet2",
'alpha');
383 $phoneNum =
GETPOST(
"phoneNum",
'alpha');
384 $email =
GETPOST(
"email",
'alpha');
385 $desc =
GETPOST(
"desc",
'alpha');
386 $thirdparty_id =
GETPOST(
'thirdparty_id',
'int');
389 if ($shipToCountryCode ==
'ID' && !preg_match(
'/\-/', $shipToState)) {
390 $shipToState =
'ID-'.$shipToState;
393 if (empty($PAYPAL_API_PRICE) || !is_numeric($PAYPAL_API_PRICE)) {
394 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
398 } elseif (!$origfulltag) {
399 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
405 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG);
408 $PAYPAL_API_DEVISE =
"USD";
409 if (!empty($currency)) {
410 $PAYPAL_API_DEVISE = $currency;
415 dol_syslog(
"PAYPAL_API_USER: $PAYPAL_API_USER", LOG_DEBUG);
416 dol_syslog(
"PAYPAL_API_PASSWORD: ".preg_replace(
'/./',
'*', $PAYPAL_API_PASSWORD), LOG_DEBUG);
417 dol_syslog(
"PAYPAL_API_SIGNATURE: $PAYPAL_API_SIGNATURE", LOG_DEBUG);
418 dol_syslog(
"PAYPAL_API_SANDBOX: $PAYPAL_API_SANDBOX", LOG_DEBUG);
419 dol_syslog(
"PAYPAL_API_OK: $PAYPAL_API_OK", LOG_DEBUG);
420 dol_syslog(
"PAYPAL_API_KO: $PAYPAL_API_KO", LOG_DEBUG);
421 dol_syslog(
"PAYPAL_API_PRICE: $PAYPAL_API_PRICE", LOG_DEBUG);
422 dol_syslog(
"PAYPAL_API_DEVISE: $PAYPAL_API_DEVISE", LOG_DEBUG);
424 dol_syslog(
"shipToName: $shipToName", LOG_DEBUG);
425 dol_syslog(
"shipToStreet: $shipToStreet", LOG_DEBUG);
426 dol_syslog(
"shipToCity: $shipToCity", LOG_DEBUG);
427 dol_syslog(
"shipToState: $shipToState", LOG_DEBUG);
428 dol_syslog(
"shipToCountryCode: $shipToCountryCode", LOG_DEBUG);
429 dol_syslog(
"shipToZip: $shipToZip", LOG_DEBUG);
430 dol_syslog(
"shipToStreet2: $shipToStreet2", LOG_DEBUG);
435 dol_syslog(
"SCRIPT_URI: ".(empty($_SERVER[
"SCRIPT_URI"]) ?
'' : $_SERVER[
"SCRIPT_URI"]), LOG_DEBUG);
438 $mesg =
print_paypal_redirect($PAYPAL_API_PRICE, $PAYPAL_API_DEVISE, $PAYPAL_PAYMENT_TYPE, $PAYPAL_API_OK, $PAYPAL_API_KO, $FULLTAG);
445 if ($paymentmethod ==
'paybox') {
447 $email = $conf->global->ONLINE_PAYMENT_SENDEMAIL;
448 $thirdparty_id =
GETPOST(
'thirdparty_id',
'int');
450 $origfulltag =
GETPOST(
"fulltag",
'alpha');
453 $urlok = preg_replace(
'/securekey=[^&]+&?/',
'', $urlok);
454 $urlko = preg_replace(
'/securekey=[^&]+&?/',
'', $urlko);
456 if (empty($PRICE) || !is_numeric($PRICE)) {
457 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
458 } elseif (empty($email)) {
459 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ONLINE_PAYMENT_SENDEMAIL"));
460 } elseif (!isValidEMail($email)) {
461 $mesg = $langs->trans(
"ErrorBadEMail", $email);
462 } elseif (!$origfulltag) {
463 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
465 $mesg =
'Error urlok too long '.$urlok.
' (Paybox requires 150, found '.strlen($urlok).
')';
467 $mesg =
'Error urlko too long '.$urlko.
' (Paybox requires 150, found '.strlen($urlok).
')';
471 dol_syslog(
"newpayment.php call paybox api and do redirect", LOG_DEBUG);
473 include_once DOL_DOCUMENT_ROOT.
'/paybox/lib/paybox.lib.php';
481 if ($paymentmethod ==
'stripe') {
482 if (
GETPOST(
'newamount',
'alpha')) {
485 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount")),
null,
'errors');
496 $amountstripe = $amount;
500 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
501 if (!in_array($currency, $arrayzerounitcurrency)) {
502 $amountstripe = $amountstripe * 100;
505 dol_syslog(
"--- newpayment.php Execute action = ".$action.
" STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION'), LOG_DEBUG, 0,
'_payment');
506 dol_syslog(
"GET=".var_export($_GET,
true), LOG_DEBUG, 0,
'_payment');
507 dol_syslog(
"POST=".var_export($_POST,
true), LOG_DEBUG, 0,
'_payment');
509 $stripeToken =
GETPOST(
"stripeToken",
'alpha');
510 $email =
GETPOST(
"email",
'alpha');
511 $thirdparty_id =
GETPOST(
'thirdparty_id',
'int');
513 $dol_id =
GETPOST(
'dol_id',
'int');
514 $vatnumber =
GETPOST(
'vatnumber',
'alpha');
517 dol_syslog(
"POST stripeToken = ".$stripeToken, LOG_DEBUG, 0,
'_payment');
518 dol_syslog(
"POST email = ".$email, LOG_DEBUG, 0,
'_payment');
519 dol_syslog(
"POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
520 dol_syslog(
"POST vatnumber = ".$vatnumber, LOG_DEBUG, 0,
'_payment');
526 if (!
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
529 'dol_version' => DOL_VERSION,
530 'dol_entity' => $conf->entity,
531 'dol_company' => $mysoc->name,
532 'dol_tax_num' => $vatnumber,
536 if (!empty($thirdparty_id)) {
537 $metadata[
"dol_thirdparty_id"] = $thirdparty_id;
540 if ($thirdparty_id > 0) {
541 dol_syslog(
"Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0,
'_payment');
543 $service =
'StripeTest';
545 if (!empty($conf->global->STRIPE_LIVE) && !
GETPOST(
'forcesandbox',
'int')) {
546 $service =
'StripeLive';
550 $thirdparty =
new Societe($db);
551 $thirdparty->fetch($thirdparty_id);
554 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
555 $stripe =
new Stripe($db);
556 $stripeacc = $stripe->getStripeAccount($service);
557 $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1);
558 if (empty($customer)) {
560 dol_syslog(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error, LOG_ERR, 0,
'_payment');
561 setEventMessages(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error,
null,
'errors');
568 $card = $customer->sources->create(array(
"source" => $stripeToken,
"metadata" => $metadata));
570 $card = $stripeToken;
575 dol_syslog(
'Failed to create card record', LOG_WARNING, 0,
'_payment');
579 if (!empty($FULLTAG)) {
580 $metadata[
"FULLTAG"] = $FULLTAG;
582 if (!empty($dol_id)) {
583 $metadata[
"dol_id"] = $dol_id;
585 if (!empty($dol_type)) {
586 $metadata[
"dol_type"] = $dol_type;
589 dol_syslog(
"Create charge on card ".$card->id, LOG_DEBUG, 0,
'_payment');
590 $charge = \Stripe\Charge::create(array(
591 'amount' =>
price2num($amountstripe,
'MU'),
592 'currency' => $currency,
594 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
595 'metadata' => $metadata,
596 'customer' => $customer->id,
598 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
599 ), array(
"idempotency_key" =>
"$FULLTAG",
"stripe_account" =>
"$stripeacc"));
601 if (empty($charge)) {
603 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
610 $vatcleaned = $vatnumber ? $vatnumber :
null;
621 dol_syslog(
"Create anonymous customer card profile", LOG_DEBUG, 0,
'_payment');
623 $customer = \Stripe\Customer::create(array(
625 'description' => ($email ?
'Anonymous customer for '.$email :
'Anonymous customer'),
626 'metadata' => $metadata,
627 'source' => $stripeToken
646 if (!empty($FULLTAG)) {
647 $metadata[
"FULLTAG"] = $FULLTAG;
649 if (!empty($dol_id)) {
650 $metadata[
"dol_id"] = $dol_id;
652 if (!empty($dol_type)) {
653 $metadata[
"dol_type"] = $dol_type;
658 dol_syslog(
"Create charge", LOG_DEBUG, 0,
'_payment');
659 $charge = \Stripe\Charge::create(array(
660 'customer' => $customer->id,
661 'amount' =>
price2num($amountstripe,
'MU'),
662 'currency' => $currency,
664 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
665 'metadata' => $metadata,
666 'statement_descriptor' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
667 ), array(
"idempotency_key" =>
"$FULLTAG",
"stripe_account" =>
"$stripeacc"));
669 if (empty($charge)) {
671 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_payment');
676 }
catch (\
Stripe\Error\Card $e) {
678 $body = $e->getJsonBody();
679 $err = $body[
'error'];
681 print(
'Status is:'.$e->getHttpStatus().
"\n");
682 print(
'Type is:'.$err[
'type'].
"\n");
683 print(
'Code is:'.$err[
'code'].
"\n");
685 print(
'Param is:'.$err[
'param'].
"\n");
686 print(
'Message is:'.$err[
'message'].
"\n");
689 $errormessage =
"ErrorCard ".$e->getMessage().
" err=".var_export($err,
true);
690 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
693 }
catch (\
Stripe\Error\RateLimit $e) {
696 $errormessage =
"ErrorRateLimit ".$e->getMessage();
697 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
700 }
catch (\
Stripe\Error\InvalidRequest $e) {
703 $errormessage =
"ErrorInvalidRequest ".$e->getMessage();
704 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
707 }
catch (\
Stripe\Error\Authentication $e) {
711 $errormessage =
"ErrorAuthentication ".$e->getMessage();
712 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
715 }
catch (\
Stripe\Error\ApiConnection $e) {
718 $errormessage =
"ErrorApiConnection ".$e->getMessage();
719 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
722 }
catch (\
Stripe\Error\Base $e) {
726 $errormessage =
"ErrorBase ".$e->getMessage();
727 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
733 $errormessage =
"ErrorException ".$e->getMessage();
734 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
741 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION')) {
742 $service =
'StripeTest';
744 if (!empty($conf->global->STRIPE_LIVE) && !
GETPOST(
'forcesandbox',
'int')) {
745 $service =
'StripeLive';
748 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
749 $stripe =
new Stripe($db);
750 $stripeacc = $stripe->getStripeAccount($service);
754 $paymentintent_id =
GETPOST(
"paymentintent_id",
"alpha");
757 global $stripearrayofkeysbyenv;
758 \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$servicestatus][
'secret_key']);
761 if (empty($stripeacc)) {
762 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id);
764 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id, array(
"stripe_account" => $stripeacc));
768 $errormessage =
"CantRetrievePaymentIntent ".$e->getMessage();
769 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
774 if ($paymentintent->status !=
'succeeded') {
776 $errormessage =
"StatusOfRetrievedIntent is not succeeded: ".$paymentintent->status;
777 dol_syslog($errormessage, LOG_WARNING, 0,
'_payment');
787 if (!empty($paymentintent->currency) && !empty($paymentintent->amount)) {
788 $currency = strtoupper($paymentintent->currency);
789 $amount = $paymentintent->amount;
793 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
794 if (!in_array($currency, $arrayzerounitcurrency)) {
795 $amount = $amount / 100;
804 $_SESSION[
"onlinetoken"] = $stripeToken;
805 $_SESSION[
"FinalPaymentAmt"] = $amount;
806 $_SESSION[
"currencyCodeType"] = $currency;
807 $_SESSION[
"paymentType"] =
'';
808 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
809 $_SESSION[
'payerID'] = is_object($customer) ? $customer->id :
'';
810 $_SESSION[
'TRANSACTIONID'] = (is_object($charge) ? $charge->id : (is_object($paymentintent) ? $paymentintent->id :
''));
811 $_SESSION[
'errormessage'] = $errormessage;
813 dol_syslog(
"Action charge stripe STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=".
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION').
" ip=".$remoteip, LOG_DEBUG, 0,
'_payment');
814 dol_syslog(
"onlinetoken=".$_SESSION[
"onlinetoken"].
" FinalPaymentAmt=".$_SESSION[
"FinalPaymentAmt"].
" currencyCodeType=".$_SESSION[
"currencyCodeType"].
" payerID=".$_SESSION[
'payerID'].
" TRANSACTIONID=".$_SESSION[
'TRANSACTIONID'], LOG_DEBUG, 0,
'_payment');
815 dol_syslog(
"FULLTAG=".$FULLTAG, LOG_DEBUG, 0,
'_payment');
816 dol_syslog(
"error=".$error.
" errormessage=".$errormessage, LOG_DEBUG, 0,
'_payment');
817 dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
818 dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
819 dol_syslog(
"Now call the redirect to paymentok or paymentko, URL = ".($error ? $urlko : $urlok), LOG_DEBUG, 0,
'_payment');
822 header(
"Location: ".$urlko);
825 header(
"Location: ".$urlok);
838 if (!empty($conf->global->ONLINE_PAYMENT_CSS_URL)) {
839 $head =
'<link rel="stylesheet" type="text/css" href="'.$conf->global->ONLINE_PAYMENT_CSS_URL.
'?lang='.(!empty($getpostlang) ? $getpostlang: $langs->defaultlang).
'">'.
"\n";
842 $conf->dol_hide_topmenu = 1;
843 $conf->dol_hide_leftmenu = 1;
845 $replacemainarea = (empty($conf->dol_hide_leftmenu) ?
'<div>' :
'').
'<div>';
846 llxHeader($head, $langs->trans(
"PaymentForm"),
'',
'', 0, 0,
'',
'',
'',
'onlinepaymentbody', $replacemainarea);
848 dol_syslog(
"--- newpayment.php action = ".$action, LOG_DEBUG, 0,
'_payment');
849 dol_syslog(
"newpayment.php show page source=".$source.
" paymentmethod=".$paymentmethod.
' amount='.$amount.
' newamount='.
GETPOST(
"newamount",
'alpha').
" ref=".$ref, LOG_DEBUG, 0,
'_payment');
850 dol_syslog(
"_SERVER[SERVER_NAME] = ".(empty($_SERVER[
"SERVER_NAME"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_NAME"])), LOG_DEBUG, 0,
'_payment');
851 dol_syslog(
"_SERVER[SERVER_ADDR] = ".(empty($_SERVER[
"SERVER_ADDR"]) ?
'' :
dol_escape_htmltag($_SERVER[
"SERVER_ADDR"])), LOG_DEBUG, 0,
'_payment');
854 if ($source && in_array($ref, array(
'member_ref',
'contractline_ref',
'invoice_ref',
'order_ref',
'donation_ref',
''))) {
855 $langs->load(
"errors");
856 dol_print_error_email(
'BADREFINPAYMENTFORM', $langs->trans(
"ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
865 if ((empty($paymentmethod) || $paymentmethod ==
'paypal') &&
isModEnabled(
'paypal') && (!empty($conf->global->PAYPAL_API_SANDBOX) ||
GETPOST(
'forcesandbox',
'int'))) {
866 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Paypal'),
'',
'warning');
868 if ((empty($paymentmethod) || $paymentmethod ==
'stripe') &&
isModEnabled(
'stripe') && (empty($conf->global->STRIPE_LIVE) ||
GETPOST(
'forcesandbox',
'int'))) {
869 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Stripe'),
'',
'warning');
873 print
'<span id="dolpaymentspan"></span>'.
"\n";
874 print
'<div class="center">'.
"\n";
875 print
'<form id="dolpaymentform" class="center" name="paymentform" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">'.
"\n";
876 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
877 print
'<input type="hidden" name="action" value="dopayment">'.
"\n";
878 print
'<input type="hidden" name="tag" value="'.GETPOST(
"tag",
'alpha').
'">'.
"\n";
879 print
'<input type="hidden" name="suffix" value="'.dol_escape_htmltag($suffix).
'">'.
"\n";
880 print
'<input type="hidden" name="securekey" value="'.dol_escape_htmltag($SECUREKEY).
'">'.
"\n";
881 print
'<input type="hidden" name="e" value="'.$entity.
'" />';
882 print
'<input type="hidden" name="forcesandbox" value="'.GETPOST(
'forcesandbox',
'int').
'" />';
883 print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
889 $logosmall = $mysoc->logo_small;
890 $logo = $mysoc->logo;
891 $paramlogo =
'ONLINE_PAYMENT_LOGO_'.$suffix;
892 if (!empty($conf->global->$paramlogo)) {
893 $logosmall = $conf->global->$paramlogo;
894 } elseif (!empty($conf->global->ONLINE_PAYMENT_LOGO)) {
895 $logosmall = $conf->global->ONLINE_PAYMENT_LOGO;
901 if (!empty($logosmall) && is_readable($conf->mycompany->dir_output.
'/logos/thumbs/'.$logosmall)) {
902 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
903 $urllogofull = $dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
904 } elseif (!empty($logo) && is_readable($conf->mycompany->dir_output.
'/logos/'.$logo)) {
905 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
906 $urllogofull = $dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
911 print
'<div class="backgreypublicpayment">';
912 print
'<div class="logopublicpayment">';
913 print
'<img id="dolpaymentlogo" src="'.$urllogo.
'"';
916 if (empty($conf->global->MAIN_HIDE_POWERED_BY)) {
917 print
'<div class="poweredbypublicpayment opacitymedium right"><a class="poweredbyhref" href="https://www.dolibarr.org?utm_medium=website&utm_source=poweredby" target="dolibarr" rel="noopener">'.$langs->trans(
"PoweredBy").
'<br><img class="poweredbyimg" src="'.DOL_URL_ROOT.
'/theme/dolibarr_logo.svg" width="80px"></a></div>';
921 if (!empty($conf->global->MAIN_IMAGE_PUBLIC_PAYMENT)) {
922 print
'<div class="backimagepublicpayment">';
923 print
'<img id="idMAIN_IMAGE_PUBLIC_PAYMENT" src="'.$conf->global->MAIN_IMAGE_PUBLIC_PAYMENT.
'">';
930 print
'<!-- Form to send a payment -->'.
"\n";
931 print
'<!-- creditor = '.dol_escape_htmltag($creditor).
' -->'.
"\n";
934 print
'<!-- PAYPAL_API_SANDBOX = '.getDolGlobalString(
'PAYPAL_API_SANDBOX').
' -->'.
"\n";
935 print
'<!-- PAYPAL_API_INTEGRAL_OR_PAYPALONLY = '.getDolGlobalString(
'PAYPAL_API_INTEGRAL_OR_PAYPALONLY').
' -->'.
"\n";
938 print
'<!-- PAYBOX_CGI_URL = '.getDolGlobalString(
'PAYBOX_CGI_URL_V2').
' -->'.
"\n";
941 print
'<!-- STRIPE_LIVE = '.getDolGlobalString(
'STRIPE_LIVE').
' -->'.
"\n";
943 print
'<!-- urlok = '.$urlok.
' -->'.
"\n";
944 print
'<!-- urlko = '.$urlko.
' -->'.
"\n";
948 print
'<table id="dolpublictable" summary="Payment form" class="center">'.
"\n";
952 if (!empty($conf->global->PAYMENT_NEWFORM_TEXT)) {
953 $langs->load(
"members");
954 if (preg_match(
'/^\((.*)\)$/', $conf->global->PAYMENT_NEWFORM_TEXT, $reg)) {
955 $text .= $langs->trans($reg[1]).
"<br>\n";
957 $text .= $conf->global->PAYMENT_NEWFORM_TEXT.
"<br>\n";
959 $text =
'<tr><td align="center"><br>'.$text.
'<br></td></tr>'.
"\n";
962 $text .=
'<tr><td class="textpublicpayment"><br><strong>'.$langs->trans(
"WelcomeOnPaymentPage").
'</strong></td></tr>'.
"\n";
963 $text .=
'<tr><td class="textpublicpayment">'.$langs->trans(
"ThisScreenAllowsYouToPay", $creditor).
'<br><br></td></tr>'.
"\n";
968 print
'<tr><td align="center">';
969 print
'<table with="100%" id="tablepublicpayment">';
970 print
'<tr><td align="left" colspan="2" class="opacitymedium">'.$langs->trans(
"ThisIsInformationOnPayment").
' :</td></tr>'.
"\n";
981 $tag =
GETPOST(
"tag",
'alpha');
982 if (
GETPOST(
'fulltag',
'alpha')) {
983 $fulltag =
GETPOST(
'fulltag',
'alpha');
985 $fulltag =
"TAG=".$tag;
989 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
990 print
'</td><td class="CTableRow2">';
991 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
992 print
'<b>'.$creditor.
'</b>';
993 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
994 print
'</td></tr>'.
"\n";
997 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
998 if (empty($amount)) {
999 print
' ('.$langs->trans(
"ToComplete").
')';
1001 print
'</td><td class="CTableRow2">';
1002 if (empty($amount) || !is_numeric($amount)) {
1003 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1004 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1006 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1008 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1009 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1010 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1012 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1013 print
'</td></tr>'.
"\n";
1016 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1017 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1018 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1019 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1020 print
'</td></tr>'.
"\n";
1028 if ($source ==
'order') {
1030 $langs->load(
"orders");
1032 require_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1035 $result = $order->fetch(
'', $ref);
1037 $mesg = $order->error;
1040 $result = $order->fetch_thirdparty($order->socid);
1044 if ($action !=
'dopayment') {
1045 $amount = $order->total_ttc;
1046 if (
GETPOST(
"amount",
'alpha')) {
1047 $amount =
GETPOST(
"amount",
'alpha');
1053 if (
GETPOST(
'fulltag',
'alpha')) {
1054 $fulltag =
GETPOST(
'fulltag',
'alpha');
1056 $fulltag =
'ORD='.$order->id.
'.CUS='.$order->thirdparty->id;
1058 $tag = $TAG; $fulltag .=
'.TAG='.$TAG;
1064 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1065 print
'</td><td class="CTableRow2">';
1066 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1067 print
'<b>'.$creditor.
'</b>';
1068 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1069 print
'</td></tr>'.
"\n";
1072 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1073 print
'</td><td class="CTableRow2">';
1074 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1075 print
'<b>'.$order->thirdparty->name.
'</b>';
1076 print
'</td></tr>'.
"\n";
1079 $text =
'<b>'.$langs->trans(
"PaymentOrderRef", $order->ref).
'</b>';
1080 if (
GETPOST(
'desc',
'alpha')) {
1081 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1083 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1084 print
'</td><td class="CTableRow2">'.$text;
1085 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1086 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($order->ref).
'">';
1087 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag($order->id).
'">';
1088 $directdownloadlink = $order->getLastMainDocLink(
'commande');
1089 if ($directdownloadlink) {
1090 print
'<br><a href="'.$directdownloadlink.
'" rel="nofollow noopener">';
1091 print
img_mime($order->last_main_doc,
'');
1092 print $langs->trans(
"DownloadDocument").
'</a>';
1094 print
'</td></tr>'.
"\n";
1097 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1098 if (empty($amount)) {
1099 print
' ('.$langs->trans(
"ToComplete").
')';
1101 print
'</td><td class="CTableRow2">';
1102 if (empty($amount) || !is_numeric($amount)) {
1103 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1104 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1106 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1108 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1109 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1110 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1112 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1113 print
'</td></tr>'.
"\n";
1116 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1117 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1118 print
'<input type="hidden" name="tag" value="'.dol_escape_htmltag($tag).
'">';
1119 print
'<input type="hidden" name="fulltag" value="'.dol_escape_htmltag($fulltag).
'">';
1120 print
'</td></tr>'.
"\n";
1123 $shipToName = $order->thirdparty->name;
1124 $shipToStreet = $order->thirdparty->address;
1125 $shipToCity = $order->thirdparty->town;
1126 $shipToState = $order->thirdparty->state_code;
1127 $shipToCountryCode = $order->thirdparty->country_code;
1128 $shipToZip = $order->thirdparty->zip;
1129 $shipToStreet2 =
'';
1130 $phoneNum = $order->thirdparty->phone;
1131 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1132 print
'<input type="hidden" name="shipToName" value="'.dol_escape_htmltag($shipToName).
'">'.
"\n";
1133 print
'<input type="hidden" name="shipToStreet" value="'.dol_escape_htmltag($shipToStreet).
'">'.
"\n";
1134 print
'<input type="hidden" name="shipToCity" value="'.dol_escape_htmltag($shipToCity).
'">'.
"\n";
1135 print
'<input type="hidden" name="shipToState" value="'.dol_escape_htmltag($shipToState).
'">'.
"\n";
1136 print
'<input type="hidden" name="shipToCountryCode" value="'.dol_escape_htmltag($shipToCountryCode).
'">'.
"\n";
1137 print
'<input type="hidden" name="shipToZip" value="'.dol_escape_htmltag($shipToZip).
'">'.
"\n";
1138 print
'<input type="hidden" name="shipToStreet2" value="'.dol_escape_htmltag($shipToStreet2).
'">'.
"\n";
1139 print
'<input type="hidden" name="phoneNum" value="'.dol_escape_htmltag($phoneNum).
'">'.
"\n";
1141 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1143 if (is_object($order->thirdparty)) {
1144 print
'<input type="hidden" name="thirdparty_id" value="'.$order->thirdparty->id.
'">'.
"\n";
1146 print
'<input type="hidden" name="email" value="'.$order->thirdparty->email.
'">'.
"\n";
1147 print
'<input type="hidden" name="vatnumber" value="'.dol_escape_htmltag($order->thirdparty->tva_intra).
'">'.
"\n";
1148 $labeldesc = $langs->trans(
"Order").
' '.$order->ref;
1149 if (
GETPOST(
'desc',
'alpha')) {
1150 $labeldesc =
GETPOST(
'desc',
'alpha');
1152 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1157 if ($source ==
'invoice') {
1159 $langs->load(
"bills");
1161 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1164 $result = $invoice->fetch(
'', $ref);
1166 $mesg = $invoice->error;
1169 $result = $invoice->fetch_thirdparty($invoice->socid);
1173 if ($action !=
'dopayment') {
1174 $amount =
price2num($invoice->total_ttc - ($invoice->getSommePaiement() + $invoice->getSumCreditNotesUsed() + $invoice->getSumDepositsUsed()));
1175 if (
GETPOST(
"amount",
'alpha')) {
1176 $amount =
GETPOST(
"amount",
'alpha');
1181 if (
GETPOST(
'fulltag',
'alpha')) {
1182 $fulltag =
GETPOST(
'fulltag',
'alpha');
1184 $fulltag =
'INV='.$invoice->id.
'.CUS='.$invoice->thirdparty->id;
1186 $tag = $TAG; $fulltag .=
'.TAG='.$TAG;
1192 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1193 print
'</td><td class="CTableRow2">';
1194 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1195 print
'<b>'.$creditor.
'</b>';
1196 print
'<input type="hidden" name="creditor" value="'.dol_escape_htmltag($creditor).
'">';
1197 print
'</td></tr>'.
"\n";
1200 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1201 print
'</td><td class="CTableRow2">';
1202 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1203 print
'<b>'.$invoice->thirdparty->name.
'</b>';
1204 print
'</td></tr>'.
"\n";
1207 $text =
'<b>'.$langs->trans(
"PaymentInvoiceRef", $invoice->ref).
'</b>';
1208 if (
GETPOST(
'desc',
'alpha')) {
1209 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1211 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1212 print
'</td><td class="CTableRow2">'.$text;
1213 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1214 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).
'">';
1215 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag($invoice->id).
'">';
1216 $directdownloadlink = $invoice->getLastMainDocLink(
'facture');
1217 if ($directdownloadlink) {
1218 print
'<br><a href="'.$directdownloadlink.
'">';
1219 print
img_mime($invoice->last_main_doc,
'');
1220 print $langs->trans(
"DownloadDocument").
'</a>';
1222 print
'</td></tr>'.
"\n";
1225 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentAmount");
1226 if (empty($amount) && empty($object->paye)) {
1227 print
' ('.$langs->trans(
"ToComplete").
')';
1229 print
'</td><td class="CTableRow2">';
1230 if ($object->type == $object::TYPE_CREDIT_NOTE) {
1231 print
'<b>'.$langs->trans(
"CreditNote").
'</b>';
1232 } elseif (empty($object->paye)) {
1233 if (empty($amount) || !is_numeric($amount)) {
1234 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1235 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1236 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1238 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1239 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1240 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1243 print
'<b class="amount">'.price($object->total_ttc, 1, $langs, 1, -1, -1, $currency).
'</b>';
1245 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1246 print
'</td></tr>'.
"\n";
1249 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1250 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1251 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1252 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1253 print
'</td></tr>'.
"\n";
1256 $shipToName = $invoice->thirdparty->name;
1257 $shipToStreet = $invoice->thirdparty->address;
1258 $shipToCity = $invoice->thirdparty->town;
1259 $shipToState = $invoice->thirdparty->state_code;
1260 $shipToCountryCode = $invoice->thirdparty->country_code;
1261 $shipToZip = $invoice->thirdparty->zip;
1262 $shipToStreet2 =
'';
1263 $phoneNum = $invoice->thirdparty->phone;
1264 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1265 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1266 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1267 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1268 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1269 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1270 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1271 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1272 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1274 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1276 if (is_object($invoice->thirdparty)) {
1277 print
'<input type="hidden" name="thirdparty_id" value="'.$invoice->thirdparty->id.
'">'.
"\n";
1279 print
'<input type="hidden" name="email" value="'.$invoice->thirdparty->email.
'">'.
"\n";
1280 print
'<input type="hidden" name="vatnumber" value="'.$invoice->thirdparty->tva_intra.
'">'.
"\n";
1281 $labeldesc = $langs->trans(
"Invoice").
' '.$invoice->ref;
1282 if (
GETPOST(
'desc',
'alpha')) {
1283 $labeldesc =
GETPOST(
'desc',
'alpha');
1285 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1289 if ($source ==
'contractline') {
1291 $langs->load(
"contracts");
1293 require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1298 $result = $contractline->fetch(
'', $ref);
1300 $mesg = $contractline->error;
1303 if ($contractline->fk_contrat > 0) {
1304 $result = $contract->fetch($contractline->fk_contrat);
1306 $result = $contract->fetch_thirdparty($contract->socid);
1308 $mesg = $contract->error;
1312 $mesg =
'ErrorRecordNotFound';
1316 $object = $contractline;
1318 if ($action !=
'dopayment') {
1319 $amount = $contractline->total_ttc;
1321 if ($contractline->fk_product && !empty($conf->global->PAYMENT_USE_NEW_PRICE_FOR_CONTRACTLINES)) {
1323 $result = $product->fetch($contractline->fk_product);
1326 if (!empty($conf->global->PRODUIT_MULTIPRICES)) {
1327 $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
1328 $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
1329 $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
1331 $pu_ht = $product->price;
1332 $pu_ttc = $product->price_ttc;
1333 $price_base_type = $product->price_base_type;
1337 if (empty($amount)) {
1343 if (
GETPOST(
"amount",
'alpha')) {
1344 $amount =
GETPOST(
"amount",
'alpha');
1349 if (
GETPOST(
'fulltag',
'alpha')) {
1350 $fulltag =
GETPOST(
'fulltag',
'alpha');
1352 $fulltag =
'COL='.$contractline->id.
'.CON='.$contract->id.
'.CUS='.$contract->thirdparty->id.
'.DAT='.
dol_print_date(
dol_now(),
'%Y%m%d%H%M%S');
1354 $tag = $TAG; $fulltag .=
'.TAG='.$TAG;
1365 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1366 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1367 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1368 print
'</td></tr>'.
"\n";
1371 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"ThirdParty");
1372 print
'</td><td class="CTableRow2"><b>'.$contract->thirdparty->name.
'</b>';
1373 print
'</td></tr>'.
"\n";
1376 $text =
'<b>'.$langs->trans(
"PaymentRenewContractId", $contract->ref, $contractline->ref).
'</b>';
1377 if ($contractline->fk_product > 0) {
1378 $contractline->fetch_product();
1379 $text .=
'<br>'.$contractline->product->ref.($contractline->product->label ?
' - '.$contractline->product->label :
'');
1381 if ($contractline->description) {
1382 $text .=
'<br>'.dol_htmlentitiesbr($contractline->description);
1384 if ($contractline->date_end) {
1385 $text .=
'<br>'.$langs->trans(
"ExpiredSince").
': '.
dol_print_date($contractline->date_end);
1387 if (
GETPOST(
'desc',
'alpha')) {
1388 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1390 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1391 print
'</td><td class="CTableRow2">'.$text;
1392 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
1393 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($contractline->ref).
'">';
1394 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag($contractline->id).
'">';
1395 $directdownloadlink = $contract->getLastMainDocLink(
'contract');
1396 if ($directdownloadlink) {
1397 print
'<br><a href="'.$directdownloadlink.
'">';
1398 print
img_mime($contract->last_main_doc,
'');
1399 print $langs->trans(
"DownloadDocument").
'</a>';
1401 print
'</td></tr>'.
"\n";
1404 $label = $langs->trans(
"Quantity");
1407 if ($contractline->fk_product) {
1408 if ($contractline->product->isService() && $contractline->product->duration_value > 0) {
1409 $label = $langs->trans(
"Duration");
1412 if ($contractline->product->duration_value > 1) {
1413 $dur = array(
"h"=>$langs->trans(
"Hours"),
"d"=>$langs->trans(
"DurationDays"),
"w"=>$langs->trans(
"DurationWeeks"),
"m"=>$langs->trans(
"DurationMonths"),
"y"=>$langs->trans(
"DurationYears"));
1415 $dur = array(
"h"=>$langs->trans(
"Hour"),
"d"=>$langs->trans(
"DurationDay"),
"w"=>$langs->trans(
"DurationWeek"),
"m"=>$langs->trans(
"DurationMonth"),
"y"=>$langs->trans(
"DurationYear"));
1417 $duration = $contractline->product->duration_value.
' '.$dur[$contractline->product->duration_unit];
1420 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$label.
'</td>';
1421 print
'<td class="CTableRow2"><b>'.($duration ? $duration : $qty).
'</b>';
1422 print
'<input type="hidden" name="newqty" value="'.dol_escape_htmltag($qty).
'">';
1423 print
'</b></td></tr>'.
"\n";
1426 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Amount");
1427 if (empty($amount)) {
1428 print
' ('.$langs->trans(
"ToComplete").
')';
1430 print
'</td><td class="CTableRow2">';
1431 if (empty($amount) || !is_numeric($amount)) {
1432 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1433 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1435 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1437 print
'<b class="amount">'.price($amount, 1, $langs, 1, -1, -1, $currency).
'</b>';
1438 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1439 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1441 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1442 print
'</td></tr>'.
"\n";
1445 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"PaymentCode");
1446 print
'</td><td class="CTableRow2"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1447 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1448 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1449 print
'</td></tr>'.
"\n";
1452 $shipToName = $contract->thirdparty->name;
1453 $shipToStreet = $contract->thirdparty->address;
1454 $shipToCity = $contract->thirdparty->town;
1455 $shipToState = $contract->thirdparty->state_code;
1456 $shipToCountryCode = $contract->thirdparty->country_code;
1457 $shipToZip = $contract->thirdparty->zip;
1458 $shipToStreet2 =
'';
1459 $phoneNum = $contract->thirdparty->phone;
1460 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1461 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1462 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1463 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1464 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1465 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1466 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1467 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1468 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1470 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1472 if (is_object($contract->thirdparty)) {
1473 print
'<input type="hidden" name="thirdparty_id" value="'.$contract->thirdparty->id.
'">'.
"\n";
1475 print
'<input type="hidden" name="email" value="'.$contract->thirdparty->email.
'">'.
"\n";
1476 print
'<input type="hidden" name="vatnumber" value="'.$contract->thirdparty->tva_intra.
'">'.
"\n";
1477 $labeldesc = $langs->trans(
"Contract").
' '.$contract->ref;
1478 if (
GETPOST(
'desc',
'alpha')) {
1479 $labeldesc =
GETPOST(
'desc',
'alpha');
1481 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1485 if ($source ==
'member' || $source ==
'membersubscription') {
1486 $newsource =
'member';
1490 $langs->load(
"members");
1492 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1493 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent_type.class.php';
1494 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/subscription.class.php';
1499 $result = $member->fetch(
'', $ref);
1501 $mesg = $member->error;
1504 $member->fetch_thirdparty();
1507 $adht->fetch($member->typeid);
1511 if ($action !=
'dopayment') {
1512 $amount = $subscription->total_ttc;
1513 if (
GETPOST(
"amount",
'alpha')) {
1514 $amount =
GETPOST(
"amount",
'alpha');
1517 if (empty($amount)) {
1518 $amount = $adht->amount;
1521 $amount = max(0,
price2num($amount,
'MT'));
1524 if (
GETPOST(
'fulltag',
'alpha')) {
1525 $fulltag =
GETPOST(
'fulltag',
'alpha');
1529 $tag = $TAG; $fulltag .=
'.TAG='.$TAG;
1535 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Creditor");
1536 print
'</td><td class="CTableRow2"><b>'.$creditor.
'</b>';
1537 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1538 print
'</td></tr>'.
"\n";
1541 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Member");
1542 print
'</td><td class="CTableRow2">';
1544 if ($member->morphy ==
'mor' && !empty($member->company)) {
1545 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
1546 print $member->company;
1548 print
img_picto(
'',
'member',
'class="pictofixedwidth"');
1549 print $member->getFullName($langs);
1552 print
'</td></tr>'.
"\n";
1555 $text =
'<b>'.$langs->trans(
"PaymentSubscription").
'</b>';
1556 if (
GETPOST(
'desc',
'alpha')) {
1557 $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1559 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"Designation");
1560 print
'</td><td class="CTableRow2">'.$text;
1561 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($newsource).
'">';
1562 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($member->ref).
'">';
1563 print
'</td></tr>'.
"\n";
1565 if ($object->datefin > 0) {
1566 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"DateEndSubscription");
1567 print
'</td><td class="CTableRow2">'.dol_print_date($member->datefin,
'day');
1568 print
'</td></tr>'.
"\n";
1571 if ($member->last_subscription_date || $member->last_subscription_amount) {
1574 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionDate");
1575 print
'</td><td class="CTableRow2">'.dol_print_date($member->last_subscription_date,
'day');
1576 print
'</td></tr>'.
"\n";
1580 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastSubscriptionAmount");
1581 print
'</td><td class="CTableRow2">'.price($member->last_subscription_amount);
1582 print
'</td></tr>'.
"\n";
1584 if (empty($amount) && !
GETPOST(
'newamount',
'alpha')) {
1585 $_GET[
'newamount'] = $member->last_subscription_amount;
1587 if (!empty($member->last_subscription_amount) && !
GETPOSTISSET(
'newamount') && is_numeric($amount)) {
1588 $amount = max($member->last_subscription_amount, $amount);
1592 if ($member->type) {
1593 $oldtypeid = $member->typeid;
1596 if (!empty($conf->global->MEMBER_ALLOW_CHANGE_OF_TYPE)) {
1597 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent_type.class.php';
1600 $amountbytype = $adht->amountByType(1);
1603 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"LastMemberType");
1604 print
'</td><td class="CTableRow2">'.dol_escape_htmltag($member->type);
1605 print
"</td></tr>\n";
1608 $member->typeid = $newtypeid;
1609 $member->type =
dol_getIdFromCode($db, $newtypeid,
'adherent_type',
'rowid',
'libelle');
1614 $amount = (!empty($amountbytype[$member->typeid])) ? $amountbytype[$member->typeid] : $member->last_subscription_amount;
1616 print
'<tr class="CTableRow2"><td class="CTableRow2">'.$langs->trans(
"NewSubscription");
1617 print
'</td><td class="CTableRow2">';
1618 print
$form->selectarray(
"typeid", $adht->liste_array(1), $member->typeid, 0, 0, 0,
'onchange="window.location.replace(\''.$urlwithroot.
'/public/payment/newpayment.php?source='.urlencode($source).
'&ref='.urlencode($ref).
'&amount='.urlencode($amount).
'&typeid=\' + this.value + \'&securekey='.urlencode($SECUREKEY).
'\');
"', 0, 0, 0, '', '', 1);
1619 print "</td></tr>\n
";
1620 } elseif ($action == 'dopayment') {
1621 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("NewMemberType
");
1622 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1623 print '<input type="hidden
" name="membertypeid
" value="'.$member->typeid.'">';
1624 print "</td></tr>\n
";
1627 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("MemberType
");
1628 print '</td><td class="CTableRow2
">'.dol_escape_htmltag($member->type);
1629 print "</td></tr>\n
";
1634 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Amount
");
1635 // This place no longer allows amount edition
1636 if (!empty($conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO)) {
1637 print ' - <a href="'.$conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO.'" rel="external
" target="_blank
" rel="noopener noreferrer
">'.$langs->trans("SeeHere
").'</a>';
1639 print '</td><td class="CTableRow2
">';
1640 if (!empty($conf->global->MEMBER_MIN_AMOUNT) && $amount) {
1641 $amount = max(0, $conf->global->MEMBER_MIN_AMOUNT, $amount);
1643 print '<b class="amount
">'.price($amount, 1, $langs, 1, -1, -1, $currency).'</b>'; // Price with currency
1644 $caneditamount = $adht->caneditamount;
1645 $minimumamount = empty($conf->global->MEMBER_MIN_AMOUNT)? $adht->amount : max($conf->global->MEMBER_MIN_AMOUNT, $adht->amount > $amount);
1646 if (!$caneditamount && $minimumamount > $amount) {
1647 print ' '. $langs->trans("AmountIsLowerToMinimumNotice
", price($adht->amount, 1, $langs, 1, -1, -1, $currency));
1650 print '<input type="hidden
" name="amount
" value="'.$amount.'">';
1651 print '<input type="hidden
" name="newamount
" value="'.$amount.'">';
1652 print '<input type="hidden
" name="currency
" value="'.$currency.'">';
1653 print '</td></tr>'."\n
";
1656 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("PaymentCode
");
1657 print '</td><td class="CTableRow2
"><b style="word-
break:
break-all;
">'.$fulltag.'</b>';
1658 print '<input type="hidden
" name="tag
" value="'.$tag.'">';
1659 print '<input type="hidden
" name="fulltag
" value="'.$fulltag.'">';
1660 print '</td></tr>'."\n
";
1663 $shipToName = $member->getFullName($langs);
1664 $shipToStreet = $member->address;
1665 $shipToCity = $member->town;
1666 $shipToState = $member->state_code;
1667 $shipToCountryCode = $member->country_code;
1668 $shipToZip = $member->zip;
1669 $shipToStreet2 = '';
1670 $phoneNum = $member->phone;
1671 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1672 print '<!-- Shipping address information -->';
1673 print '<input type="hidden
" name="shipToName
" value="'.$shipToName.'">'."\n
";
1674 print '<input type="hidden
" name="shipToStreet
" value="'.$shipToStreet.'">'."\n
";
1675 print '<input type="hidden
" name="shipToCity
" value="'.$shipToCity.'">'."\n
";
1676 print '<input type="hidden
" name="shipToState
" value="'.$shipToState.'">'."\n
";
1677 print '<input type="hidden
" name="shipToCountryCode
" value="'.$shipToCountryCode.'">'."\n
";
1678 print '<input type="hidden
" name="shipToZip
" value="'.$shipToZip.'">'."\n
";
1679 print '<input type="hidden
" name="shipToStreet2
" value="'.$shipToStreet2.'">'."\n
";
1680 print '<input type="hidden
" name="phoneNum
" value="'.$phoneNum.'">'."\n
";
1682 print '<!-- Shipping address not complete, so we don t use it -->'."\n
";
1684 if (is_object($member->thirdparty)) {
1685 print '<input type="hidden
" name="thirdparty_id
" value="'.$member->thirdparty->id.'">'."\n
";
1687 print '<input type="hidden
" name="email
" value="'.$member->email.'">'."\n
";
1688 $labeldesc = $langs->trans("PaymentSubscription
");
1689 if (GETPOST('desc', 'alpha')) {
1690 $labeldesc = GETPOST('desc', 'alpha');
1692 print '<input type="hidden
" name="desc
" value="'.dol_escape_htmltag($labeldesc).'">'."\n
";
1695 // Payment on donation
1696 if ($source == 'donation') {
1698 $langs->load("don
");
1700 require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
1702 $don = new Don($db);
1703 $result = $don->fetch($ref);
1705 $mesg = $don->error;
1708 $don->fetch_thirdparty();
1712 if ($action != 'dopayment') { // Do not change amount if we just click on first dopayment
1713 if (GETPOST("amount
", 'alpha')) {
1714 $amount = GETPOST("amount
", 'alpha');
1716 $amount = $don->getRemainToPay();
1718 $amount = price2num($amount);
1721 if (GETPOST('fulltag', 'alpha')) {
1722 $fulltag = GETPOST('fulltag', 'alpha');
1724 $fulltag = 'DON='.$don->ref.'.DAT='.dol_print_date(dol_now(), '%Y%m%d%H%M%S');
1726 $tag = $TAG; $fulltag .= '.TAG='.$TAG;
1729 $fulltag = dol_string_unaccent($fulltag);
1732 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Creditor
");
1733 print '</td><td class="CTableRow2
"><b>'.$creditor.'</b>';
1734 print '<input type="hidden
" name="creditor
" value="'.$creditor.'">';
1735 print '</td></tr>'."\n
";
1738 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("ThirdParty
");
1739 print '</td><td class="CTableRow2
"><b>';
1740 if ($don->morphy == 'mor' && !empty($don->societe)) {
1741 print $don->societe;
1743 print $don->getFullName($langs);
1746 print '</td></tr>'."\n
";
1750 if (GETPOST('desc', 'alpha')) {
1751 $text = '<b>'.$langs->trans(GETPOST('desc', 'alpha')).'</b>';
1753 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Designation
");
1754 print '</td><td class="CTableRow2
">'.$text;
1755 print '<input type="hidden
" name="source
" value="'.dol_escape_htmltag($source).'">';
1756 print '<input type="hidden
" name="ref" value="'.dol_escape_htmltag($don->ref).'">';
1757 print '</td></tr>'."\n
";
1760 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Amount
");
1761 if (empty($amount)) {
1762 if (empty($conf->global->DONATION_NEWFORM_AMOUNT)) {
1763 print ' ('.$langs->trans("ToComplete
");
1765 if (!empty($conf->global->DONATION_EXT_URL_SUBSCRIPTION_INFO)) {
1766 print ' - <a href="'.$conf->global->DONATION_EXT_URL_SUBSCRIPTION_INFO.'" rel="external
" target="_blank
" rel="noopener noreferrer
">'.$langs->trans("SeeHere
").'</a>';
1768 if (empty($conf->global->DONATION_NEWFORM_AMOUNT)) {
1772 print '</td><td class="CTableRow2
">';
1774 if (empty($amount) || !is_numeric($amount)) {
1775 $valtoshow = price2num(GETPOST("newamount
", 'alpha'), 'MT');
1776 // force default subscription amount to value defined into constant...
1777 if (empty($valtoshow)) {
1778 if (!empty($conf->global->DONATION_NEWFORM_EDITAMOUNT)) {
1779 if (!empty($conf->global->DONATION_NEWFORM_AMOUNT)) {
1780 $valtoshow = $conf->global->DONATION_NEWFORM_AMOUNT;
1783 if (!empty($conf->global->DONATION_NEWFORM_AMOUNT)) {
1784 $amount = $conf->global->DONATION_NEWFORM_AMOUNT;
1789 if (empty($amount) || !is_numeric($amount)) {
1790 //$valtoshow=price2num(GETPOST("newamount
",'alpha'),'MT');
1791 if (!empty($conf->global->DONATION_MIN_AMOUNT) && $valtoshow) {
1792 $valtoshow = max($conf->global->DONATION_MIN_AMOUNT, $valtoshow);
1794 print '<input type="hidden
" name="amount
" value="'.price2num(GETPOST("amount", 'alpha
'), 'MT
').'">';
1795 print '<input class="flat maxwidth75
" type="text
" name="newamount
" value="'.$valtoshow.'">';
1797 print ' <b>'.$langs->trans("Currency
".$currency).'</b>';
1799 $valtoshow = $amount;
1800 if (!empty($conf->global->DONATION_MIN_AMOUNT) && $valtoshow) {
1801 $valtoshow = max($conf->global->DONATION_MIN_AMOUNT, $valtoshow);
1802 $amount = $valtoshow;
1804 print '<b class="amount
">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).'</b>'; // Price with currency
1805 print '<input type="hidden
" name="amount
" value="'.$valtoshow.'">';
1806 print '<input type="hidden
" name="newamount
" value="'.$valtoshow.'">';
1808 print '<input type="hidden
" name="currency
" value="'.$currency.'">';
1809 print '</td></tr>'."\n
";
1812 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("PaymentCode
");
1813 print '</td><td class="CTableRow2
"><b style="word-
break:
break-all;
">'.$fulltag.'</b>';
1814 print '<input type="hidden
" name="tag
" value="'.$tag.'">';
1815 print '<input type="hidden
" name="fulltag
" value="'.$fulltag.'">';
1816 print '</td></tr>'."\n
";
1819 $shipToName = $don->getFullName($langs);
1820 $shipToStreet = $don->address;
1821 $shipToCity = $don->town;
1822 $shipToState = $don->state_code;
1823 $shipToCountryCode = $don->country_code;
1824 $shipToZip = $don->zip;
1825 $shipToStreet2 = '';
1826 $phoneNum = $don->phone;
1827 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1828 print '<!-- Shipping address information -->';
1829 print '<input type="hidden
" name="shipToName
" value="'.$shipToName.'">'."\n
";
1830 print '<input type="hidden
" name="shipToStreet
" value="'.$shipToStreet.'">'."\n
";
1831 print '<input type="hidden
" name="shipToCity
" value="'.$shipToCity.'">'."\n
";
1832 print '<input type="hidden
" name="shipToState
" value="'.$shipToState.'">'."\n
";
1833 print '<input type="hidden
" name="shipToCountryCode
" value="'.$shipToCountryCode.'">'."\n
";
1834 print '<input type="hidden
" name="shipToZip
" value="'.$shipToZip.'">'."\n
";
1835 print '<input type="hidden
" name="shipToStreet2
" value="'.$shipToStreet2.'">'."\n
";
1836 print '<input type="hidden
" name="phoneNum
" value="'.$phoneNum.'">'."\n
";
1838 print '<!-- Shipping address not complete, so we don t use it -->'."\n
";
1840 if (is_object($don->thirdparty)) {
1841 print '<input type="hidden
" name="thirdparty_id
" value="'.$don->thirdparty->id.'">'."\n
";
1843 print '<input type="hidden
" name="email
" value="'.$don->email.'">'."\n
";
1844 $labeldesc = $langs->trans("PaymentSubscription
");
1845 if (GETPOST('desc', 'alpha')) {
1846 $labeldesc = GETPOST('desc', 'alpha');
1848 print '<input type="hidden
" name="desc
" value="'.dol_escape_htmltag($labeldesc).'">'."\n
";
1851 if ($source == 'organizedeventregistration') {
1853 $langs->loadLangs(array("members
", "eventorganization
"));
1855 if (GETPOST('fulltag', 'alpha')) {
1856 $fulltag = GETPOST('fulltag', 'alpha');
1858 $fulltag = 'ATT='.$attendee->id.'.DAT='.dol_print_date(dol_now(), '%Y%m%d%H%M%S');
1860 $tag = $TAG; $fulltag .= '.TAG='.$TAG;
1863 $fulltag = dol_string_unaccent($fulltag);
1866 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Creditor
");
1867 print '</td><td class="CTableRow2
"><b>'.$creditor.'</b>';
1868 print '<input type="hidden
" name="creditor
" value="'.$creditor.'">';
1869 print '</td></tr>'."\n
";
1872 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Attendee
");
1873 print '</td><td class="CTableRow2
"><b>';
1874 print $attendee->email;
1875 print ($thirdparty->name ? ' ('.$thirdparty->name.')' : '');
1877 print '</td></tr>'."\n
";
1879 if (! is_object($attendee->project)) {
1880 $text = 'ErrorProjectNotFound';
1882 $text = $langs->trans("PaymentEvent
").' - '.$attendee->project->title;
1886 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Designation
");
1887 print '</td><td class="CTableRow2
"><b>'.$text.'</b>';
1888 print '<input type="hidden
" name="source
" value="'.dol_escape_htmltag($source).'">';
1889 print '<input type="hidden
" name="ref" value="'.dol_escape_htmltag($invoice->id).'">';
1890 print '</td></tr>'."\n
";
1893 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Amount
");
1894 print '</td><td class="CTableRow2
">';
1895 $valtoshow = $amount;
1896 print '<b class="amount
">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).'</b>'; // Price with currency
1897 print '<input type="hidden
" name="amount
" value="'.$valtoshow.'">';
1898 print '<input type="hidden
" name="newamount
" value="'.$valtoshow.'">';
1899 print '<input type="hidden
" name="currency
" value="'.$currency.'">';
1900 print '</td></tr>'."\n
";
1903 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("PaymentCode
");
1904 print '</td><td class="CTableRow2
"><b style="word-
break:
break-all;
">'.$fulltag.'</b>';
1905 print '<input type="hidden
" name="tag
" value="'.$tag.'">';
1906 print '<input type="hidden
" name="fulltag
" value="'.$fulltag.'">';
1907 print '</td></tr>'."\n
";
1910 $shipToName = $thirdparty->getFullName($langs);
1911 $shipToStreet = $thirdparty->address;
1912 $shipToCity = $thirdparty->town;
1913 $shipToState = $thirdparty->state_code;
1914 $shipToCountryCode = $thirdparty->country_code;
1915 $shipToZip = $thirdparty->zip;
1916 $shipToStreet2 = '';
1917 $phoneNum = $thirdparty->phone;
1918 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
1919 print '<!-- Shipping address information -->';
1920 print '<input type="hidden
" name="shipToName
" value="'.$shipToName.'">'."\n
";
1921 print '<input type="hidden
" name="shipToStreet
" value="'.$shipToStreet.'">'."\n
";
1922 print '<input type="hidden
" name="shipToCity
" value="'.$shipToCity.'">'."\n
";
1923 print '<input type="hidden
" name="shipToState
" value="'.$shipToState.'">'."\n
";
1924 print '<input type="hidden
" name="shipToCountryCode
" value="'.$shipToCountryCode.'">'."\n
";
1925 print '<input type="hidden
" name="shipToZip
" value="'.$shipToZip.'">'."\n
";
1926 print '<input type="hidden
" name="shipToStreet2
" value="'.$shipToStreet2.'">'."\n
";
1927 print '<input type="hidden
" name="phoneNum
" value="'.$phoneNum.'">'."\n
";
1929 print '<!-- Shipping address not complete, so we don t use it -->'."\n
";
1931 print '<input type="hidden
" name="thirdparty_id
" value="'.$thirdparty->id.'">'."\n
";
1932 print '<input type="hidden
" name="email
" value="'.$thirdparty->email.'">'."\n
";
1933 $labeldesc = $langs->trans("PaymentSubscription
");
1934 if (GETPOST('desc', 'alpha')) {
1935 $labeldesc = GETPOST('desc', 'alpha');
1937 print '<input type="hidden
" name="desc
" value="'.dol_escape_htmltag($labeldesc).'">'."\n
";
1940 if ($source == 'boothlocation') {
1942 $langs->load("members
");
1944 if (GETPOST('fulltag', 'alpha')) {
1945 $fulltag = GETPOST('fulltag', 'alpha');
1947 $fulltag = 'BOO='.GETPOST("booth
").'.DAT='.dol_print_date(dol_now(), '%Y%m%d%H%M%S');
1949 $tag = $TAG; $fulltag .= '.TAG='.$TAG;
1952 $fulltag = dol_string_unaccent($fulltag);
1955 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Creditor
");
1956 print '</td><td class="CTableRow2
"><b>'.$creditor.'</b>';
1957 print '<input type="hidden
" name="creditor
" value="'.$creditor.'">';
1958 print '</td></tr>'."\n
";
1961 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Attendee
");
1962 print '</td><td class="CTableRow2
"><b>';
1963 print $thirdparty->name;
1965 print '</td></tr>'."\n
";
1968 $text = '<b>'.$langs->trans("PaymentBoothLocation
").'</b>';
1969 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Designation
");
1970 print '</td><td class="CTableRow2
">'.$text;
1971 print '<input type="hidden
" name="source
" value="'.dol_escape_htmltag($source).'">';
1972 print '<input type="hidden
" name="ref" value="'.dol_escape_htmltag($invoice->id).'">';
1973 print '</td></tr>'."\n
";
1976 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("Amount
");
1977 print '</td><td class="CTableRow2
">';
1978 $valtoshow = $amount;
1979 print '<b class="amount
">'.price($valtoshow, 1, $langs, 1, -1, -1, $currency).'</b>'; // Price with currency
1980 print '<input type="hidden
" name="amount
" value="'.$valtoshow.'">';
1981 print '<input type="hidden
" name="newamount
" value="'.$valtoshow.'">';
1982 print '<input type="hidden
" name="currency
" value="'.$currency.'">';
1983 print '</td></tr>'."\n
";
1986 print '<tr class="CTableRow2
"><td class="CTableRow2
">'.$langs->trans("PaymentCode
");
1987 print '</td><td class="CTableRow2
"><b style="word-
break:
break-all;
">'.$fulltag.'</b>';
1988 print '<input type="hidden
" name="tag
" value="'.$tag.'">';
1989 print '<input type="hidden
" name="fulltag
" value="'.$fulltag.'">';
1990 print '</td></tr>'."\n
";
1993 $shipToName = $thirdparty->getFullName($langs);
1994 $shipToStreet = $thirdparty->address;
1995 $shipToCity = $thirdparty->town;
1996 $shipToState = $thirdparty->state_code;
1997 $shipToCountryCode = $thirdparty->country_code;
1998 $shipToZip = $thirdparty->zip;
1999 $shipToStreet2 = '';
2000 $phoneNum = $thirdparty->phone;
2001 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip) {
2002 print '<!-- Shipping address information -->';
2003 print '<input type="hidden
" name="shipToName
" value="'.$shipToName.'">'."\n
";
2004 print '<input type="hidden
" name="shipToStreet
" value="'.$shipToStreet.'">'."\n
";
2005 print '<input type="hidden
" name="shipToCity
" value="'.$shipToCity.'">'."\n
";
2006 print '<input type="hidden
" name="shipToState
" value="'.$shipToState.'">'."\n
";
2007 print '<input type="hidden
" name="shipToCountryCode
" value="'.$shipToCountryCode.'">'."\n
";
2008 print '<input type="hidden
" name="shipToZip
" value="'.$shipToZip.'">'."\n
";
2009 print '<input type="hidden
" name="shipToStreet2
" value="'.$shipToStreet2.'">'."\n
";
2010 print '<input type="hidden
" name="phoneNum
" value="'.$phoneNum.'">'."\n
";
2012 print '<!-- Shipping address not complete, so we don t use it -->'."\n
";
2014 print '<input type="hidden
" name="thirdparty_id
" value="'.$thirdparty->id.'">'."\n
";
2015 print '<input type="hidden
" name="email
" value="'.$thirdparty->email.'">'."\n
";
2016 $labeldesc = $langs->trans("PaymentSubscription
");
2017 if (GETPOST('desc', 'alpha')) {
2018 $labeldesc = GETPOST('desc', 'alpha');
2020 print '<input type="hidden
" name="desc
" value="'.dol_escape_htmltag($labeldesc).'">'."\n
";
2023 if (!$found && !$mesg) {
2024 $mesg = $langs->trans("ErrorBadParameters
");
2028 print '<tr><td align="center
" colspan="2
"><br><div class="warning
">'.dol_escape_htmltag($mesg, 1, 1, 'br').'</div></td></tr>'."\n
";
2031 print '</table>'."\n
";
2035 // Show all payment mode buttons (Stripe, Paypal, ...)
2036 if ($action != 'dopayment') {
2037 if ($found && !$error) { // We are in a management option and no error
2038 // Check status of the object (Invoice) to verify if it is paid by external payment modules (ie Payzen, ...)
2040 'source' => $source,
2043 $reshook = $hookmanager->executeHooks('doCheckStatus', $parameters, $object, $action);
2045 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
2046 } elseif ($reshook > 0) {
2047 print $hookmanager->resPrint;
2050 if ($source == 'order' && $object->billed) {
2051 print '<br><br><span class="amountpaymentcomplete size15x
">'.$langs->trans("OrderBilled
").'</span>';
2052 } elseif ($source == 'invoice' && $object->paye) {
2053 print '<br><br><span class="amountpaymentcomplete size15x
">'.$langs->trans("InvoicePaid
").'</span>';
2054 } elseif ($source == 'donation' && $object->paid) {
2055 print '<br><br><span class="amountpaymentcomplete size15x
">'.$langs->trans("DonationPaid
").'</span>';
2057 // Membership can be paid and we still allow to make renewal
2058 if (($source == 'member' || $source == 'membersubscription') && $object->datefin > dol_now()) {
2059 $langs->load("members
");
2060 print '<br><span class="amountpaymentcomplete size15x
">'.$langs->trans("MembershipPaid
", dol_print_date($object->datefin, 'day')).'</span><br>';
2061 print '<div class="opacitymedium margintoponly
">'.$langs->trans("PaymentWillBeRecordedForNextPeriod
").'</div>';
2064 // Buttons for all payments registration methods
2066 // This hook is used to add Button to newpayment.php for external payment modules (ie Payzen, ...)
2068 'paymentmethod' => $paymentmethod
2070 $reshook = $hookmanager->executeHooks('doAddButton', $parameters, $object, $action);
2072 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
2073 } elseif ($reshook > 0) {
2074 print $hookmanager->resPrint;
2077 if ((empty($paymentmethod) || $paymentmethod == 'paybox') && isModEnabled('paybox')) {
2078 print '<div class="button buttonpayment
" id="div_dopayment_paybox
"><span class="fa fa-credit-card
"></span> <input class="" type="submit
" id="dopayment_paybox
" name="dopayment_paybox
" value="'.$langs->trans("PayBoxDoPayment").'">';
2080 print '<span class="buttonpaymentsmall
">'.$langs->trans("CreditOrDebitCard
").'</span>';
2083 $( document ).ready(function() {
2084 $("#div_dopayment_paybox
").click(function(){
2085 $("#dopayment_paybox
").click();
2087 $("#dopayment_paybox
").click(function(e){
2088 $("#div_dopayment_paybox
").css( \'cursor\', \'wait\' );
2089 e.stopPropagation();
2096 if ((empty($paymentmethod) || $paymentmethod == 'stripe') && isModEnabled('stripe')) {
2097 print '<div class="button buttonpayment
" id="div_dopayment_stripe
"><span class="fa fa-credit-card
"></span> <input class="" type="submit
" id="dopayment_stripe
" name="dopayment_stripe
" value="'.$langs->trans("StripeDoPayment").'">';
2098 print '<input type="hidden
" name="noidempotency
" value="'.GETPOST('noidempotency
', 'int').'">';
2100 print '<span class="buttonpaymentsmall
">'.$langs->trans("CreditOrDebitCard
").'</span>';
2103 $( document ).ready(function() {
2104 $("#div_dopayment_stripe
").click(function(){
2105 $("#dopayment_stripe
").click();
2107 $("#dopayment_stripe
").click(function(e){
2108 $("#div_dopayment_stripe
").css( \'cursor\', \'wait\' );
2109 e.stopPropagation();
2117 if ((empty($paymentmethod) || $paymentmethod == 'paypal') && isModEnabled('paypal')) {
2118 if (empty($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY)) {
2119 $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY = 'integral';
2122 print '<div class="button buttonpayment
" id="div_dopayment_paypal
">';
2123 if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY != 'integral') {
2124 print '<div style="line-height: 1em
"> </div>';
2126 print '<span class="fa fa-paypal
"></span> <input class="" type="submit
" id="dopayment_paypal
" name="dopayment_paypal
" value="'.$langs->trans("PaypalDoPayment").'">';
2127 if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY == 'integral') {
2129 print '<span class="buttonpaymentsmall
">'.$langs->trans("CreditOrDebitCard
").'</span><span class="buttonpaymentsmall
"> - </span>';
2130 print '<span class="buttonpaymentsmall
">'.$langs->trans("PayPalBalance
").'</span>';
2132 if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY == 'paypalonly') {
2134 //print '<span class="buttonpaymentsmall
">'.$langs->trans("PayPalBalance
").'"></span>
';
2138 $( document ).ready(
function() {
2139 $(
"#div_dopayment_paypal").click(
function(){
2140 $(
"#dopayment_paypal").click();
2142 $(
"#dopayment_paypal").click(
function(e){
2143 $(
"#div_dopayment_paypal").css( \
'cursor\', \'wait\' );
2144 e.stopPropagation();
2159 print
'</td></tr>'.
"\n";
2161 print
'</table>'.
"\n";
2163 print
'</form>'.
"\n";
2164 print
'</div>'.
"\n";
2171 if (preg_match(
'/^dopayment/', $action)) {
2174 $_SESSION[
"currencyCodeType"] = $currency;
2175 $_SESSION[
"FinalPaymentAmt"] = $amount;
2176 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2177 $_SESSION[
"paymentType"] =
'';
2180 if (
GETPOST(
'dopayment_stripe',
'alpha')) {
2188 background-color: white;
2191 border: 1px solid transparent;
2192 box-shadow: 0 1px 3px 0 #e6ebf1;
2193 -webkit-transition: box-shadow 150ms ease;
2194 transition: box-shadow 150ms ease;
2197 .StripeElement--focus {
2198 box-shadow: 0 1px 3px 0 #cfd7df;
2201 .StripeElement--invalid {
2202 border-color: #fa755a;
2205 .StripeElement--webkit-autofill {
2206 background-color: #fefde5 !important;
2212 print
'<!-- Form payment-form STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = '.$conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION.
' STRIPE_USE_NEW_CHECKOUT = '.$conf->global->STRIPE_USE_NEW_CHECKOUT.
' -->'.
"\n";
2213 print
'<form action="'.$_SERVER[
'REQUEST_URI'].
'" method="POST" id="payment-form">'.
"\n";
2215 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
2216 print
'<input type="hidden" name="dopayment_stripe" value="1">'.
"\n";
2217 print
'<input type="hidden" name="action" value="charge">'.
"\n";
2218 print
'<input type="hidden" name="tag" value="'.$TAG.
'">'.
"\n";
2219 print
'<input type="hidden" name="s" value="'.$source.
'">'.
"\n";
2220 print
'<input type="hidden" name="ref" value="'.$REF.
'">'.
"\n";
2221 print
'<input type="hidden" name="fulltag" value="'.$FULLTAG.
'">'.
"\n";
2222 print
'<input type="hidden" name="suffix" value="'.$suffix.
'">'.
"\n";
2223 print
'<input type="hidden" name="securekey" value="'.$SECUREKEY.
'">'.
"\n";
2224 print
'<input type="hidden" name="e" value="'.$entity.
'" />';
2225 print
'<input type="hidden" name="amount" value="'.$amount.
'">'.
"\n";
2226 print
'<input type="hidden" name="currency" value="'.$currency.
'">'.
"\n";
2227 print
'<input type="hidden" name="forcesandbox" value="'.GETPOST(
'forcesandbox',
'int').
'" />';
2228 print
'<input type="hidden" name="email" value="'.GETPOST(
'email',
'alpha').
'" />';
2229 print
'<input type="hidden" name="thirdparty_id" value="'.GETPOST(
'thirdparty_id',
'int').
'" />';
2230 print
'<input type="hidden" name="lang" value="'.$getpostlang.
'">';
2232 if (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || !empty($conf->global->STRIPE_USE_NEW_CHECKOUT)) {
2233 require_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
2235 $service =
'StripeLive';
2237 if (empty($conf->global->STRIPE_LIVE) ||
GETPOST(
'forcesandbox',
'alpha')) {
2238 $service =
'StripeTest';
2242 $stripe =
new Stripe($db);
2243 $stripeacc = $stripe->getStripeAccount($service);
2245 if (is_object($object) && is_object($object->thirdparty)) {
2246 $stripecu = $stripe->customerStripe($object->thirdparty, $stripeacc, $servicestatus, 1);
2249 if (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) {
2250 $noidempotency_key = (
GETPOSTISSET(
'noidempotency') ?
GETPOST(
'noidempotency',
'int') : 0);
2251 $paymentintent = $stripe->getPaymentIntent($amount, $currency, ($tag ? $tag : $fulltag),
'Stripe payment: '.$fulltag.(is_object($object) ?
' ref='.$object->ref :
''), $object, $stripecu, $stripeacc, $servicestatus, 0,
'automatic',
false,
null, 0, $noidempotency_key);
2254 if ($stripe->error) {
2267 <table id="dolpaymenttable" summary="Payment form" class="center centpercent">
2268 <tbody><tr><td class="textpublicpayment">';
2270 if (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) {
2271 print
'<div id="payment-request-button"><!-- A Stripe Element will be inserted here. --></div>';
2274 print
'<div class="form-row '.(getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2 ?
'center' :
'left').
'">';
2275 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2276 print
'<label for="card-element">'.$langs->trans(
"CreditOrDebitCard").
'</label>';
2277 print
'<br><input id="cardholder-name" class="marginbottomonly" name="cardholder-name" value="" type="text" placeholder="'.$langs->trans(
"CardOwner").
'" autocomplete="off" autofocus required>';
2280 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 1) {
2281 print
'<div id="card-element">
2282 <!-- a Stripe Element will be inserted here. -->
2285 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2286 print
'<div id="payment-element">
2287 <!-- a Stripe Element will be inserted here. -->
2291 print
'<!-- Used to display form errors -->
2292 <div id="card-errors" role="alert"></div>
2296 print
'<button class="button buttonpayment" style="text-align: center; padding-left: 0; padding-right: 0;" id="buttontopay" data-secret="'.(is_object($paymentintent) ? $paymentintent->client_secret :
'').
'">'.$langs->trans(
"ValidatePayment").
'</button>';
2297 print
'<img id="hourglasstopay" class="hidden" src="'.DOL_URL_ROOT.
'/theme/'.$conf->theme.
'/img/working.gif">';
2299 print
'</td></tr></tbody>';
2303 if (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) {
2304 if (empty($paymentintent)) {
2305 print
'<center>'.$langs->trans(
"Error").
'</center>';
2307 print
'<input type="hidden" name="paymentintent_id" value="'.$paymentintent->id.
'">';
2312 print
'</form>'.
"\n";
2316 if (empty($stripearrayofkeys[
'publishable_key'])) {
2317 $langs->load(
"errors");
2318 print
info_admin($langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv(
"Stripe")), 0, 0,
'error');
2320 print
'<!-- JS Code for Stripe components -->';
2321 print
'<script src="https://js.stripe.com/v3/"></script>'.
"\n";
2322 print
'<!-- urllogofull = '.$urllogofull.
' -->'.
"\n";
2325 print
'<script type="text/javascript">'.
"\n";
2327 if (!empty($conf->global->STRIPE_USE_NEW_CHECKOUT)) {
2328 $amountstripe = $amount;
2332 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
2333 if (!in_array($currency, $arrayzerounitcurrency)) {
2334 $amountstripe = $amountstripe * 100;
2338 $metadata = array(
'dol_version'=>DOL_VERSION,
'dol_entity'=>$conf->entity,
'ipaddress'=>$ipaddress);
2339 if (is_object($object)) {
2340 $metadata[
'dol_type'] = $object->element;
2341 $metadata[
'dol_id'] = $object->id;
2343 $ref = $object->ref;
2347 $arrayforpaymentintent = array(
2348 'description'=>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2349 "metadata" => $metadata
2352 $arrayforpaymentintent[
"statement_descriptor"] =
dol_trunc($TAG, 10,
'right',
'UTF-8', 1);
2355 $arrayforcheckout = array(
2356 'payment_method_types' => array(
'card'),
2357 'line_items' => array(array(
2358 'name' => $langs->transnoentitiesnoconv(
"Payment").
' '.$TAG,
2359 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
2360 'amount' => $amountstripe,
2361 'currency' => $currency,
2365 'client_reference_id' => $FULLTAG,
2366 'success_url' => $urlok,
2367 'cancel_url' => $urlko,
2368 'payment_intent_data' => $arrayforpaymentintent
2371 $arrayforcheckout[
'customer'] = $stripecu;
2373 $arrayforcheckout[
'customer_email'] =
GETPOST(
'email',
'alpha');
2375 $sessionstripe = \Stripe\Checkout\Session::create($arrayforcheckout);
2380 $_SESSION[
"currencyCodeType"] = $currency;
2381 $_SESSION[
"paymentType"] =
'';
2382 $_SESSION[
"FinalPaymentAmt"] = $amount;
2383 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
2384 $_SESSION[
'payerID'] = is_object($stripecu) ? $stripecu->id :
'';
2385 $_SESSION[
'TRANSACTIONID'] = $sessionstripe->id;
2387 print $e->getMessage();
2394 if (empty($stripeacc)) {
2396 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php ?>');
2400 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php ?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2406 var elements = stripe.elements();
2414 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2415 fontSmoothing:
'antialiased',
2423 iconColor:
'#fa755a'
2427 var cardElement = elements.create(
'card', {style: style});
2430 stripe.redirectToCheckout({
2434 sessionId:
'<?php print $sessionstripe->id; ?>'
2435 }).then(
function (result) {
2443 } elseif (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) {
2449 if (empty($stripeacc)) {
2451 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php ?>');
2455 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php ?>', { stripeAccount:
'<?php echo $stripeacc; ?>' });
2461 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2463 var cardButton = document.getElementById(
'buttontopay');
2464 var clientSecret = cardButton.dataset.secret;
2465 var options = { clientSecret: clientSecret,};
2468 var elements = stripe.elements(options);
2473 var elements = stripe.elements();
2484 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2485 fontSmoothing:
'antialiased',
2493 iconColor:
'#fa755a'
2498 if (
getDolGlobalInt(
'STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION') == 2) {
2500 var paymentElement = elements.create(
"payment");
2503 paymentElement.mount(
"#payment-element");
2506 var cardButton = document.getElementById(
'buttontopay');
2508 cardButton.addEventListener(
'click',
function(event) {
2509 console.log(
"We click on buttontopay");
2510 event.preventDefault();
2513 jQuery(
'#hourglasstopay').show();
2514 jQuery(
'#buttontopay').hide();
2516 stripe.confirmPayment({
2517 elements,confirmParams: {
2518 return_url:
'<?php echo $urlok; ?>',
2519 payment_method_data: {
2522 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object($object->thirdparty) && !empty($object->thirdparty->email))) {
2523 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
2525 <?php
if (is_object($object) && is_object($object->thirdparty) && !empty($object->thirdparty->phone)) {
2526 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
2528 <?php
if (is_object($object) && is_object($object->thirdparty)) {
2530 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2531 <?php if ($object->thirdparty->country_code) {
2532 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
2534 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
2535 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
2540 save_payment_method:<?php
if ($stripecu) {
2547 ).then(
function(result) {
2548 console.log(result);
2550 console.log(
"Error on result of handleCardPayment");
2551 jQuery(
'#buttontopay').show();
2552 jQuery(
'#hourglasstopay').hide();
2554 var errorElement = document.getElementById(
'card-errors');
2555 console.log(result);
2556 errorElement.textContent = result.error.message;
2559 console.log(
"No error on result of handleCardPayment, so we submit the form");
2561 jQuery(
'#buttontopay').hide();
2562 jQuery(
'#hourglasstopay').show();
2564 jQuery(
'#payment-form').submit();
2572 var cardElement = elements.create(
'card', {style: style});
2575 cardElement.mount(
'#card-element');
2578 cardElement.addEventListener(
'change',
function(event) {
2579 var displayError = document.getElementById(
'card-errors');
2581 console.log(
"Show event error (like 'Incorrect card number', ...)");
2582 displayError.textContent =
event.error.message;
2584 console.log(
"Reset error message");
2585 displayError.textContent =
'';
2590 var cardholderName = document.getElementById(
'cardholder-name');
2591 var cardButton = document.getElementById(
'buttontopay');
2592 var clientSecret = cardButton.dataset.secret;
2594 cardButton.addEventListener(
'click',
function(event) {
2595 console.log(
"We click on buttontopay");
2596 event.preventDefault();
2598 if (cardholderName.value ==
'')
2600 console.log(
"Field Card holder is empty");
2601 var displayError = document.getElementById(
'card-errors');
2602 displayError.textContent =
'<?php print dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CardOwner"))); ?>';
2607 jQuery(
'#hourglasstopay').show();
2608 jQuery(
'#buttontopay').hide();
2610 stripe.handleCardPayment(
2611 clientSecret, cardElement, {
2612 payment_method_data: {
2614 name: cardholderName.value
2615 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object($object->thirdparty) && !empty($object->thirdparty->email))) {
2616 ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php
2618 <?php
if (is_object($object) && is_object($object->thirdparty) && !empty($object->thirdparty->phone)) {
2619 ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php
2621 <?php
if (is_object($object) && is_object($object->thirdparty)) {
2623 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2624 <?php if ($object->thirdparty->country_code) {
2625 ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php
2627 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
2628 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
2633 save_payment_method:<?php
if ($stripecu) {
2639 ).then(
function(result) {
2640 console.log(result);
2642 console.log(
"Error on result of handleCardPayment");
2643 jQuery(
'#buttontopay').show();
2644 jQuery(
'#hourglasstopay').hide();
2646 var errorElement = document.getElementById(
'card-errors');
2647 errorElement.textContent = result.error.message;
2650 console.log(
"No error on result of handleCardPayment, so we submit the form");
2652 jQuery(
'#buttontopay').hide();
2653 jQuery(
'#hourglasstopay').show();
2655 jQuery(
'#payment-form').submit();
2674 'paymentmethod' => $paymentmethod,
2675 'amount' => $amount,
2676 'currency' => $currency,
2677 'tag' =>
GETPOST(
"tag",
'alpha'),
2678 'dopayment' =>
GETPOST(
'dopayment',
'alpha')
2680 $reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
2683 } elseif ($reshook > 0) {
2684 print $hookmanager->resPrint;
2688 htmlPrintOnlinePaymentFooter($mysoc, $langs, 1, $suffix, $object);
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage members of a foundation.
Class to manage members type.
Class to manage customers orders.
Class for ConferenceOrBoothAttendee.
Class to manage contracts.
Class to manage lines of contracts.
Class to manage invoices.
Class to manage payments of donations.
Class to manage products or services.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage subscriptions of foundation members.
if(isModEnabled('facture') &&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') &&!empty($user->rights->don->lire)) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_now($mode='auto')
Return date for now.
img_mime($file, $titlealt='', $morecss='')
Show MIME img of a file.
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)
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
dol_string_unaccent($str)
Clean a string from all accent characters to be used as ref, login or by dol_sanitizeFileName.
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_print_error_email($prefixcode, $errormessage='', $errormessages=array(), $morecss='error', $email='')
Show a public email and error code to contact if technical error.
dol_htmloutput_mesg($mesgstring='', $mesgarray=array(), $style='ok', $keepembedded=0)
Print formated messages to output (Used to show messages on html output).
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getUserRemoteIP()
Return the IP of remote user.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
table tableforfield button
0 = Do not include form tag and submit button -1 = Do not include form tag but include submit button
print_paybox_redirect($PRICE, $CURRENCY, $EMAIL, $urlok, $urlko, $TAG)
Create a redirect form to paybox form.
print_paypal_redirect($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $tag)
Send redirect to paypal to browser.
$conf db name
Only used if Module[ID]Name translation string is not found.
dol_verifyHash($chain, $hash, $type='0')
Compute a hash and compare it to the given one For backward compatibility reasons,...