37 if (!defined(
'NOLOGIN')) define(
"NOLOGIN", 1);
38 if (!defined(
'NOCSRFCHECK')) define(
"NOCSRFCHECK", 1);
39 if (!defined(
'NOIPCHECK')) define(
'NOIPCHECK',
'1');
40 if (!defined(
'NOBROWSERNOTIF')) define(
'NOBROWSERNOTIF',
'1');
44 $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))));
45 if (is_numeric($entity)) define(
"DOLENTITY", $entity);
47 require
'../../main.inc.php';
48 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
49 require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
50 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
51 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
52 require_once DOL_DOCUMENT_ROOT.
'/societe/class/societeaccount.class.php';
54 include_once DOL_DOCUMENT_ROOT.
'/core/class/hookmanager.class.php';
56 $hookmanager->initHooks(array(
'newpayment'));
59 $langs->loadLangs(array(
"main",
"other",
"dict",
"bills",
"companies",
"errors",
"paybox",
"paypal",
"stripe"));
64 $action =
GETPOST(
'action',
'aZ09');
73 $suffix =
GETPOST(
"suffix",
'aZ09');
75 if (!
GETPOST(
"currency",
'alpha')) $currency = $conf->currency;
76 else $currency =
GETPOST(
"currency",
'aZ09');
82 if (!
GETPOST(
"amount",
'alpha') && !$source)
84 print $langs->trans(
'ErrorBadParameters').
" - amount or source";
87 if (is_numeric($amount) && !
GETPOST(
"tag",
'alpha') && !$source)
89 print $langs->trans(
'ErrorBadParameters').
" - tag or source";
92 if ($source && !
GETPOST(
"ref",
'alpha'))
94 print $langs->trans(
'ErrorBadParameters').
" - ref";
100 $paymentmethod =
GETPOST(
'paymentmethod',
'alphanohtml') ?
GETPOST(
'paymentmethod',
'alphanohtml') :
'';
101 $validpaymentmethod = array();
104 foreach ($_POST as $key => $val)
106 if (preg_match(
'/^dopayment_(.*)$/', $key, $reg))
108 $paymentmethod = $reg[1];
117 $urlwithroot = DOL_MAIN_URL_ROOT;
119 $urlok = $urlwithroot.
'/public/payment/paymentok.php?';
120 $urlko = $urlwithroot.
'/public/payment/paymentko.php?';
123 $ref = $REF =
GETPOST(
'ref',
'alpha');
124 $TAG =
GETPOST(
"tag",
'alpha');
125 $FULLTAG =
GETPOST(
"fulltag",
'alpha');
126 $SECUREKEY =
GETPOST(
"securekey");
127 if ($paymentmethod && !preg_match(
'/'.preg_quote(
'PM='.$paymentmethod,
'/').
'/', $FULLTAG)) $FULLTAG .= ($FULLTAG ?
'.' :
'').
'PM='.$paymentmethod;
131 $urlok .=
'suffix='.urlencode($suffix).
'&';
132 $urlko .=
'suffix='.urlencode($suffix).
'&';
136 $urlok .=
's='.urlencode($source).
'&';
137 $urlko .=
's='.urlencode($source).
'&';
141 $urlok .=
'ref='.urlencode($REF).
'&';
142 $urlko .=
'ref='.urlencode($REF).
'&';
146 $urlok .=
'tag='.urlencode($TAG).
'&';
147 $urlko .=
'tag='.urlencode($TAG).
'&';
149 if (!empty($FULLTAG))
151 $urlok .=
'fulltag='.urlencode($FULLTAG).
'&';
152 $urlko .=
'fulltag='.urlencode($FULLTAG).
'&';
154 if (!empty($SECUREKEY))
156 $urlok .=
'securekey='.urlencode($SECUREKEY).
'&';
157 $urlko .=
'securekey='.urlencode($SECUREKEY).
'&';
161 $urlok .=
'e='.urlencode($entity).
'&';
162 $urlko .=
'e='.urlencode($entity).
'&';
164 $urlok = preg_replace(
'/&$/',
'', $urlok);
165 $urlko = preg_replace(
'/&$/',
'', $urlko);
171 if ((empty($paymentmethod) || $paymentmethod ==
'paypal') && !empty($conf->paypal->enabled))
173 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypal.lib.php';
174 require_once DOL_DOCUMENT_ROOT.
'/paypal/lib/paypalfunctions.lib.php';
178 if ($urlok) $PAYPAL_API_OK = $urlok;
180 if ($urlko) $PAYPAL_API_KO = $urlko;
181 if (empty($PAYPAL_API_USER))
186 if (empty($PAYPAL_API_PASSWORD))
188 dol_print_error(
'',
"Paypal setup param PAYPAL_API_PASSWORD not defined");
191 if (empty($PAYPAL_API_SIGNATURE))
193 dol_print_error(
'',
"Paypal setup param PAYPAL_API_SIGNATURE not defined");
197 if ((empty($paymentmethod) || $paymentmethod ==
'paybox') && !empty($conf->paybox->enabled))
201 if ((empty($paymentmethod) || $paymentmethod ==
'stripe') && !empty($conf->stripe->enabled))
203 require_once DOL_DOCUMENT_ROOT.
'/stripe/config.php';
207 $validpaymentmethod = getValidOnlinePaymentMethods($paymentmethod);
211 'paymentmethod' => $paymentmethod,
212 'validpaymentmethod' => &$validpaymentmethod
214 $reshook = $hookmanager->executeHooks(
'doValidatePayment', $parameters, $object, $action);
218 if (!empty($conf->global->PAYMENT_SECURITY_TOKEN))
220 if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE))
222 if ($source && $REF) $token =
dol_hash($conf->global->PAYMENT_SECURITY_TOKEN.$source.$REF, 2);
223 else $token =
dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
225 $token = $conf->global->PAYMENT_SECURITY_TOKEN;
227 if ($SECUREKEY != $token)
229 if (empty($conf->global->PAYMENT_SECURITY_ACCEPT_ANY_TOKEN)) $valid =
false;
230 else dol_syslog(
"Warning: PAYMENT_SECURITY_ACCEPT_ANY_TOKEN is on", LOG_WARNING);
235 print '<div class="error">Bad value for key.</div>';
241 if (!empty($paymentmethod) && empty($validpaymentmethod[$paymentmethod]))
243 print 'Payment module for payment method '.$paymentmethod.
' is not active';
246 if (empty($validpaymentmethod))
248 print 'No active payment module (Paypal, Stripe, Paybox, ...)';
253 $creditor = $mysoc->name;
254 $paramcreditor =
'ONLINE_PAYMENT_CREDITOR';
255 $paramcreditorlong =
'ONLINE_PAYMENT_CREDITOR_'.$suffix;
256 if (!empty($conf->global->$paramcreditorlong)) $creditor = $conf->global->$paramcreditorlong;
257 elseif (!empty($conf->global->$paramcreditor)) $creditor = $conf->global->$paramcreditor;
266 if ($action == 'dopayment')
268 if ($paymentmethod ==
'paypal')
271 $PAYPAL_PAYMENT_TYPE =
'Sale';
274 $origfulltag =
GETPOST(
"fulltag",
'alpha');
275 $shipToName =
GETPOST(
"shipToName",
'alpha');
276 $shipToStreet =
GETPOST(
"shipToStreet",
'alpha');
277 $shipToCity =
GETPOST(
"shipToCity",
'alpha');
278 $shipToState =
GETPOST(
"shipToState",
'alpha');
279 $shipToCountryCode =
GETPOST(
"shipToCountryCode",
'alpha');
280 $shipToZip =
GETPOST(
"shipToZip",
'alpha');
281 $shipToStreet2 =
GETPOST(
"shipToStreet2",
'alpha');
282 $phoneNum =
GETPOST(
"phoneNum",
'alpha');
283 $email =
GETPOST(
"email",
'alpha');
284 $desc =
GETPOST(
"desc",
'alpha');
285 $thirdparty_id =
GETPOST(
'thirdparty_id',
'int');
288 if ($shipToCountryCode ==
'ID' && !preg_match(
'/\-/', $shipToState))
290 $shipToState =
'ID-'.$shipToState;
294 if (empty($PAYPAL_API_PRICE) || !is_numeric($PAYPAL_API_PRICE))
296 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
301 elseif (!$origfulltag)
303 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentCode"));
310 dol_syslog(
"newpayment.php call paypal api and do redirect", LOG_DEBUG);
313 $PAYPAL_API_DEVISE =
"USD";
314 if (!empty($currency)) $PAYPAL_API_DEVISE = $currency;
318 dol_syslog(
"PAYPAL_API_USER: $PAYPAL_API_USER", LOG_DEBUG);
319 dol_syslog(
"PAYPAL_API_PASSWORD: ".preg_replace(
'/./',
'*', $PAYPAL_API_PASSWORD), LOG_DEBUG);
320 dol_syslog(
"PAYPAL_API_SIGNATURE: $PAYPAL_API_SIGNATURE", LOG_DEBUG);
321 dol_syslog(
"PAYPAL_API_SANDBOX: $PAYPAL_API_SANDBOX", LOG_DEBUG);
322 dol_syslog(
"PAYPAL_API_OK: $PAYPAL_API_OK", LOG_DEBUG);
323 dol_syslog(
"PAYPAL_API_KO: $PAYPAL_API_KO", LOG_DEBUG);
324 dol_syslog(
"PAYPAL_API_PRICE: $PAYPAL_API_PRICE", LOG_DEBUG);
325 dol_syslog(
"PAYPAL_API_DEVISE: $PAYPAL_API_DEVISE", LOG_DEBUG);
327 dol_syslog(
"shipToName: $shipToName", LOG_DEBUG);
328 dol_syslog(
"shipToStreet: $shipToStreet", LOG_DEBUG);
329 dol_syslog(
"shipToCity: $shipToCity", LOG_DEBUG);
330 dol_syslog(
"shipToState: $shipToState", LOG_DEBUG);
331 dol_syslog(
"shipToCountryCode: $shipToCountryCode", LOG_DEBUG);
332 dol_syslog(
"shipToZip: $shipToZip", LOG_DEBUG);
333 dol_syslog(
"shipToStreet2: $shipToStreet2", LOG_DEBUG);
341 $mesg =
print_paypal_redirect($PAYPAL_API_PRICE, $PAYPAL_API_DEVISE, $PAYPAL_PAYMENT_TYPE, $PAYPAL_API_OK, $PAYPAL_API_KO, $FULLTAG);
348 if ($paymentmethod ==
'paybox')
351 $email = $conf->global->ONLINE_PAYMENT_SENDEMAIL;
352 $thirdparty_id =
GETPOST(
'thirdparty_id',
'int');
354 $origfulltag =
GETPOST(
"fulltag",
'alpha');
357 $urlok = preg_replace(
'/securekey=[^&]+/',
'', $urlok);
358 $urlko = preg_replace(
'/securekey=[^&]+/',
'', $urlko);
361 if (empty($PRICE) || !is_numeric($PRICE)) $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount"));
362 elseif (empty($email)) $mesg = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("YourEMail"));
363 elseif (!isValidEMail($email)) $mesg = $langs->trans("ErrorBadEMail", $email);
364 elseif (!$origfulltag) $mesg = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PaymentCode"));
365 elseif (
dol_strlen($urlok) > 150) $mesg = 'Error urlok too
long '.$urlok.'( Paybox requires 150, found '.strlen($urlok).')';
366 elseif (
dol_strlen($urlko) > 150) $mesg = 'Error urlko too
long '.$urlko.'( Paybox requires 150, found '.strlen($urlok).')';
370 dol_syslog(
"newpayment.php call paybox api and do redirect", LOG_DEBUG);
372 include_once DOL_DOCUMENT_ROOT.
'/paybox/lib/paybox.lib.php';
380 if ($paymentmethod ==
'stripe')
384 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount")), null,
'errors');
394 if ($action ==
'charge' && !empty($conf->stripe->enabled))
396 $amountstripe = $amount;
400 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
401 if (!in_array($currency, $arrayzerounitcurrency)) $amountstripe = $amountstripe * 100;
403 dol_syslog(
"--- newpayment.php Execute action = ".$action, LOG_DEBUG, 0,
'_stripe');
404 dol_syslog(
"POST keys : ".join(
',', array_keys($_POST)), LOG_DEBUG, 0,
'_stripe');
405 dol_syslog(
"POST values: ".join(
',', $_POST), LOG_DEBUG, 0,
'_stripe');
407 $stripeToken =
GETPOST(
"stripeToken",
'alpha');
408 $email =
GETPOST(
"email",
'alpha');
409 $thirdparty_id =
GETPOST(
'thirdparty_id',
'int');
411 $dol_id =
GETPOST(
'dol_id',
'int');
412 $vatnumber =
GETPOST(
'vatnumber',
'alpha');
415 dol_syslog(
"POST stripeToken = ".$stripeToken, LOG_DEBUG, 0,
'_stripe');
416 dol_syslog(
"POST email = ".$email, LOG_DEBUG, 0,
'_stripe');
417 dol_syslog(
"POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0,
'_stripe');
418 dol_syslog(
"POST vatnumber = ".$vatnumber, LOG_DEBUG, 0,
'_stripe');
424 if (empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION))
428 'dol_version' => DOL_VERSION,
429 'dol_entity' => $conf->entity,
430 'dol_company' => $mysoc->name,
431 'dol_tax_num' => $vatnumber,
435 if (!empty($thirdparty_id)) $metadata[
"dol_thirdparty_id"] = $thirdparty_id;
437 if ($thirdparty_id > 0)
439 dol_syslog(
"Search existing Stripe customer profile for thirdparty_id=".$thirdparty_id, LOG_DEBUG, 0,
'_stripe');
441 $service =
'StripeTest';
443 if (!empty($conf->global->STRIPE_LIVE) && !
GETPOST(
'forcesandbox',
'int'))
445 $service =
'StripeLive';
449 $thirdparty =
new Societe($db);
450 $thirdparty->fetch($thirdparty_id);
453 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
454 $stripe =
new Stripe($db);
455 $stripeacc = $stripe->getStripeAccount($service);
456 $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1);
457 if (empty($customer))
460 dol_syslog(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error, LOG_ERR, 0,
'_stripe');
461 setEventMessages(
'Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.
' and servicestatus = '.$servicestatus.
': '.$stripe->error, null,
'errors');
469 $card = $customer->sources->create(array(
"source" => $stripeToken,
"metadata" => $metadata));
471 $card = $stripeToken;
477 dol_syslog(
'Failed to create card record', LOG_WARNING, 0,
'_stripe');
481 if (!empty($FULLTAG)) $metadata[
"FULLTAG"] = $FULLTAG;
482 if (!empty($dol_id)) $metadata[
"dol_id"] = $dol_id;
483 if (!empty($dol_type)) $metadata[
"dol_type"] = $dol_type;
485 dol_syslog(
"Create charge on card ".$card->id, LOG_DEBUG, 0,
'_stripe');
486 $charge = \Stripe\Charge::create(array(
487 'amount' =>
price2num($amountstripe,
'MU'),
488 'currency' => $currency,
490 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
491 'metadata' => $metadata,
492 'customer' => $customer->id,
494 'statement_descriptor_suffix' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
495 ), array(
"idempotency_key" =>
"$FULLTAG",
"stripe_account" =>
"$stripeacc"));
500 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_stripe');
507 $vatcleaned = $vatnumber ? $vatnumber : null;
518 dol_syslog(
"Create anonymous customer card profile", LOG_DEBUG, 0,
'_stripe');
520 $customer = \Stripe\Customer::create(array(
522 'description' => ($email ?
'Anonymous customer for '.$email :
'Anonymous customer'),
523 'metadata' => $metadata,
524 'source' => $stripeToken
543 if (!empty($FULLTAG)) $metadata[
"FULLTAG"] = $FULLTAG;
544 if (!empty($dol_id)) $metadata[
"dol_id"] = $dol_id;
545 if (!empty($dol_type)) $metadata[
"dol_type"] = $dol_type;
549 dol_syslog(
"Create charge", LOG_DEBUG, 0,
'_stripe');
550 $charge = \Stripe\Charge::create(array(
551 'customer' => $customer->id,
552 'amount' =>
price2num($amountstripe,
'MU'),
553 'currency' => $currency,
555 'description' =>
'Stripe payment: '.$FULLTAG.
' ref='.$ref,
556 'metadata' => $metadata,
557 'statement_descriptor' =>
dol_trunc($FULLTAG, 10,
'right',
'UTF-8', 1),
558 ), array(
"idempotency_key" =>
"$FULLTAG",
"stripe_account" =>
"$stripeacc"));
563 dol_syslog(
'Failed to charge card', LOG_WARNING, 0,
'_stripe');
568 }
catch (\
Stripe\Error\Card $e) {
570 $body = $e->getJsonBody();
571 $err = $body[
'error'];
573 print(
'Status is:'.$e->getHttpStatus().
"\n");
574 print(
'Type is:'.$err[
'type'].
"\n");
575 print(
'Code is:'.$err[
'code'].
"\n");
577 print(
'Param is:'.$err[
'param'].
"\n");
578 print(
'Message is:'.$err[
'message'].
"\n");
581 $errormessage =
"ErrorCard ".$e->getMessage().
" err=".var_export($err,
true);
582 dol_syslog($errormessage, LOG_WARNING, 0,
'_stripe');
585 }
catch (\
Stripe\Error\RateLimit $e) {
588 $errormessage =
"ErrorRateLimit ".$e->getMessage();
589 dol_syslog($errormessage, LOG_WARNING, 0,
'_stripe');
592 }
catch (\
Stripe\Error\InvalidRequest $e) {
595 $errormessage =
"ErrorInvalidRequest ".$e->getMessage();
596 dol_syslog($errormessage, LOG_WARNING, 0,
'_stripe');
599 }
catch (\
Stripe\Error\Authentication $e) {
603 $errormessage =
"ErrorAuthentication ".$e->getMessage();
604 dol_syslog($errormessage, LOG_WARNING, 0,
'_stripe');
607 }
catch (\
Stripe\Error\ApiConnection $e) {
610 $errormessage =
"ErrorApiConnection ".$e->getMessage();
611 dol_syslog($errormessage, LOG_WARNING, 0,
'_stripe');
614 }
catch (\
Stripe\Error\Base $e) {
618 $errormessage =
"ErrorBase ".$e->getMessage();
619 dol_syslog($errormessage, LOG_WARNING, 0,
'_stripe');
625 $errormessage =
"ErrorException ".$e->getMessage();
626 dol_syslog($errormessage, LOG_WARNING, 0,
'_stripe');
633 if (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION))
635 $service =
'StripeTest';
637 if (!empty($conf->global->STRIPE_LIVE) && !
GETPOST(
'forcesandbox',
'int'))
639 $service =
'StripeLive';
642 include_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
643 $stripe =
new Stripe($db);
644 $stripeacc = $stripe->getStripeAccount($service);
648 $paymentintent_id =
GETPOST(
"paymentintent_id",
"alpha");
651 global $stripearrayofkeysbyenv;
652 \Stripe\Stripe::setApiKey($stripearrayofkeysbyenv[$servicestatus][
'secret_key']);
655 if (empty($stripeacc)) {
656 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id);
658 $paymentintent = \Stripe\PaymentIntent::retrieve($paymentintent_id, array(
"stripe_account" => $stripeacc));
663 $errormessage =
"CantRetrievePaymentIntent ".$e->getMessage();
664 dol_syslog($errormessage, LOG_WARNING, 0,
'_stripe');
669 if ($paymentintent->status !=
'succeeded')
672 $errormessage =
"StatusOfRetrievedIntent is not succeeded: ".$paymentintent->status;
673 dol_syslog($errormessage, LOG_WARNING, 0,
'_stripe');
686 $_SESSION[
"onlinetoken"] = $stripeToken;
687 $_SESSION[
"FinalPaymentAmt"] = $amount;
688 $_SESSION[
"currencyCodeType"] = $currency;
689 $_SESSION[
"paymentType"] =
'';
690 $_SESSION[
'ipaddress'] = ($remoteip ? $remoteip :
'unknown');
691 $_SESSION[
'payerID'] = is_object($customer) ? $customer->id :
'';
692 $_SESSION[
'TRANSACTIONID'] = (is_object($charge) ? $charge->id : (is_object($paymentintent) ? $paymentintent->id :
''));
693 $_SESSION[
'errormessage'] = $errormessage;
695 dol_syslog(
"Action charge stripe ip=".$remoteip, LOG_DEBUG, 0,
'_stripe');
696 dol_syslog(
"onlinetoken=".$_SESSION[
"onlinetoken"].
" FinalPaymentAmt=".$_SESSION[
"FinalPaymentAmt"].
" currencyCodeType=".$_SESSION[
"currencyCodeType"].
" payerID=".$_SESSION[
'payerID'].
" TRANSACTIONID=".$_SESSION[
'TRANSACTIONID'], LOG_DEBUG, 0,
'_stripe');
697 dol_syslog(
"FULLTAG=".$FULLTAG, LOG_DEBUG, 0,
'_stripe');
698 dol_syslog(
"error=".$error.
" errormessage=".$errormessage, LOG_DEBUG, 0,
'_stripe');
699 dol_syslog(
"Now call the redirect to paymentok or paymentko, URL = ".($error ? $urlko : $urlok), LOG_DEBUG, 0,
'_stripe');
703 header(
"Location: ".$urlko);
706 header(
"Location: ".$urlok);
717 if (!empty($conf->global->ONLINE_PAYMENT_CSS_URL)) $head =
'<link rel="stylesheet" type="text/css" href="'.$conf->global->ONLINE_PAYMENT_CSS_URL.
'?lang='.$langs->defaultlang.
'">'.
"\n";
719 $conf->dol_hide_topmenu = 1;
720 $conf->dol_hide_leftmenu = 1;
722 $replacemainarea = (empty($conf->dol_hide_leftmenu) ?
'<div>' :
'').
'<div>';
723 llxHeader($head, $langs->trans(
"PaymentForm"),
'',
'', 0, 0,
'',
'',
'',
'onlinepaymentbody', $replacemainarea);
726 if ($source && in_array($ref, array(
'member_ref',
'contractline_ref',
'invoice_ref',
'order_ref',
'')))
728 $langs->load(
"errors");
729 dol_print_error_email(
'BADREFINPAYMENTFORM', $langs->trans(
"ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
738 if ((empty($paymentmethod) || $paymentmethod ==
'paypal') && !empty($conf->paypal->enabled) && (!empty($conf->global->PAYPAL_API_SANDBOX) ||
GETPOST(
'forcesandbox',
'int')))
740 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Paypal'),
'',
'warning');
742 if ((empty($paymentmethod) || $paymentmethod ==
'stripe') && !empty($conf->stripe->enabled) && (empty($conf->global->STRIPE_LIVE) ||
GETPOST(
'forcesandbox',
'int')))
744 dol_htmloutput_mesg($langs->trans(
'YouAreCurrentlyInSandboxMode',
'Stripe'),
'',
'warning');
748 print '<span id="dolpaymentspan"></span>'.
"\n";
749 print '<div class="center">'.
"\n";
750 print '<form id="dolpaymentform" class="center" name="paymentform" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">'.
"\n";
751 print '<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
752 print '<input type="hidden" name="action" value="dopayment">'.
"\n";
753 print '<input type="hidden" name="tag" value="'.GETPOST(
"tag",
'alpha').
'">'.
"\n";
754 print '<input type="hidden" name="suffix" value="'.dol_escape_htmltag($suffix).
'">'.
"\n";
755 print '<input type="hidden" name="securekey" value="'.dol_escape_htmltag($SECUREKEY).
'">'.
"\n";
756 print '<input type="hidden" name="e" value="'.$entity.
'" />';
757 print '<input type="hidden" name="forcesandbox" value="'.GETPOST(
'forcesandbox',
'int').
'" />';
763 $logosmall = $mysoc->logo_small;
764 $logo = $mysoc->logo;
765 $paramlogo =
'ONLINE_PAYMENT_LOGO_'.$suffix;
766 if (!empty($conf->global->$paramlogo)) $logosmall = $conf->global->$paramlogo;
767 elseif (!empty($conf->global->ONLINE_PAYMENT_LOGO)) $logosmall = $conf->global->ONLINE_PAYMENT_LOGO;
772 if (!empty($logosmall) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$logosmall))
774 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
775 $urllogofull = $dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$logosmall);
776 } elseif (!empty($logo) && is_readable($conf->mycompany->dir_output.
'/logos/'.$logo))
778 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
779 $urllogofull = $dolibarr_main_url_root.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/'.$logo);
785 print '<div class="backgreypublicpayment">';
786 print '<div class="logopublicpayment">';
787 print '<img id="dolpaymentlogo" src="'.$urllogo.
'"';
790 if (empty($conf->global->MAIN_HIDE_POWERED_BY)) {
791 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>';
799 print '<!-- Form to send a payment -->'.
"\n";
800 print '<!-- creditor = '.$creditor.
' -->'.
"\n";
802 if (!empty($conf->paypal->enabled))
804 print '<!-- PAYPAL_API_SANDBOX = '.$conf->global->PAYPAL_API_SANDBOX.
' -->'.
"\n";
805 print '<!-- PAYPAL_API_INTEGRAL_OR_PAYPALONLY = '.$conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY.
' -->'.
"\n";
807 if (!empty($conf->paybox->enabled))
809 print '<!-- PAYBOX_CGI_URL = '.$conf->global->PAYBOX_CGI_URL_V2.
' -->'.
"\n";
811 if (!empty($conf->stripe->enabled))
813 print '<!-- STRIPE_LIVE = '.$conf->global->STRIPE_LIVE.
' -->'.
"\n";
815 print '<!-- urlok = '.$urlok.
' -->'.
"\n";
816 print '<!-- urlko = '.$urlko.
' -->'.
"\n";
819 print '<table id="dolpaymenttable" summary="Payment form" class="center">'.
"\n";
823 if (!empty($conf->global->PAYMENT_NEWFORM_TEXT))
825 $langs->load(
"members");
826 if (preg_match(
'/^\((.*)\)$/', $conf->global->PAYMENT_NEWFORM_TEXT, $reg)) $text .= $langs->trans($reg[1]).
"<br>\n";
827 else $text .= $conf->global->PAYMENT_NEWFORM_TEXT.
"<br>\n";
828 $text =
'<tr><td align="center"><br>'.$text.
'<br></td></tr>'.
"\n";
832 $text .=
'<tr><td class="textpublicpayment"><br><strong>'.$langs->trans(
"WelcomeOnPaymentPage").
'</strong></td></tr>'.
"\n";
833 $text .=
'<tr><td class="textpublicpayment">'.$langs->trans(
"ThisScreenAllowsYouToPay", $creditor).
'<br><br></td></tr>'.
"\n";
838 print '<tr><td align="center">';
839 print '<table with="100%" id="tablepublicpayment">';
840 print '<tr><td align="left" colspan="2" class="opacitymedium">'.$langs->trans(
"ThisIsInformationOnPayment").
' :</td></tr>'.
"\n";
853 $tag =
GETPOST(
"tag",
'alpha');
854 if (
GETPOST(
'fulltag',
'alpha')) {
855 $fulltag =
GETPOST(
'fulltag',
'alpha');
857 $fulltag =
"TAG=".$tag;
861 print '<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Creditor");
862 print '</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b>'.$creditor.
'</b>';
863 print '<input type="hidden" name="creditor" value="'.$creditor.
'">';
864 print '</td></tr>'.
"\n";
867 print '<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Amount");
868 if (empty($amount)) print
' ('.$langs->trans(
"ToComplete").
')';
869 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">';
870 if (empty($amount) || !is_numeric($amount))
872 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
873 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
875 print
'<b>'.price($amount).
'</b>';
876 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
877 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
880 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
881 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
882 print
'</td></tr>'.
"\n";
885 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"PaymentCode");
886 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b style="word-break: break-all;">'.$fulltag.
'</b>';
887 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
888 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
889 print
'</td></tr>'.
"\n";
897 if ($source ==
'order')
900 $langs->load(
"orders");
902 require_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
905 $result = $order->fetch(
'', $ref);
908 $mesg = $order->error;
911 $result = $order->fetch_thirdparty($order->socid);
915 if ($action !=
'dopayment')
917 $amount = $order->total_ttc;
918 if (
GETPOST(
"amount",
'alpha')) $amount =
GETPOST(
"amount",
'alpha');
922 if (
GETPOST(
'fulltag',
'alpha')) {
923 $fulltag =
GETPOST(
'fulltag',
'alpha');
925 $fulltag =
'ORD='.$order->id.
'.CUS='.$order->thirdparty->id;
926 if (!empty($TAG)) { $tag = $TAG; $fulltag .=
'.TAG='.$TAG; }
931 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Creditor");
932 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b>'.$creditor.
'</b>';
933 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
934 print
'</td></tr>'.
"\n";
937 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"ThirdParty");
938 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b>'.$order->thirdparty->name.
'</b>';
939 print
'</td></tr>'.
"\n";
942 $text =
'<b>'.$langs->trans(
"PaymentOrderRef", $order->ref).
'</b>';
943 if (
GETPOST(
'desc',
'alpha')) $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
944 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Designation");
945 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$text;
946 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
947 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($order->ref).
'">';
948 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag($order->id).
'">';
949 $directdownloadlink = $order->getLastMainDocLink(
'commande');
950 if ($directdownloadlink)
952 print
'<br><a href="'.$directdownloadlink.
'" rel="nofollow noopener">';
953 print
img_mime($order->last_main_doc,
'');
954 print $langs->trans(
"DownloadDocument").
'</a>';
956 print
'</td></tr>'.
"\n";
959 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Amount");
960 if (empty($amount)) print
' ('.$langs->trans(
"ToComplete").
')';
961 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">';
962 if (empty($amount) || !is_numeric($amount))
964 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
965 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
967 print
'<b>'.price($amount).
'</b>';
968 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
969 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
972 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
973 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
974 print
'</td></tr>'.
"\n";
977 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"PaymentCode");
978 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b style="word-break: break-all;">'.$fulltag.
'</b>';
979 print
'<input type="hidden" name="tag" value="'.dol_escape_htmltag($tag).
'">';
980 print
'<input type="hidden" name="fulltag" value="'.dol_escape_htmltag($fulltag).
'">';
981 print
'</td></tr>'.
"\n";
984 $shipToName = $order->thirdparty->name;
985 $shipToStreet = $order->thirdparty->address;
986 $shipToCity = $order->thirdparty->town;
987 $shipToState = $order->thirdparty->state_code;
988 $shipToCountryCode = $order->thirdparty->country_code;
989 $shipToZip = $order->thirdparty->zip;
991 $phoneNum = $order->thirdparty->phone;
992 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip)
994 print
'<input type="hidden" name="shipToName" value="'.dol_escape_htmltag($shipToName).
'">'.
"\n";
995 print
'<input type="hidden" name="shipToStreet" value="'.dol_escape_htmltag($shipToStreet).
'">'.
"\n";
996 print
'<input type="hidden" name="shipToCity" value="'.dol_escape_htmltag($shipToCity).
'">'.
"\n";
997 print
'<input type="hidden" name="shipToState" value="'.dol_escape_htmltag($shipToState).
'">'.
"\n";
998 print
'<input type="hidden" name="shipToCountryCode" value="'.dol_escape_htmltag($shipToCountryCode).
'">'.
"\n";
999 print
'<input type="hidden" name="shipToZip" value="'.dol_escape_htmltag($shipToZip).
'">'.
"\n";
1000 print
'<input type="hidden" name="shipToStreet2" value="'.dol_escape_htmltag($shipToStreet2).
'">'.
"\n";
1001 print
'<input type="hidden" name="phoneNum" value="'.dol_escape_htmltag($phoneNum).
'">'.
"\n";
1003 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1005 if (is_object($order->thirdparty)) print
'<input type="hidden" name="thirdparty_id" value="'.$order->thirdparty->id.
'">'.
"\n";
1006 print
'<input type="hidden" name="email" value="'.$order->thirdparty->email.
'">'.
"\n";
1007 print
'<input type="hidden" name="vatnumber" value="'.dol_escape_htmltag($order->thirdparty->tva_intra).
'">'.
"\n";
1008 $labeldesc = $langs->trans(
"Order").
' '.$order->ref;
1009 if (
GETPOST(
'desc',
'alpha')) $labeldesc =
GETPOST(
'desc',
'alpha');
1010 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1015 if ($source ==
'invoice')
1018 $langs->load(
"bills");
1020 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1023 $result = $invoice->fetch(
'', $ref);
1026 $mesg = $invoice->error;
1029 $result = $invoice->fetch_thirdparty($invoice->socid);
1033 if ($action !=
'dopayment')
1035 $amount =
price2num($invoice->total_ttc - ($invoice->getSommePaiement() + $invoice->getSumCreditNotesUsed() + $invoice->getSumDepositsUsed()));
1036 if (
GETPOST(
"amount",
'int')) $amount =
GETPOST(
"amount",
'alpha');
1040 if (
GETPOST(
'fulltag',
'alpha')) {
1041 $fulltag =
GETPOST(
'fulltag',
'alpha');
1043 $fulltag =
'INV='.$invoice->id.
'.CUS='.$invoice->thirdparty->id;
1044 if (!empty($TAG)) { $tag = $TAG; $fulltag .=
'.TAG='.$TAG; }
1049 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Creditor");
1050 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b>'.$creditor.
'</b>';
1051 print
'<input type="hidden" name="creditor" value="'.dol_escape_htmltag($creditor).
'">';
1052 print
'</td></tr>'.
"\n";
1055 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"ThirdParty");
1056 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b>'.$invoice->thirdparty->name.
'</b>';
1057 print
'</td></tr>'.
"\n";
1060 $text =
'<b>'.$langs->trans(
"PaymentInvoiceRef", $invoice->ref).
'</b>';
1061 if (
GETPOST(
'desc',
'alpha')) $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1062 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Designation");
1063 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$text;
1064 print
'<input type="hidden" name="s" value="'.dol_escape_htmltag($source).
'">';
1065 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).
'">';
1066 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag($invoice->id).
'">';
1067 $directdownloadlink = $invoice->getLastMainDocLink(
'facture');
1068 if ($directdownloadlink)
1070 print
'<br><a href="'.$directdownloadlink.
'">';
1071 print
img_mime($invoice->last_main_doc,
'');
1072 print $langs->trans(
"DownloadDocument").
'</a>';
1074 print
'</td></tr>'.
"\n";
1077 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"PaymentAmount");
1078 if (empty($amount) && empty($object->paye)) print
' ('.$langs->trans(
"ToComplete").
')';
1079 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">';
1080 if ($object->type == $object::TYPE_CREDIT_NOTE) {
1081 print
'<b>'.$langs->trans(
"CreditNote").
'</b>';
1082 } elseif (empty($object->paye)) {
1083 if (empty($amount) || !is_numeric($amount))
1085 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1086 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1088 print
'<b>'.price($amount).
'</b>';
1089 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1090 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1092 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1093 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1095 print
'<b>'.price($object->total_ttc, 1, $langs).
'</b>';
1096 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1097 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1099 print
'</td></tr>'.
"\n";
1102 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"PaymentCode");
1103 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1104 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1105 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1106 print
'</td></tr>'.
"\n";
1109 $shipToName = $invoice->thirdparty->name;
1110 $shipToStreet = $invoice->thirdparty->address;
1111 $shipToCity = $invoice->thirdparty->town;
1112 $shipToState = $invoice->thirdparty->state_code;
1113 $shipToCountryCode = $invoice->thirdparty->country_code;
1114 $shipToZip = $invoice->thirdparty->zip;
1115 $shipToStreet2 =
'';
1116 $phoneNum = $invoice->thirdparty->phone;
1117 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip)
1119 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1120 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1121 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1122 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1123 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1124 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1125 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1126 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1128 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1130 if (is_object($invoice->thirdparty)) print
'<input type="hidden" name="thirdparty_id" value="'.$invoice->thirdparty->id.
'">'.
"\n";
1131 print
'<input type="hidden" name="email" value="'.$invoice->thirdparty->email.
'">'.
"\n";
1132 print
'<input type="hidden" name="vatnumber" value="'.$invoice->thirdparty->tva_intra.
'">'.
"\n";
1133 $labeldesc = $langs->trans(
"Invoice").
' '.$invoice->ref;
1134 if (
GETPOST(
'desc',
'alpha')) $labeldesc =
GETPOST(
'desc',
'alpha');
1135 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1139 if ($source ==
'contractline')
1142 $langs->load(
"contracts");
1144 require_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1149 $result = $contractline->fetch(
'', $ref);
1152 $mesg = $contractline->error;
1155 if ($contractline->fk_contrat > 0)
1157 $result = $contract->fetch($contractline->fk_contrat);
1160 $result = $contract->fetch_thirdparty($contract->socid);
1162 $mesg = $contract->error;
1166 $mesg =
'ErrorRecordNotFound';
1170 $object = $contractline;
1172 if ($action !=
'dopayment')
1174 $amount = $contractline->total_ttc;
1176 if ($contractline->fk_product && !empty($conf->global->PAYMENT_USE_NEW_PRICE_FOR_CONTRACTLINES))
1179 $result = $product->fetch($contractline->fk_product);
1182 if (!empty($conf->global->PRODUIT_MULTIPRICES))
1184 $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
1185 $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
1186 $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
1188 $pu_ht = $product->price;
1189 $pu_ttc = $product->price_ttc;
1190 $price_base_type = $product->price_base_type;
1201 if (
GETPOST(
"amount",
'alpha')) $amount =
GETPOST(
"amount",
'alpha');
1205 if (
GETPOST(
'fulltag',
'alpha')) {
1206 $fulltag =
GETPOST(
'fulltag',
'alpha');
1208 $fulltag =
'COL='.$contractline->id.
'.CON='.$contract->id.
'.CUS='.$contract->thirdparty->id.
'.DAT='.
dol_print_date(
dol_now(),
'%Y%m%d%H%M%S');
1209 if (!empty($TAG)) { $tag = $TAG; $fulltag .=
'.TAG='.$TAG; }
1217 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Creditor");
1218 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b>'.$creditor.
'</b>';
1219 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1220 print
'</td></tr>'.
"\n";
1223 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"ThirdParty");
1224 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b>'.$contract->thirdparty->name.
'</b>';
1225 print
'</td></tr>'.
"\n";
1228 $text =
'<b>'.$langs->trans(
"PaymentRenewContractId", $contract->ref, $contractline->ref).
'</b>';
1229 if ($contractline->fk_product)
1231 $contractline->fetch_product();
1232 $text .=
'<br>'.$contractline->product->ref.($contractline->product->label ?
' - '.$contractline->product->label :
'');
1234 if ($contractline->description) $text .=
'<br>'.dol_htmlentitiesbr($contractline->description);
1239 if ($contractline->date_fin_validite)
1241 $text .=
'<br>'.$langs->trans(
"ExpiredSince").
': '.
dol_print_date($contractline->date_fin_validite);
1243 if (
GETPOST(
'desc',
'alpha')) $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1244 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Designation");
1245 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$text;
1246 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
1247 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($contractline->ref).
'">';
1248 print
'<input type="hidden" name="dol_id" value="'.dol_escape_htmltag($contractline->id).
'">';
1249 $directdownloadlink = $contract->getLastMainDocLink(
'contract');
1250 if ($directdownloadlink)
1252 print
'<br><a href="'.$directdownloadlink.
'">';
1253 print
img_mime($contract->last_main_doc,
'');
1254 print $langs->trans(
"DownloadDocument").
'</a>';
1256 print
'</td></tr>'.
"\n";
1259 $label = $langs->trans(
"Quantity");
1262 if ($contractline->fk_product)
1264 if ($contractline->product->isService() && $contractline->product->duration_value > 0)
1266 $label = $langs->trans(
"Duration");
1269 if ($contractline->product->duration_value > 1)
1271 $dur = array(
"h"=>$langs->trans(
"Hours"),
"d"=>$langs->trans(
"DurationDays"),
"w"=>$langs->trans(
"DurationWeeks"),
"m"=>$langs->trans(
"DurationMonths"),
"y"=>$langs->trans(
"DurationYears"));
1273 $dur = array(
"h"=>$langs->trans(
"Hour"),
"d"=>$langs->trans(
"DurationDay"),
"w"=>$langs->trans(
"DurationWeek"),
"m"=>$langs->trans(
"DurationMonth"),
"y"=>$langs->trans(
"DurationYear"));
1275 $duration = $contractline->product->duration_value.
' '.$dur[$contractline->product->duration_unit];
1278 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$label.
'</td>';
1279 print
'<td class="CTableRow'.($var ?
'1' :
'2').
'"><b>'.($duration ? $duration : $qty).
'</b>';
1280 print
'<input type="hidden" name="newqty" value="'.dol_escape_htmltag($qty).
'">';
1281 print
'</b></td></tr>'.
"\n";
1284 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Amount");
1285 if (empty($amount)) print
' ('.$langs->trans(
"ToComplete").
')';
1286 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">';
1287 if (empty($amount) || !is_numeric($amount))
1289 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1290 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.price2num(
GETPOST(
"newamount",
"alpha"),
'MT').
'">';
1292 print
'<b>'.price($amount).
'</b>';
1293 print
'<input type="hidden" name="amount" value="'.$amount.
'">';
1294 print
'<input type="hidden" name="newamount" value="'.$amount.
'">';
1297 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1298 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1299 print
'</td></tr>'.
"\n";
1302 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"PaymentCode");
1303 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1304 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1305 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1306 print
'</td></tr>'.
"\n";
1309 $shipToName = $contract->thirdparty->name;
1310 $shipToStreet = $contract->thirdparty->address;
1311 $shipToCity = $contract->thirdparty->town;
1312 $shipToState = $contract->thirdparty->state_code;
1313 $shipToCountryCode = $contract->thirdparty->country_code;
1314 $shipToZip = $contract->thirdparty->zip;
1315 $shipToStreet2 =
'';
1316 $phoneNum = $contract->thirdparty->phone;
1317 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip)
1319 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1320 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1321 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1322 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1323 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1324 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1325 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1326 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1328 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1330 if (is_object($contract->thirdparty)) print
'<input type="hidden" name="thirdparty_id" value="'.$contract->thirdparty->id.
'">'.
"\n";
1331 print
'<input type="hidden" name="email" value="'.$contract->thirdparty->email.
'">'.
"\n";
1332 print
'<input type="hidden" name="vatnumber" value="'.$contract->thirdparty->tva_intra.
'">'.
"\n";
1333 $labeldesc = $langs->trans(
"Contract").
' '.$contract->ref;
1334 if (
GETPOST(
'desc',
'alpha')) $labeldesc =
GETPOST(
'desc',
'alpha');
1335 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1339 if ($source ==
'membersubscription')
1342 $langs->load(
"members");
1344 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1345 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/subscription.class.php';
1348 $result = $member->fetch(
'', $ref);
1351 $mesg = $member->error;
1354 $member->fetch_thirdparty();
1359 if ($action !=
'dopayment')
1361 $amount = $subscription->total_ttc;
1362 if (
GETPOST(
"amount",
'alpha')) $amount =
GETPOST(
"amount",
'alpha');
1366 if (
GETPOST(
'fulltag',
'alpha')) {
1367 $fulltag =
GETPOST(
'fulltag',
'alpha');
1370 if (!empty($TAG)) { $tag = $TAG; $fulltag .=
'.TAG='.$TAG; }
1375 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Creditor");
1376 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b>'.$creditor.
'</b>';
1377 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1378 print
'</td></tr>'.
"\n";
1381 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Member");
1382 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b>';
1383 if ($member->morphy ==
'mor' && !empty($member->societe)) print $member->societe;
1384 else print $member->getFullName($langs);
1386 print
'</td></tr>'.
"\n";
1389 $text =
'<b>'.$langs->trans(
"PaymentSubscription").
'</b>';
1390 if (
GETPOST(
'desc',
'alpha')) $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1391 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Designation");
1392 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$text;
1393 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
1394 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($member->ref).
'">';
1395 print
'</td></tr>'.
"\n";
1397 if ($object->datefin > 0) {
1398 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"DateEndSubscription");
1399 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">'.
dol_print_date($member->datefin,
'day');
1400 print
'</td></tr>'.
"\n";
1403 if ($member->last_subscription_date || $member->last_subscription_amount)
1407 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"LastSubscriptionDate");
1408 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">'.
dol_print_date($member->last_subscription_date,
'day');
1409 print
'</td></tr>'.
"\n";
1413 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"LastSubscriptionAmount");
1414 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">'.
price($member->last_subscription_amount);
1415 print
'</td></tr>'.
"\n";
1417 if (empty($amount) && !
GETPOST(
'newamount',
'alpha')) $_GET[
'newamount'] = $member->last_subscription_amount;
1421 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Amount");
1424 if (empty($conf->global->MEMBER_NEWFORM_AMOUNT)) print
' ('.$langs->trans(
"ToComplete");
1425 if (!empty($conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO)) print
' - <a href="'.$conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO.
'" rel="external" target="_blank">'.$langs->trans(
"SeeHere").
'</a>';
1426 if (empty($conf->global->MEMBER_NEWFORM_AMOUNT)) print
')';
1428 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">';
1430 if (empty($amount) || !is_numeric($amount))
1434 if (empty($valtoshow))
1436 if (!empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT)) {
1437 if (!empty($conf->global->MEMBER_NEWFORM_AMOUNT)) {
1438 $valtoshow = $conf->global->MEMBER_NEWFORM_AMOUNT;
1441 if (!empty($conf->global->MEMBER_NEWFORM_AMOUNT)) {
1442 $amount = $conf->global->MEMBER_NEWFORM_AMOUNT;
1447 if (empty($amount) || !is_numeric($amount))
1450 if (!empty($conf->global->MEMBER_MIN_AMOUNT) && $valtoshow) $valtoshow = max($conf->global->MEMBER_MIN_AMOUNT, $valtoshow);
1451 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1452 if (empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT)) {
1453 print
'<input class="flat maxwidth75" type="text" name="newamountbis" value="'.$valtoshow.
'" disabled>';
1454 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
1456 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.$valtoshow.
'">';
1459 $valtoshow = $amount;
1460 if (!empty($conf->global->MEMBER_MIN_AMOUNT) && $valtoshow) {
1461 $valtoshow = max($conf->global->MEMBER_MIN_AMOUNT, $valtoshow);
1462 $amount = $valtoshow;
1464 print
'<b>'.price($valtoshow).
'</b>';
1465 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
1466 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
1469 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1470 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1471 print
'</td></tr>'.
"\n";
1474 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"PaymentCode");
1475 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1476 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1477 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1478 print
'</td></tr>'.
"\n";
1481 $shipToName = $member->getFullName($langs);
1482 $shipToStreet = $member->address;
1483 $shipToCity = $member->town;
1484 $shipToState = $member->state_code;
1485 $shipToCountryCode = $member->country_code;
1486 $shipToZip = $member->zip;
1487 $shipToStreet2 =
'';
1488 $phoneNum = $member->phone;
1489 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip)
1491 print
'<!-- Shipping address information -->';
1492 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1493 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1494 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1495 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1496 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1497 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1498 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1499 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1501 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1503 if (is_object($member->thirdparty)) print
'<input type="hidden" name="thirdparty_id" value="'.$member->thirdparty->id.
'">'.
"\n";
1504 print
'<input type="hidden" name="email" value="'.$member->email.
'">'.
"\n";
1505 $labeldesc = $langs->trans(
"PaymentSubscription");
1506 if (
GETPOST(
'desc',
'alpha')) $labeldesc =
GETPOST(
'desc',
'alpha');
1507 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1511 if ($source ==
'donation')
1514 $langs->load(
"don");
1516 require_once DOL_DOCUMENT_ROOT.
'/don/class/don.class.php';
1518 $don =
new Don($db);
1519 $result = $don->fetch($ref);
1522 $mesg = $don->error;
1525 $don->fetch_thirdparty();
1529 if ($action !=
'dopayment')
1531 $amount = $subscription->total_ttc;
1532 if (
GETPOST(
"amount",
'alpha')) $amount =
GETPOST(
"amount",
'alpha');
1536 if (
GETPOST(
'fulltag',
'alpha')) {
1537 $fulltag =
GETPOST(
'fulltag',
'alpha');
1540 if (!empty($TAG)) { $tag = $TAG; $fulltag .=
'.TAG='.$TAG; }
1545 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Creditor");
1546 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b>'.$creditor.
'</b>';
1547 print
'<input type="hidden" name="creditor" value="'.$creditor.
'">';
1548 print
'</td></tr>'.
"\n";
1551 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"ThirdParty");
1552 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b>';
1553 if ($don->morphy ==
'mor' && !empty($don->societe)) print $don->societe;
1554 else print $don->getFullName($langs);
1556 print
'</td></tr>'.
"\n";
1559 $text =
'<b>'.$langs->trans(
"PaymentDonation").
'</b>';
1560 if (
GETPOST(
'desc',
'alpha')) $text =
'<b>'.$langs->trans(
GETPOST(
'desc',
'alpha')).
'</b>';
1561 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Designation");
1562 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$text;
1563 print
'<input type="hidden" name="source" value="'.dol_escape_htmltag($source).
'">';
1564 print
'<input type="hidden" name="ref" value="'.dol_escape_htmltag($don->ref).
'">';
1565 print
'</td></tr>'.
"\n";
1568 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"Amount");
1571 if (empty($conf->global->MEMBER_NEWFORM_AMOUNT)) print
' ('.$langs->trans(
"ToComplete");
1572 if (!empty($conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO)) print
' - <a href="'.$conf->global->MEMBER_EXT_URL_SUBSCRIPTION_INFO.
'" rel="external" target="_blank">'.$langs->trans(
"SeeHere").
'</a>';
1573 if (empty($conf->global->MEMBER_NEWFORM_AMOUNT)) print
')';
1575 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'">';
1577 if (empty($amount) || !is_numeric($amount))
1581 if (empty($valtoshow))
1583 if (!empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT)) {
1584 if (!empty($conf->global->MEMBER_NEWFORM_AMOUNT)) {
1585 $valtoshow = $conf->global->MEMBER_NEWFORM_AMOUNT;
1588 if (!empty($conf->global->MEMBER_NEWFORM_AMOUNT)) {
1589 $amount = $conf->global->MEMBER_NEWFORM_AMOUNT;
1594 if (empty($amount) || !is_numeric($amount))
1597 if (!empty($conf->global->MEMBER_MIN_AMOUNT) && $valtoshow) $valtoshow = max($conf->global->MEMBER_MIN_AMOUNT, $valtoshow);
1598 print
'<input type="hidden" name="amount" value="'.price2num(
GETPOST(
"amount",
'alpha'),
'MT').
'">';
1599 print
'<input class="flat maxwidth75" type="text" name="newamount" value="'.$valtoshow.
'">';
1601 $valtoshow = $amount;
1602 if (!empty($conf->global->MEMBER_MIN_AMOUNT) && $valtoshow) {
1603 $valtoshow = max($conf->global->MEMBER_MIN_AMOUNT, $valtoshow);
1604 $amount = $valtoshow;
1606 print
'<b>'.price($valtoshow).
'</b>';
1607 print
'<input type="hidden" name="amount" value="'.$valtoshow.
'">';
1608 print
'<input type="hidden" name="newamount" value="'.$valtoshow.
'">';
1611 print
' <b>'.$langs->trans(
"Currency".$currency).
'</b>';
1612 print
'<input type="hidden" name="currency" value="'.$currency.
'">';
1613 print
'</td></tr>'.
"\n";
1616 print
'<tr class="CTableRow'.($var ?
'1' :
'2').
'"><td class="CTableRow'.($var ?
'1' :
'2').
'">'.$langs->trans(
"PaymentCode");
1617 print
'</td><td class="CTableRow'.($var ?
'1' :
'2').
'"><b style="word-break: break-all;">'.$fulltag.
'</b>';
1618 print
'<input type="hidden" name="tag" value="'.$tag.
'">';
1619 print
'<input type="hidden" name="fulltag" value="'.$fulltag.
'">';
1620 print
'</td></tr>'.
"\n";
1623 $shipToName = $don->getFullName($langs);
1624 $shipToStreet = $don->address;
1625 $shipToCity = $don->town;
1626 $shipToState = $don->state_code;
1627 $shipToCountryCode = $don->country_code;
1628 $shipToZip = $don->zip;
1629 $shipToStreet2 =
'';
1630 $phoneNum = $don->phone;
1631 if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip)
1633 print
'<!-- Shipping address information -->';
1634 print
'<input type="hidden" name="shipToName" value="'.$shipToName.
'">'.
"\n";
1635 print
'<input type="hidden" name="shipToStreet" value="'.$shipToStreet.
'">'.
"\n";
1636 print
'<input type="hidden" name="shipToCity" value="'.$shipToCity.
'">'.
"\n";
1637 print
'<input type="hidden" name="shipToState" value="'.$shipToState.
'">'.
"\n";
1638 print
'<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.
'">'.
"\n";
1639 print
'<input type="hidden" name="shipToZip" value="'.$shipToZip.
'">'.
"\n";
1640 print
'<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.
'">'.
"\n";
1641 print
'<input type="hidden" name="phoneNum" value="'.$phoneNum.
'">'.
"\n";
1643 print
'<!-- Shipping address not complete, so we don t use it -->'.
"\n";
1645 if (is_object($don->thirdparty)) print
'<input type="hidden" name="thirdparty_id" value="'.$don->thirdparty->id.
'">'.
"\n";
1646 print
'<input type="hidden" name="email" value="'.$don->email.
'">'.
"\n";
1647 $labeldesc = $langs->trans(
"PaymentSubscription");
1648 if (
GETPOST(
'desc',
'alpha')) $labeldesc =
GETPOST(
'desc',
'alpha');
1649 print
'<input type="hidden" name="desc" value="'.dol_escape_htmltag($labeldesc).
'">'.
"\n";
1653 if (!$found && !$mesg) $mesg = $langs->trans(
"ErrorBadParameters");
1655 if ($mesg) print
'<tr><td align="center" colspan="2"><br><div class="warning">'.dol_escape_htmltag($mesg).
'</div></td></tr>'.
"\n";
1657 print
'</table>'.
"\n";
1662 if ($action !=
'dopayment')
1664 if ($found && !$error)
1668 'source' => $source,
1671 $reshook = $hookmanager->executeHooks(
'doCheckStatus', $parameters, $object, $action);
1672 if ($source ==
'order' && $object->billed)
1674 print
'<br><br><span class="amountpaymentcomplete size15x">'.$langs->trans(
"OrderBilled").
'</span>';
1675 } elseif ($source ==
'invoice' && $object->paye)
1677 print
'<br><br><span class="amountpaymentcomplete size15x">'.$langs->trans(
"InvoicePaid").
'</span>';
1678 } elseif ($source ==
'donation' && $object->paid)
1680 print
'<br><br><span class="amountpaymentcomplete size15x">'.$langs->trans(
"DonationPaid").
'</span>';
1683 if ($source ==
'membersubscription' && $object->datefin >
dol_now())
1685 $langs->load(
"members");
1686 print
'<br><span class="amountpaymentcomplete size15x">'.$langs->trans(
"MembershipPaid",
dol_print_date($object->datefin,
'day')).
'</span><br>';
1687 print
'<div class="opacitymedium margintoponly">'.$langs->trans(
"PaymentWillBeRecordedForNextPeriod").
'</div>';
1694 'paymentmethod' => $paymentmethod
1696 $reshook = $hookmanager->executeHooks(
'doAddButton', $parameters, $object, $action);
1697 if ((empty($paymentmethod) || $paymentmethod ==
'paybox') && !empty($conf->paybox->enabled))
1699 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").
'">';
1701 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span>';
1704 $( document ).ready(function() {
1705 $("#div_dopayment_paybox").click(function(){
1706 $("#dopayment_paybox").click();
1708 $("#dopayment_paybox").click(function(e){
1709 $("#div_dopayment_paybox").css( \'cursor\', \'wait\' );
1710 e.stopPropagation();
1717 if ((empty($paymentmethod) || $paymentmethod ==
'stripe') && !empty($conf->stripe->enabled))
1719 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").
'">';
1720 print
'<input type="hidden" name="noidempotency" value="'.GETPOST(
'noidempotency',
'int').
'">';
1722 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span>';
1725 $( document ).ready(function() {
1726 $("#div_dopayment_stripe").click(function(){
1727 $("#dopayment_stripe").click();
1729 $("#dopayment_stripe").click(function(e){
1730 $("#div_dopayment_stripe").css( \'cursor\', \'wait\' );
1731 e.stopPropagation();
1739 if ((empty($paymentmethod) || $paymentmethod ==
'paypal') && !empty($conf->paypal->enabled))
1741 if (empty($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY)) $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY =
'integral';
1743 print
'<div class="button buttonpayment" id="div_dopayment_paypal">';
1744 if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY !=
'integral') {
1745 print
'<div style="line-height: 1em"> </div>';
1747 print
'<span class="fa fa-paypal"></span> <input class="" type="submit" id="dopayment_paypal" name="dopayment_paypal" value="'.$langs->trans(
"PaypalDoPayment").
'">';
1748 if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY ==
'integral')
1751 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"CreditOrDebitCard").
'</span><span class="buttonpaymentsmall"> - </span>';
1752 print
'<span class="buttonpaymentsmall">'.$langs->trans(
"PayPalBalance").
'</span>';
1754 if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY ==
'paypalonly')
1761 $( document ).ready(function() {
1762 $("#div_dopayment_paypal").click(function(){
1763 $("#dopayment_paypal").click();
1765 $("#dopayment_paypal").click(function(e){
1766 $("#div_dopayment_paypal").css( \'cursor\', \'wait\' );
1767 e.stopPropagation();
1782 print
'</td></tr>'.
"\n";
1784 print
'</table>'.
"\n";
1786 print
'</form>'.
"\n";
1787 print
'</div>'.
"\n";
1793 if (preg_match(
'/^dopayment/', $action))
1796 if (
GETPOST(
'dopayment_stripe',
'alpha'))
1805 background-color: white;
1808 border: 1px solid transparent;
1809 box-shadow: 0 1px 3px 0 #e6ebf1;
1810 -webkit-transition: box-shadow 150ms ease;
1811 transition: box-shadow 150ms ease;
1814 .StripeElement--focus {
1815 box-shadow: 0 1px 3px 0 #cfd7df;
1818 .StripeElement--invalid {
1819 border-color: #fa755a;
1822 .StripeElement--webkit-autofill {
1823 background-color: #fefde5 !important;
1829 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";
1830 print
'<form action="'.$_SERVER[
'REQUEST_URI'].
'" method="POST" id="payment-form">'.
"\n";
1832 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
1833 print
'<input type="hidden" name="dopayment_stripe" value="1">'.
"\n";
1834 print
'<input type="hidden" name="action" value="charge">'.
"\n";
1835 print
'<input type="hidden" name="tag" value="'.$TAG.
'">'.
"\n";
1836 print
'<input type="hidden" name="s" value="'.$source.
'">'.
"\n";
1837 print
'<input type="hidden" name="ref" value="'.$REF.
'">'.
"\n";
1838 print
'<input type="hidden" name="fulltag" value="'.$FULLTAG.
'">'.
"\n";
1839 print
'<input type="hidden" name="suffix" value="'.$suffix.
'">'.
"\n";
1840 print
'<input type="hidden" name="securekey" value="'.$SECUREKEY.
'">'.
"\n";
1841 print
'<input type="hidden" name="e" value="'.$entity.
'" />';
1842 print
'<input type="hidden" name="amount" value="'.$amount.
'">'.
"\n";
1843 print
'<input type="hidden" name="currency" value="'.$currency.
'">'.
"\n";
1844 print
'<input type="hidden" name="forcesandbox" value="'.GETPOST(
'forcesandbox',
'int').
'" />';
1845 print
'<input type="hidden" name="email" value="'.GETPOST(
'email',
'alpha').
'" />';
1846 print
'<input type="hidden" name="thirdparty_id" value="'.GETPOST(
'thirdparty_id',
'int').
'" />';
1848 if (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || !empty($conf->global->STRIPE_USE_NEW_CHECKOUT))
1850 require_once DOL_DOCUMENT_ROOT.
'/stripe/class/stripe.class.php';
1852 $service =
'StripeLive';
1854 if (empty($conf->global->STRIPE_LIVE) ||
GETPOST(
'forcesandbox',
'alpha'))
1856 $service =
'StripeTest';
1860 $stripe =
new Stripe($db);
1861 $stripeacc = $stripe->getStripeAccount($service);
1863 if (is_object($object) && is_object($object->thirdparty)) $stripecu = $stripe->customerStripe($object->thirdparty, $stripeacc, $servicestatus, 1);
1865 if (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION))
1867 $noidempotency_key = (
GETPOSTISSET(
'noidempotency') ?
GETPOST(
'noidempotency',
'int') : 0);
1868 $paymentintent = $stripe->getPaymentIntent($amount, $currency, $tag,
'Stripe payment: '.$fulltag.(is_object($object) ?
' ref='.$object->ref :
''), $object, $stripecu, $stripeacc, $servicestatus, 0,
'automatic',
false, null, 0, $noidempotency_key);
1878 <table id="dolpaymenttable" summary="Payment form" class="center">
1879 <tbody><tr><td class="textpublicpayment">';
1881 if (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION))
1883 print
'<div id="payment-request-button"><!-- A Stripe Element will be inserted here. --></div>';
1886 print
'<div class="form-row left">';
1887 print
'<label for="card-element">'.$langs->trans(
"CreditOrDebitCard").
'</label>';
1889 if (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION))
1891 print
'<br><input id="cardholder-name" class="marginbottomonly" name="cardholder-name" value="" type="text" placeholder="'.$langs->trans(
"CardOwner").
'" autocomplete="off" autofocus required>';
1894 print
'<div id="card-element">
1895 <!-- a Stripe Element will be inserted here. -->
1898 print
'<!-- Used to display form errors -->
1899 <div id="card-errors" role="alert"></div>
1903 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>';
1904 print
'<img id="hourglasstopay" class="hidden" src="'.DOL_URL_ROOT.
'/theme/'.$conf->theme.
'/img/working.gif">';
1906 print
'</td></tr></tbody>';
1910 if (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION))
1912 if (empty($paymentintent))
1914 print
'<center>'.$langs->trans(
"Error").
'</center>';
1916 print
'<input type="hidden" name="paymentintent_id" value="'.$paymentintent->id.
'">';
1921 print
'</form>'.
"\n";
1925 if (empty($stripearrayofkeys[
'publishable_key']))
1927 $langs->load(
"errors");
1928 print
info_admin($langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv(
"Stripe")), 0, 0,
'error');
1930 print
'<!-- JS Code for Stripe components -->';
1931 print
'<script src="https://js.stripe.com/v3/"></script>'.
"\n";
1932 print
'<!-- urllogofull = '.$urllogofull.
' -->'.
"\n";
1935 print
'<script type="text/javascript" language="javascript">'.
"\n";
1937 if (!empty($conf->global->STRIPE_USE_NEW_CHECKOUT))
1939 $amountstripe = $amount;
1943 $arrayzerounitcurrency = array(
'BIF',
'CLP',
'DJF',
'GNF',
'JPY',
'KMF',
'KRW',
'MGA',
'PYG',
'RWF',
'VND',
'VUV',
'XAF',
'XOF',
'XPF');
1944 if (!in_array($currency, $arrayzerounitcurrency)) $amountstripe = $amountstripe * 100;
1947 $metadata = array(
'dol_version'=>DOL_VERSION,
'dol_entity'=>$conf->entity,
'ipaddress'=>$ipaddress);
1948 if (is_object($object))
1950 $metadata[
'dol_type'] = $object->element;
1951 $metadata[
'dol_id'] = $object->id;
1953 $ref = $object->ref;
1957 $arrayforpaymentintent = array(
1958 'description'=>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
1959 "metadata" => $metadata
1961 if ($TAG) $arrayforpaymentintent[
"statement_descriptor"] =
dol_trunc($TAG, 10,
'right',
'UTF-8', 1);
1963 $arrayforcheckout = array(
1964 'payment_method_types' => array(
'card'),
1965 'line_items' => array(array(
1966 'name' => $langs->transnoentitiesnoconv(
"Payment").
' '.$TAG,
1967 'description' =>
'Stripe payment: '.$FULLTAG.($ref ?
' ref='.$ref :
''),
1968 'amount' => $amountstripe,
1969 'currency' => $currency,
1973 'client_reference_id' => $FULLTAG,
1974 'success_url' => $urlok,
1975 'cancel_url' => $urlko,
1976 'payment_intent_data' => $arrayforpaymentintent
1978 if ($stripecu) $arrayforcheckout[
'customer'] = $stripecu;
1980 $sessionstripe = \
Stripe\Checkout\Session::create($arrayforcheckout);
1985 $_SESSION["currencyCodeType"] = $currency;
1986 $_SESSION["paymentType"] = '';
1987 $_SESSION["FinalPaymentAmt"] = $amount;
1988 $_SESSION['ipaddress'] = ($remoteip ? $remoteip : 'unknown');
1989 $_SESSION['payerID'] = is_object($stripecu) ? $stripecu->
id : '';
1990 $_SESSION['TRANSACTIONID'] = $sessionstripe->
id;
1993 print $e->getMessage();
1999 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php ?>');
2002 var elements = stripe.elements();
2010 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2011 fontSmoothing:
'antialiased',
2019 iconColor:
'#fa755a'
2023 var cardElement = elements.create(
'card', {style: style});
2026 stripe.redirectToCheckout({
2030 sessionId:
'<?php print $sessionstripe->id; ?>'
2031 }).then(
function (result) {
2039 } elseif (!empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION))
2045 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php ?>');
2048 var elements = stripe.elements();
2056 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2057 fontSmoothing:
'antialiased',
2065 iconColor:
'#fa755a'
2069 var cardElement = elements.create(
'card', {style: style});
2072 cardElement.mount(
'#card-element');
2075 cardElement.addEventListener(
'change',
function(event) {
2076 var displayError = document.getElementById(
'card-errors');
2078 console.log(
"Show event error (like 'Incorrect card number', ...)");
2079 displayError.textContent =
event.error.message;
2081 console.log(
"Reset error message");
2082 displayError.textContent =
'';
2087 var cardholderName = document.getElementById(
'cardholder-name');
2088 var cardButton = document.getElementById(
'buttontopay');
2089 var clientSecret = cardButton.dataset.secret;
2091 cardButton.addEventListener(
'click',
function(event) {
2092 console.log(
"We click on buttontopay");
2093 event.preventDefault();
2095 if (cardholderName.value ==
'')
2097 console.log(
"Field Card holder is empty");
2098 var displayError = document.getElementById(
'card-errors');
2099 displayError.textContent =
'<?php print dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CardOwner"))); ?>';
2104 jQuery(
'#hourglasstopay').show();
2105 jQuery(
'#buttontopay').hide();
2107 stripe.handleCardPayment(
2108 clientSecret, cardElement, {
2109 payment_method_data: {
2111 name: cardholderName.value
2112 <?php
if (
GETPOST(
'email',
'alpha') || (is_object($object) && is_object($object->thirdparty) && !empty($object->thirdparty->email))) { ?>, email:
'<?php echo dol_escape_js(GETPOST('email
', 'alpha
') ? GETPOST('email
', 'alpha
') : $object->thirdparty->email); ?>'<?php } ?>
2113 <?php
if (is_object($object) && is_object($object->thirdparty) && !empty($object->thirdparty->phone)) { ?>, phone:
'<?php echo dol_escape_js($object->thirdparty->phone); ?>'<?php } ?>
2114 <?php
if (is_object($object) && is_object($object->thirdparty)) { ?>, address: {
2115 city:
'<?php echo dol_escape_js($object->thirdparty->town); ?>',
2116 <?php
if ($object->thirdparty->country_code) { ?>country:
'<?php echo dol_escape_js($object->thirdparty->country_code); ?>',<?php } ?>
2117 line1:
'<?php echo dol_escape_js(preg_replace('/\s\s+/
', ' ', $object->thirdparty->address)); ?>',
2118 postal_code:
'<?php echo dol_escape_js($object->thirdparty->zip); ?>'
2123 save_payment_method: <?php
if ($stripecu) { print
'true'; }
else { print
'false'; } ?>
2125 ).then(
function(result) {
2126 console.log(result);
2128 console.log(
"Error on result of handleCardPayment");
2129 jQuery(
'#buttontopay').show();
2130 jQuery(
'#hourglasstopay').hide();
2132 var errorElement = document.getElementById(
'card-errors');
2133 errorElement.textContent = result.error.message;
2136 console.log(
"No error on result of handleCardPayment, so we submit the form");
2138 jQuery(
'#buttontopay').hide();
2139 jQuery(
'#hourglasstopay').show();
2141 jQuery(
'#payment-form').submit();
2154 var stripe =
Stripe(
'<?php echo $stripearrayofkeys['publishable_key
']; // Defined into config.php ?>');
2157 var elements = stripe.elements();
2165 fontFamily:
'"Helvetica Neue", Helvetica, sans-serif',
2166 fontSmoothing:
'antialiased',
2174 iconColor:
'#fa755a'
2179 var card = elements.create(
'card', {style: style});
2182 card.mount(
'#card-element');
2185 card.addEventListener(
'change',
function(event) {
2186 var displayError = document.getElementById(
'card-errors');
2188 displayError.textContent =
event.error.message;
2190 displayError.textContent =
'';
2195 var form = document.getElementById(
'payment-form');
2197 form.addEventListener(
'submit',
function(event) {
2198 event.preventDefault();
2200 if (empty($conf->global->STRIPE_USE_3DSECURE))
2204 stripe.createToken(card).then(
function(result) {
2207 var errorElement = document.getElementById(
'card-errors');
2208 errorElement.textContent = result.error.message;
2211 stripeTokenHandler(result.token);
2219 stripe.createSource(card).then(
function(result) {
2222 var errorElement = document.getElementById(
'card-errors');
2223 errorElement.textContent = result.error.message;
2226 stripeSourceHandler(result.source);
2236 function stripeTokenHandler(token) {
2238 var form = document.getElementById(
'payment-form');
2240 var hiddenInput = document.createElement(
'input');
2241 hiddenInput.setAttribute(
'type',
'hidden');
2242 hiddenInput.setAttribute(
'name',
'stripeToken');
2243 hiddenInput.setAttribute(
'value', token.id);
2244 form.appendChild(hiddenInput);
2246 var hiddenInput2 = document.createElement(
'input');
2247 hiddenInput2.setAttribute(
'type',
'hidden');
2248 hiddenInput2.setAttribute(
'name',
'token');
2249 hiddenInput2.setAttribute(
'value',
'<?php echo newToken(); ?>');
2250 form.appendChild(hiddenInput2);
2253 jQuery(
'#buttontopay').hide();
2254 jQuery(
'#hourglasstopay').show();
2255 console.log(
"submit token");
2260 function stripeSourceHandler(source) {
2262 var form = document.getElementById(
'payment-form');
2264 var hiddenInput = document.createElement(
'input');
2265 hiddenInput.setAttribute(
'type',
'hidden');
2266 hiddenInput.setAttribute(
'name',
'stripeSource');
2267 hiddenInput.setAttribute(
'value', source.id);
2268 form.appendChild(hiddenInput);
2270 var hiddenInput2 = document.createElement(
'input');
2271 hiddenInput2.setAttribute(
'type',
'hidden');
2272 hiddenInput2.setAttribute(
'name',
'token');
2273 hiddenInput2.setAttribute(
'value',
'<?php echo newToken(); ?>');
2274 form.appendChild(hiddenInput2);
2277 jQuery(
'#buttontopay').hide();
2278 jQuery(
'#hourglasstopay').show();
2279 console.log(
"submit source");
2291 'paymentmethod' => $paymentmethod,
2293 'tag' =>
GETPOST(
"tag",
'alpha'),
2294 'dopayment' =>
GETPOST(
'dopayment',
'alpha')
2296 $reshook = $hookmanager->executeHooks(
'doPayment', $parameters, $object, $action);
2300 htmlPrintOnlinePaymentFooter($mysoc, $langs, 1, $suffix, $object);
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_hash($chain, $type= '0')
Returns a hash of a string.
getUserRemoteIP()
Return the IP of remote user.
Class to manage products or services.
dol_now($mode= 'auto')
Return date for now.
Class to manage contracts.
print_paybox_redirect($PRICE, $CURRENCY, $EMAIL, $urlok, $urlko, $TAG)
Create a redirect form to paybox form.
Class to manage lines of contracts.
$conf db name
Only used if Module[ID]Name translation string is not found.
dol_print_error_email($prefixcode, $errormessage= '', $errormessages=array(), $morecss= 'error', $email= '')
Show a public email and error code to contact if technical error.
img_mime($file, $titlealt= '', $morecss= '')
Show MIME img of a file.
price($amount, $form=0, $outlangs= '', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code= '')
Function to format a value into an amount for visual output Function used into PDF and HTML pages...
setEventMessages($mesg, $mesgs, $style= 'mesgs', $messagekey= '')
Set event messages in dol_events session object.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname.
Class to manage third parties objects (customers, suppliers, prospects...)
dol_strlen($string, $stringencoding= 'UTF-8')
Make a strlen call.
price2num($amount, $rounding= '', $option=0)
Function that return a number with universal decimal format (decimal separator is '...
Class to manage customers orders.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
Class to manage members of a foundation.
dol_string_unaccent($str)
Clean a string from all accent characters to be used as ref, login or by dol_sanitizeFileName.
Class to manage subscriptions of foundation members.
print $_SERVER["PHP_SELF"]
Edit parameters.
dol_htmloutput_mesg($mesgstring= '', $mesgarray=array(), $style= 'ok', $keepembedded=0)
Print formated messages to output (Used to show messages on html output).
print
Draft customers invoices.
Class to manage donations.
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_print_error($db= '', $error= '', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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.
Class to manage invoices.
isValidEmail($address, $acceptsupervisorkey=0)
Return true if email syntax is ok.
if(!defined('CSRFCHECK_WITH_TOKEN')) define('CSRFCHECK_WITH_TOKEN'
Draft customers invoices.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin= '1', $morecss= '', $textfordropdown= '')
Show information for admin users or standard users.
print_paypal_redirect($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $tag)
Send redirect to paypal to browser.