1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225 |
- <?php
- /* Copyright (C) 2017 Alexandre Spangaro <aspangaro@zendsi.com>
- * Copyright (C) 2017 Saasprov <saasprov@gmail.com>
- * Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /**
- * \file htdocs/public/stripe/newpayment.php
- * \ingroup Stripe
- * \brief Page to do payment with Stripe
- */
- define("NOLOGIN",1); // This means this output page does not require to be logged.
- define("NOCSRFCHECK",1); // We accept to go on this page from external web site.
- // For MultiCompany module.
- // Do not use GETPOST here, function is not defined and define must be done before including main.inc.php
- // TODO This should be useless. Because entity must be retreive from object ref and not from url.
- $entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
- if (is_numeric($entity)) define("DOLENTITY", $entity);
- require '../../main.inc.php';
- require_once DOL_DOCUMENT_ROOT.'/stripe/config.php';
- /* included into config.php
- require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
- require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
- require_once DOL_DOCUMENT_ROOT.'/stripe/lib/stripe.lib.php';
- require_once DOL_DOCUMENT_ROOT.'/includes/stripe/init.php';
- */
- // Security check
- if (empty($conf->stripe->enabled)) accessforbidden('',0,0,1);
- $langs->load("main");
- $langs->load("companies");
- $langs->load("other");
- $langs->load("paybox"); // File with generic data
- $langs->load("paypal");
- $langs->load("stripe");
- $action=GETPOST('action','alpha');
- // Input are:
- // type ('invoice','order','contractline'),
- // id (object id),
- // amount (required if id is empty),
- // tag (a free text, required if type is empty)
- // currency (iso code)
- $suffix=GETPOST("suffix",'alpha');
- $amount=price2num(GETPOST("amount"));
- if (! GETPOST("currency",'alpha')) $currency=$conf->currency;
- else $currency=GETPOST("currency",'alpha');
- if (! $action)
- {
- if (! GETPOST("amount") && ! GETPOST("source"))
- {
- dol_print_error('',$langs->trans('ErrorBadParameters')." - amount or source");
- exit;
- }
- if (is_numeric($amount) && ! GETPOST("tag") && ! GETPOST("source"))
- {
- dol_print_error('',$langs->trans('ErrorBadParameters')." - tag or source");
- exit;
- }
- if (GETPOST("source") && ! GETPOST("ref"))
- {
- dol_print_error('',$langs->trans('ErrorBadParameters')." - ref");
- exit;
- }
- }
- // Define $urlwithroot
- //$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
- //$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
- $urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
- $urlok=$urlwithroot.'/public/stripe/paymentok.php?';
- $urlko=$urlwithroot.'/public/stripe/paymentko.php?';
- // Complete urls for post treatment
- $SOURCE=GETPOST("source",'alpha');
- $ref=$REF=GETPOST('ref','alpha');
- $TAG=GETPOST("tag",'alpha');
- $FULLTAG=GETPOST("fulltag",'alpha'); // fulltag is tag with more informations
- $SECUREKEY=GETPOST("securekey"); // Secure key
- if (! preg_match('/'.preg_quote('PM=stripe','/').'/', $FULLTAG)) $FULLTAG.=($FULLTAG?'.':'').'PM=stripe';
- if (! empty($SOURCE))
- {
- $urlok.='source='.urlencode($SOURCE).'&';
- $urlko.='source='.urlencode($SOURCE).'&';
- }
- if (! empty($REF))
- {
- $urlok.='ref='.urlencode($REF).'&';
- $urlko.='ref='.urlencode($REF).'&';
- }
- if (! empty($TAG))
- {
- $urlok.='tag='.urlencode($TAG).'&';
- $urlko.='tag='.urlencode($TAG).'&';
- }
- if (! empty($FULLTAG))
- {
- $urlok.='fulltag='.urlencode($FULLTAG).'&';
- $urlko.='fulltag='.urlencode($FULLTAG).'&';
- }
- if (! empty($SECUREKEY))
- {
- $urlok.='securekey='.urlencode($SECUREKEY).'&';
- $urlko.='securekey='.urlencode($SECUREKEY).'&';
- }
- if (! empty($entity))
- {
- $urlok.='entity='.urlencode($entity).'&';
- $urlko.='entity='.urlencode($entity).'&';
- }
- $urlok=preg_replace('/&$/','',$urlok); // Remove last &
- $urlko=preg_replace('/&$/','',$urlko); // Remove last &
- // Check parameters
- /*
- $STRIPE_API_OK="";
- if ($urlok) $STRIPE_API_OK=$urlok;
- $STRIPE_API_KO="";
- if ($urlko) $STRIPE_API_KO=$urlko;
- if (empty($STRIPE_API_USER))
- {
- dol_print_error('',"Paypal setup param STRIPE_API_USER not defined");
- return -1;
- }
- if (empty($STRIPE_API_PASSWORD))
- {
- dol_print_error('',"Paypal setup param STRIPE_API_PASSWORD not defined");
- return -1;
- }
- if (empty($STRIPE_API_SIGNATURE))
- {
- dol_print_error('',"Paypal setup param STRIPE_API_SIGNATURE not defined");
- return -1;
- }
- */
- // Check security token
- $valid=true;
- if (! empty($conf->global->STRIPE_SECURITY_TOKEN))
- {
- if (! empty($conf->global->STRIPE_SECURITY_TOKEN_UNIQUE))
- {
- if ($SOURCE && $REF) $token = dol_hash($conf->global->STRIPE_SECURITY_TOKEN . $SOURCE . $REF, 2); // Use the source in the hash to avoid duplicates if the references are identical
- else $token = dol_hash($conf->global->STRIPE_SECURITY_TOKEN, 2);
- }
- else
- {
- $token = $conf->global->STRIPE_SECURITY_TOKEN;
- }
- if ($SECUREKEY != $token) $valid=false;
- if (! $valid)
- {
- print '<div class="error">Bad value for key.</div>';
- //print 'SECUREKEY='.$SECUREKEY.' token='.$token.' valid='.$valid;
- exit;
- }
- }
- // Common variables
- $creditor=$mysoc->name;
- $paramcreditor='STRIPE_CREDITOR_'.$suffix;
- if (! empty($conf->global->$paramcreditor)) $creditor=$conf->global->$paramcreditor;
- else if (! empty($conf->global->STRIPE_CREDITOR)) $creditor=$conf->global->STRIPE_CREDITOR;
- /*
- * Actions
- */
- if ($action == 'dopayment') // We click on button Create payment
- {
- if (GETPOST('newamount')) $amount = GETPOST('newamount');
- else
- {
- setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors');
- $action = '';
- }
- }
- if ($action == 'charge')
- {
- // Correct the amount according to unit of currency
- // See https://support.stripe.com/questions/which-zero-decimal-currencies-does-stripe-support
- $arrayzerounitcurrency=array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF');
- if (! in_array($currency, $arrayzerounitcurrency)) $amount=$amount * 100;
-
- dol_syslog("POST keys : ".join(',', array_keys($_POST)), LOG_DEBUG, 0, '_stripe');
- dol_syslog("POST values: ".join(',', $_POST), LOG_DEBUG, 0, '_stripe');
-
- $stripeToken = GETPOST("stripeToken",'alpha');
- $email = GETPOST("stripeEmail",'alpha');
- dol_syslog("stripeToken = ".$stripeToken, LOG_DEBUG, 0, '_stripe');
- dol_syslog("stripeEmail = ".$stripeEmail, LOG_DEBUG, 0, '_stripe');
-
- $error = 0;
-
- try {
- dol_syslog("Create customer", LOG_DEBUG, 0, '_stripe');
- $customer = \Stripe\Customer::create(array(
- 'email' => $email,
- 'description' => ($email?'Customer for '.$email:null),
- 'metadata' => array('ipaddress'=>$_SERVER['REMOTE_ADDR']),
- 'source' => $stripeToken // source can be a token OR array('object'=>'card', 'exp_month'=>xx, 'exp_year'=>xxxx, 'number'=>xxxxxxx, 'cvc'=>xxx, 'name'=>'Cardholder's full name', zip ?)
- ));
- // TODO Add 'business_vat_id' ?
-
- dol_syslog("Create charge", LOG_DEBUG, 0, '_stripe');
- $charge = \Stripe\Charge::create(array(
- 'customer' => $customer->id,
- 'amount' => price2num($amount, 'MU'),
- 'currency' => $currency,
- 'description' => 'Stripe payment: '.$FULLTAG,
- 'metadata' => array("FULLTAG" => $FULLTAG, 'Recipient' => $mysoc->name),
- 'statement_descriptor' => dol_trunc(dol_trunc(dol_string_unaccent($mysoc->name), 6, 'right', 'UTF-8', 1).' '.$FULLTAG, 22, 'right', 'UTF-8', 1) // 22 chars that appears on bank receipt
- ));
- } catch(\Stripe\Error\Card $e) {
- // Since it's a decline, \Stripe\Error\Card will be caught
- $body = $e->getJsonBody();
- $err = $body['error'];
-
- print('Status is:' . $e->getHttpStatus() . "\n");
- print('Type is:' . $err['type'] . "\n");
- print('Code is:' . $err['code'] . "\n");
- // param is '' in this case
- print('Param is:' . $err['param'] . "\n");
- print('Message is:' . $err['message'] . "\n");
-
- $error++;
- setEventMessages($e->getMessage(), null, 'errors');
- dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
- $action='';
- } catch (\Stripe\Error\RateLimit $e) {
- // Too many requests made to the API too quickly
- $error++;
- dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
- setEventMessages($e->getMessage(), null, 'errors');
- $action='';
- } catch (\Stripe\Error\InvalidRequest $e) {
- // Invalid parameters were supplied to Stripe's API
- $error++;
- dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
- setEventMessages($e->getMessage(), null, 'errors');
- $action='';
- } catch (\Stripe\Error\Authentication $e) {
- // Authentication with Stripe's API failed
- // (maybe you changed API keys recently)
- $error++;
- dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
- setEventMessages($e->getMessage(), null, 'errors');
- $action='';
- } catch (\Stripe\Error\ApiConnection $e) {
- // Network communication with Stripe failed
- $error++;
- dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
- setEventMessages($e->getMessage(), null, 'errors');
- $action='';
- } catch (\Stripe\Error\Base $e) {
- // Display a very generic error to the user, and maybe send
- // yourself an email
- $error++;
- dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
- setEventMessages($e->getMessage(), null, 'errors');
- $action='';
- } catch (Exception $e) {
- // Something else happened, completely unrelated to Stripe
- $error++;
- dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
- setEventMessages($e->getMessage(), null, 'errors');
- $action='';
- }
-
- $_SESSION["onlinetoken"] = $stripeToken;
- $_SESSION["FinalPaymentAmt"] = $amount;
- $_SESSION["currencyCodeType"] = $currency;
- $_SESSION["paymentType"] = '';
- $_SESSION['ipaddress'] = $_SERVER['REMOTE_ADDR']; // Payer ip
- $_SESSION['payerID'] = is_object($customer)?$customer->id:'';
- $_SESSION['TRANSACTIONID'] = is_object($charge)?$charge->id:'';
-
- dol_syslog("Action charge stripe result=".$error." ip=".$_SESSION['ipaddress'], LOG_DEBUG, 0, '_stripe');
- dol_syslog("onlinetoken=".$_SESSION["onlinetoken"]." FinalPaymentAmt=".$_SESSION["FinalPaymentAmt"]." currencyCodeType=".$_SESSION["currencyCodeType"]." payerID=".$_SESSION['payerID']." TRANSACTIONID=".$_SESSION['TRANSACTIONID'], LOG_DEBUG, 0, '_stripe');
- dol_syslog("FULLTAG=".$FULLTAG, LOG_DEBUG, 0, '_stripe');
- dol_syslog("Now call the redirect to paymentok or paymentko", LOG_DEBUG, 0, '_stripe');
-
- if ($error)
- {
- header("Location: ".$urlko);
- exit;
- }
- else
- {
- header("Location: ".$urlok);
- exit;
- }
-
- }
- /*
- * View
- */
- $head='';
- if (! empty($conf->global->STRIPE_CSS_URL)) $head='<link rel="stylesheet" type="text/css" href="'.$conf->global->STRIPE_CSS_URL.'?lang='.$langs->defaultlang.'">'."\n";
- $conf->dol_hide_topmenu=1;
- $conf->dol_hide_leftmenu=1;
- llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody');
- if (empty($conf->global->STRIPE_LIVE))
- {
- dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode'),'','warning');
- }
- print '<span id="dolpaymentspan"></span>'."\n";
- print '<div class="center">'."\n";
- print '<form id="dolpaymentform" class="center" name="paymentform" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
- print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'."\n";
- print '<input type="hidden" name="action" value="dopayment">'."\n";
- print '<input type="hidden" name="tag" value="'.GETPOST("tag",'alpha').'">'."\n";
- print '<input type="hidden" name="suffix" value="'.GETPOST("suffix",'alpha').'">'."\n";
- print '<input type="hidden" name="securekey" value="'.$SECUREKEY.'">'."\n";
- print '<input type="hidden" name="entity" value="'.$entity.'" />';
- print "\n";
- print '<!-- Form to send a Stripe payment -->'."\n";
- print '<!-- STRIPE_API_SANDBOX = '.$conf->global->STRIPE_API_SANDBOX.' -->'."\n";
- print '<!-- creditor = '.$creditor.' -->'."\n";
- print '<!-- urlok = '.$urlok.' -->'."\n";
- print '<!-- urlko = '.$urlko.' -->'."\n";
- print "\n";
- print '<table id="dolpaymenttable" summary="Payment form" class="center">'."\n";
- // Show logo (search order: logo defined by PAYBOX_LOGO_suffix, then PAYBOX_LOGO, then small company logo, large company logo, theme logo, common logo)
- $width=0;
- // Define logo and logosmall
- $logosmall=$mysoc->logo_small;
- $logo=$mysoc->logo;
- $paramlogo='STRIPE_LOGO_'.$suffix;
- if (! empty($conf->global->$paramlogo)) $logosmall=$conf->global->$paramlogo;
- else if (! empty($conf->global->STRIPE_LOGO)) $logosmall=$conf->global->STRIPE_LOGO;
- //print '<!-- Show logo (logosmall='.$logosmall.' logo='.$logo.') -->'."\n";
- // Define urllogo
- $urllogo='';
- if (! empty($logosmall) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$logosmall))
- {
- $urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&file='.urlencode('thumbs/'.$logosmall);
- }
- elseif (! empty($logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$logo))
- {
- $urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&file='.urlencode($logo);
- $width=96;
- }
- // Output html code for logo
- if ($urllogo)
- {
- print '<tr>';
- print '<td align="center"><img id="dolpaymentlogo" title="'.$title.'" src="'.$urllogo.'"';
- if ($width) print ' width="'.$width.'"';
- print '></td>';
- print '</tr>'."\n";
- }
- // Output introduction text
- $text='';
- if (! empty($conf->global->STRIPE_NEWFORM_TEXT))
- {
- $langs->load("members");
- if (preg_match('/^\((.*)\)$/',$conf->global->STRIPE_NEWFORM_TEXT,$reg)) $text.=$langs->trans($reg[1])."<br>\n";
- else $text.=$conf->global->STRIPE_NEWFORM_TEXT."<br>\n";
- $text='<tr><td align="center"><br>'.$text.'<br></td></tr>'."\n";
- }
- if (empty($text))
- {
- $text.='<tr><td class="textpublicpayment"><br><strong>'.$langs->trans("WelcomeOnPaymentPage").'</strong><br></td></tr>'."\n";
- $text.='<tr><td class="textpublicpayment"><br>'.$langs->trans("ThisScreenAllowsYouToPay",$creditor).'<br><br></td></tr>'."\n";
- }
- print $text;
- // Output payment summary form
- print '<tr><td align="center">';
- print '<table with="100%" id="tablepublicpayment">';
- print '<tr class="liste_total"><td align="left" colspan="2">'.$langs->trans("ThisIsInformationOnPayment").' :</td></tr>'."\n";
- $found=false;
- $error=0;
- $var=false;
- // Free payment
- if (! GETPOST("source"))
- {
- $found=true;
- $tag=GETPOST("tag");
- $fulltag=$tag;
-
- // Creditor
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Creditor");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$creditor.'</b>';
- print '<input type="hidden" name="creditor" value="'.$creditor.'">';
- print '</td></tr>'."\n";
- // Amount
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Amount");
- if (empty($amount)) print ' ('.$langs->trans("ToComplete").')';
- print '</td><td class="CTableRow'.($var?'1':'2').'">';
- if (empty($amount) || ! is_numeric($amount))
- {
- print '<input type="hidden" name="amount" value="'.GETPOST("amount",'int').'">';
- print '<input class="flat" size=8 type="text" name="newamount" value="'.GETPOST("newamount","int").'">';
- }
- else {
- print '<b>'.price($amount).'</b>';
- print '<input type="hidden" name="amount" value="'.$amount.'">';
- print '<input type="hidden" name="newamount" value="'.$amount.'">';
- }
- // Currency
- print ' <b>'.$langs->trans("Currency".$currency).'</b>';
- print '<input type="hidden" name="currency" value="'.$currency.'">';
- print '</td></tr>'."\n";
- // Tag
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("PaymentCode");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$fulltag.'</b>';
- print '<input type="hidden" name="tag" value="'.$tag.'">';
- print '<input type="hidden" name="fulltag" value="'.$fulltag.'">';
- print '</td></tr>'."\n";
- // We do not add fields shipToName, shipToStreet, shipToCity, shipToState, shipToCountryCode, shipToZip, shipToStreet2, phoneNum
- // as they don't exists (buyer is unknown, tag is free).
- }
- // Payment on customer order
- if (GETPOST("source") == 'order')
- {
- $found=true;
- $langs->load("orders");
- require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
- $order=new Commande($db);
- $result=$order->fetch('',$ref);
- if ($result < 0)
- {
- $mesg=$order->error;
- $error++;
- }
- else
- {
- $result=$order->fetch_thirdparty($order->socid);
- }
- if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
- {
- $amount=$order->total_ttc;
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
- }
-
- $fulltag='ORD='.$order->ref.'.CUS='.$order->thirdparty->id;
- //$fulltag.='.NAM='.strtr($order->thirdparty->name,"-"," ");
- if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
- $fulltag=dol_string_unaccent($fulltag);
- // Creditor
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Creditor");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$creditor.'</b>';
- print '<input type="hidden" name="creditor" value="'.$creditor.'">';
- print '</td></tr>'."\n";
- // Debitor
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("ThirdParty");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$order->thirdparty->name.'</b>';
- // Object
- $text='<b>'.$langs->trans("PaymentOrderRef",$order->ref).'</b>';
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
- print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
- print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">';
- print '<input type="hidden" name="ref" value="'.$order->ref.'">';
- print '</td></tr>'."\n";
- // Amount
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Amount");
- if (empty($amount)) print ' ('.$langs->trans("ToComplete").')';
- print '</td><td class="CTableRow'.($var?'1':'2').'">';
- if (empty($amount) || ! is_numeric($amount))
- {
- print '<input type="hidden" name="amount" value="'.GETPOST("amount",'int').'">';
- print '<input class="flat" size=8 type="text" name="newamount" value="'.GETPOST("newamount","int").'">';
- }
- else {
- print '<b>'.price($amount).'</b>';
- print '<input type="hidden" name="amount" value="'.$amount.'">';
- print '<input type="hidden" name="newamount" value="'.$amount.'">';
- }
- // Currency
- print ' <b>'.$langs->trans("Currency".$currency).'</b>';
- print '<input type="hidden" name="currency" value="'.$currency.'">';
- print '</td></tr>'."\n";
- // Tag
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("PaymentCode");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$fulltag.'</b>';
- print '<input type="hidden" name="tag" value="'.$tag.'">';
- print '<input type="hidden" name="fulltag" value="'.$fulltag.'">';
- print '</td></tr>'."\n";
- // Shipping address
- $shipToName=$order->thirdparty->name;
- $shipToStreet=$order->thirdparty->address;
- $shipToCity=$order->thirdparty->town;
- $shipToState=$order->thirdparty->state_code;
- $shipToCountryCode=$order->thirdparty->country_code;
- $shipToZip=$order->thirdparty->zip;
- $shipToStreet2='';
- $phoneNum=$order->thirdparty->phone;
- if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip)
- {
- print '<input type="hidden" name="shipToName" value="'.$shipToName.'">'."\n";
- print '<input type="hidden" name="shipToStreet" value="'.$shipToStreet.'">'."\n";
- print '<input type="hidden" name="shipToCity" value="'.$shipToCity.'">'."\n";
- print '<input type="hidden" name="shipToState" value="'.$shipToState.'">'."\n";
- print '<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.'">'."\n";
- print '<input type="hidden" name="shipToZip" value="'.$shipToZip.'">'."\n";
- print '<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.'">'."\n";
- print '<input type="hidden" name="phoneNum" value="'.$phoneNum.'">'."\n";
- }
- else
- {
- print '<!-- Shipping address not complete, so we don t use it -->'."\n";
- }
- print '<input type="hidden" name="email" value="'.$order->thirdparty->email.'">'."\n";
- print '<input type="hidden" name="desc" value="'.$langs->trans("Order").' '.$order->ref.'">'."\n";
- }
- // Payment on customer invoice
- if (GETPOST("source") == 'invoice')
- {
- $found=true;
- $langs->load("bills");
- require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
- $invoice=new Facture($db);
- $result=$invoice->fetch('',$ref);
- if ($result < 0)
- {
- $mesg=$invoice->error;
- $error++;
- }
- else
- {
- $result=$invoice->fetch_thirdparty($invoice->socid);
- }
- if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
- {
- $amount=price2num($invoice->total_ttc - $invoice->getSommePaiement());
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
- }
- $fulltag='INV='.$invoice->ref.'.CUS='.$invoice->thirdparty->id;
- //$fulltag.='.NAM='.strtr($invoice->thirdparty->name,"-"," ");
- if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
- $fulltag=dol_string_unaccent($fulltag);
-
- // Creditor
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Creditor");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$creditor.'</b>';
- print '<input type="hidden" name="creditor" value="'.$creditor.'">';
- print '</td></tr>'."\n";
- // Debitor
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("ThirdParty");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$invoice->thirdparty->name.'</b>';
- // Object
- $text='<b>'.$langs->trans("PaymentInvoiceRef",$invoice->ref).'</b>';
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
- print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
- print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">';
- print '<input type="hidden" name="ref" value="'.$invoice->ref.'">';
- print '</td></tr>'."\n";
- // Amount
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Amount");
- if (empty($amount)) print ' ('.$langs->trans("ToComplete").')';
- print '</td><td class="CTableRow'.($var?'1':'2').'">';
- if (empty($amount) || ! is_numeric($amount))
- {
- print '<input type="hidden" name="amount" value="'.GETPOST("amount",'int').'">';
- print '<input class="flat" size=8 type="text" name="newamount" value="'.GETPOST("newamount","int").'">';
- }
- else {
- print '<b>'.price($amount).'</b>';
- print '<input type="hidden" name="amount" value="'.$amount.'">';
- print '<input type="hidden" name="newamount" value="'.$amount.'">';
- }
- // Currency
- print ' <b>'.$langs->trans("Currency".$currency).'</b>';
- print '<input type="hidden" name="currency" value="'.$currency.'">';
- print '</td></tr>'."\n";
- // Tag
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("PaymentCode");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$fulltag.'</b>';
- print '<input type="hidden" name="tag" value="'.$tag.'">';
- print '<input type="hidden" name="fulltag" value="'.$fulltag.'">';
- print '</td></tr>'."\n";
- // Shipping address
- $shipToName=$invoice->thirdparty->name;
- $shipToStreet=$invoice->thirdparty->address;
- $shipToCity=$invoice->thirdparty->town;
- $shipToState=$invoice->thirdparty->state_code;
- $shipToCountryCode=$invoice->thirdparty->country_code;
- $shipToZip=$invoice->thirdparty->zip;
- $shipToStreet2='';
- $phoneNum=$invoice->thirdparty->phone;
- if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip)
- {
- print '<input type="hidden" name="shipToName" value="'.$shipToName.'">'."\n";
- print '<input type="hidden" name="shipToStreet" value="'.$shipToStreet.'">'."\n";
- print '<input type="hidden" name="shipToCity" value="'.$shipToCity.'">'."\n";
- print '<input type="hidden" name="shipToState" value="'.$shipToState.'">'."\n";
- print '<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.'">'."\n";
- print '<input type="hidden" name="shipToZip" value="'.$shipToZip.'">'."\n";
- print '<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.'">'."\n";
- print '<input type="hidden" name="phoneNum" value="'.$phoneNum.'">'."\n";
- }
- else
- {
- print '<!-- Shipping address not complete, so we don t use it -->'."\n";
- }
- print '<input type="hidden" name="email" value="'.$invoice->thirdparty->email.'">'."\n";
- print '<input type="hidden" name="desc" value="'.$langs->trans("Invoice").' '.$invoice->ref.'">'."\n";
- }
- // Payment on contract line
- if (GETPOST("source") == 'contractline')
- {
- $found=true;
- $langs->load("contracts");
- require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
- $contractline=new ContratLigne($db);
- $result=$contractline->fetch('',$ref);
- if ($result < 0)
- {
- $mesg=$contractline->error;
- $error++;
- }
- else
- {
- if ($contractline->fk_contrat > 0)
- {
- $contract=new Contrat($db);
- $result=$contract->fetch($contractline->fk_contrat);
- if ($result > 0)
- {
- $result=$contract->fetch_thirdparty($contract->socid);
- }
- else
- {
- $mesg=$contract->error;
- $error++;
- }
- }
- else
- {
- $mesg='ErrorRecordNotFound';
- $error++;
- }
- }
- if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
- {
- $amount=$contractline->total_ttc;
- if ($contractline->fk_product)
- {
- $product=new Product($db);
- $result=$product->fetch($contractline->fk_product);
-
- // We define price for product (TODO Put this in a method in product class)
- if (! empty($conf->global->PRODUIT_MULTIPRICES))
- {
- $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
- $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
- $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
- }
- else
- {
- $pu_ht = $product->price;
- $pu_ttc = $product->price_ttc;
- $price_base_type = $product->price_base_type;
- }
-
- $amount=$pu_ttc;
- if (empty($amount))
- {
- dol_print_error('','ErrorNoPriceDefinedForThisProduct');
- exit;
- }
- }
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
- }
-
- $fulltag='COL='.$contractline->ref.'.CON='.$contract->ref.'.CUS='.$contract->thirdparty->id.'.DAT='.dol_print_date(dol_now(),'%Y%m%d%H%M');
- //$fulltag.='.NAM='.strtr($contract->thirdparty->name,"-"," ");
- if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
- $fulltag=dol_string_unaccent($fulltag);
- $qty=1;
- if (GETPOST('qty')) $qty=GETPOST('qty');
- // Creditor
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Creditor");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$creditor.'</b>';
- print '<input type="hidden" name="creditor" value="'.$creditor.'">';
- print '</td></tr>'."\n";
- // Debitor
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("ThirdParty");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$contract->thirdparty->name.'</b>';
- // Object
- $text='<b>'.$langs->trans("PaymentRenewContractId",$contract->ref,$contractline->ref).'</b>';
- if ($contractline->fk_product)
- {
- $text.='<br>'.$product->ref.($product->label?' - '.$product->label:'');
- }
- if ($contractline->description) $text.='<br>'.dol_htmlentitiesbr($contractline->description);
- //if ($contractline->date_fin_validite) {
- // $text.='<br>'.$langs->trans("DateEndPlanned").': ';
- // $text.=dol_print_date($contractline->date_fin_validite);
- //}
- if ($contractline->date_fin_validite)
- {
- $text.='<br>'.$langs->trans("ExpiredSince").': '.dol_print_date($contractline->date_fin_validite);
- }
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
- print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
- print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">';
- print '<input type="hidden" name="ref" value="'.$contractline->ref.'">';
- print '</td></tr>'."\n";
- // Quantity
- $label=$langs->trans("Quantity");
- $qty=1;
- $duration='';
- if ($contractline->fk_product)
- {
- if ($product->isService() && $product->duration_value > 0)
- {
- $label=$langs->trans("Duration");
- // TODO Put this in a global method
- if ($product->duration_value > 1)
- {
- $dur=array("h"=>$langs->trans("Hours"),"d"=>$langs->trans("DurationDays"),"w"=>$langs->trans("DurationWeeks"),"m"=>$langs->trans("DurationMonths"),"y"=>$langs->trans("DurationYears"));
- }
- else
- {
- $dur=array("h"=>$langs->trans("Hour"),"d"=>$langs->trans("DurationDay"),"w"=>$langs->trans("DurationWeek"),"m"=>$langs->trans("DurationMonth"),"y"=>$langs->trans("DurationYear"));
- }
- $duration=$product->duration_value.' '.$dur[$product->duration_unit];
- }
- }
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$label.'</td>';
- print '<td class="CTableRow'.($var?'1':'2').'"><b>'.($duration?$duration:$qty).'</b>';
- print '<input type="hidden" name="newqty" value="'.dol_escape_htmltag($qty).'">';
- print '</b></td></tr>'."\n";
- // Amount
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Amount");
- if (empty($amount)) print ' ('.$langs->trans("ToComplete").')';
- print '</td><td class="CTableRow'.($var?'1':'2').'">';
- if (empty($amount) || ! is_numeric($amount))
- {
- print '<input type="hidden" name="amount" value="'.GETPOST("amount",'int').'">';
- print '<input class="flat" size=8 type="text" name="newamount" value="'.GETPOST("newamount","int").'">';
- }
- else {
- print '<b>'.price($amount).'</b>';
- print '<input type="hidden" name="amount" value="'.$amount.'">';
- print '<input type="hidden" name="newamount" value="'.$amount.'">';
- }
- // Currency
- print ' <b>'.$langs->trans("Currency".$currency).'</b>';
- print '<input type="hidden" name="currency" value="'.$currency.'">';
- print '</td></tr>'."\n";
- // Tag
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("PaymentCode");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$fulltag.'</b>';
- print '<input type="hidden" name="tag" value="'.$tag.'">';
- print '<input type="hidden" name="fulltag" value="'.$fulltag.'">';
- print '</td></tr>'."\n";
- // Shipping address
- $shipToName=$contract->thirdparty->name;
- $shipToStreet=$contract->thirdparty->address;
- $shipToCity=$contract->thirdparty->town;
- $shipToState=$contract->thirdparty->state_code;
- $shipToCountryCode=$contract->thirdparty->country_code;
- $shipToZip=$contract->thirdparty->zip;
- $shipToStreet2='';
- $phoneNum=$contract->thirdparty->phone;
- if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip)
- {
- print '<input type="hidden" name="shipToName" value="'.$shipToName.'">'."\n";
- print '<input type="hidden" name="shipToStreet" value="'.$shipToStreet.'">'."\n";
- print '<input type="hidden" name="shipToCity" value="'.$shipToCity.'">'."\n";
- print '<input type="hidden" name="shipToState" value="'.$shipToState.'">'."\n";
- print '<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.'">'."\n";
- print '<input type="hidden" name="shipToZip" value="'.$shipToZip.'">'."\n";
- print '<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.'">'."\n";
- print '<input type="hidden" name="phoneNum" value="'.$phoneNum.'">'."\n";
- }
- else
- {
- print '<!-- Shipping address not complete, so we don t use it -->'."\n";
- }
- print '<input type="hidden" name="email" value="'.$contract->thirdparty->email.'">'."\n";
- print '<input type="hidden" name="desc" value="'.$langs->trans("Contract").' '.$contract->ref.'">'."\n";
- }
- // Payment on member subscription
- if (GETPOST("source") == 'membersubscription')
- {
- $found=true;
- $langs->load("members");
- require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
- require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php';
- $member=new Adherent($db);
- $result=$member->fetch('',$ref);
- if ($result < 0)
- {
- $mesg=$member->error;
- $error++;
- }
- else
- {
- $subscription=new Subscription($db);
- }
- if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
- {
- $amount=$subscription->total_ttc;
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
- }
-
- $fulltag='MEM='.$member->id.'.DAT='.dol_print_date(dol_now(),'%Y%m%d%H%M');
- if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
- $fulltag=dol_string_unaccent($fulltag);
- // Creditor
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Creditor");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$creditor.'</b>';
- print '<input type="hidden" name="creditor" value="'.$creditor.'">';
- print '</td></tr>'."\n";
- // Debitor
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Member");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>';
- if ($member->morphy == 'mor' && ! empty($member->societe)) print $member->societe;
- else print $member->getFullName($langs);
- print '</b>';
- // Object
- $text='<b>'.$langs->trans("PaymentSubscription").'</b>';
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation");
- print '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
- print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">';
- print '<input type="hidden" name="ref" value="'.$member->ref.'">';
- print '</td></tr>'."\n";
- if ($member->last_subscription_date || $member->last_subscription_amount)
- {
- // Last subscription date
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("LastSubscriptionDate");
- print '</td><td class="CTableRow'.($var?'1':'2').'">'.dol_print_date($member->last_subscription_date,'day');
- print '</td></tr>'."\n";
- // Last subscription amount
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("LastSubscriptionAmount");
- print '</td><td class="CTableRow'.($var?'1':'2').'">'.price($member->last_subscription_amount);
- print '</td></tr>'."\n";
- if (empty($amount) && ! GETPOST('newamount')) $_GET['newamount']=$member->last_subscription_amount;
- }
- // Amount
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Amount");
- if (empty($amount))
- {
- print ' ('.$langs->trans("ToComplete");
- 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>';
- print ')';
- }
- print '</td><td class="CTableRow'.($var?'1':'2').'">';
- if (empty($amount) || ! is_numeric($amount))
- {
- $valtoshow=GETPOST("newamount",'int');
- if (! empty($conf->global->MEMBER_MIN_AMOUNT) && $valtoshow) $valtoshow=max($conf->global->MEMBER_MIN_AMOUNT,$valtoshow);
- print '<input type="hidden" name="amount" value="'.GETPOST("amount",'int').'">';
- print '<input class="flat" size="8" type="text" name="newamount" value="'.$valtoshow.'">';
- }
- else {
- $valtoshow=$amount;
- if (! empty($conf->global->MEMBER_MIN_AMOUNT) && $valtoshow) $valtoshow=max($conf->global->MEMBER_MIN_AMOUNT,$valtoshow);
- print '<b>'.price($valtoshow).'</b>';
- print '<input type="hidden" name="amount" value="'.$valtoshow.'">';
- print '<input type="hidden" name="newamount" value="'.$valtoshow.'">';
- }
- // Currency
- print ' <b>'.$langs->trans("Currency".$currency).'</b>';
- print '<input type="hidden" name="currency" value="'.$currency.'">';
- print '</td></tr>'."\n";
- // Tag
- print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("PaymentCode");
- print '</td><td class="CTableRow'.($var?'1':'2').'"><b>'.$fulltag.'</b>';
- print '<input type="hidden" name="tag" value="'.$tag.'">';
- print '<input type="hidden" name="fulltag" value="'.$fulltag.'">';
- print '</td></tr>'."\n";
- // Shipping address
- $shipToName=$member->getFullName($langs);
- $shipToStreet=$member->address;
- $shipToCity=$member->town;
- $shipToState=$member->state_code;
- $shipToCountryCode=$member->country_code;
- $shipToZip=$member->zip;
- $shipToStreet2='';
- $phoneNum=$member->phone;
- if ($shipToName && $shipToStreet && $shipToCity && $shipToCountryCode && $shipToZip)
- {
- print '<input type="hidden" name="shipToName" value="'.$shipToName.'">'."\n";
- print '<input type="hidden" name="shipToStreet" value="'.$shipToStreet.'">'."\n";
- print '<input type="hidden" name="shipToCity" value="'.$shipToCity.'">'."\n";
- print '<input type="hidden" name="shipToState" value="'.$shipToState.'">'."\n";
- print '<input type="hidden" name="shipToCountryCode" value="'.$shipToCountryCode.'">'."\n";
- print '<input type="hidden" name="shipToZip" value="'.$shipToZip.'">'."\n";
- print '<input type="hidden" name="shipToStreet2" value="'.$shipToStreet2.'">'."\n";
- print '<input type="hidden" name="phoneNum" value="'.$phoneNum.'">'."\n";
- }
- else
- {
- print '<!-- Shipping address not complete, so we don t use it -->'."\n";
- }
- print '<input type="hidden" name="email" value="'.$member->email.'">'."\n";
- print '<input type="hidden" name="desc" value="'.$langs->trans("PaymentSubscription").'">'."\n";
- }
- if (! $found && ! $mesg) $mesg=$langs->trans("ErrorBadParameters");
- if ($mesg) print '<tr><td align="center" colspan="2"><br><div class="warning">'.$mesg.'</div></td></tr>'."\n";
- print '</table>'."\n";
- print "\n";
- if ($action != 'dopayment')
- {
- if ($found && ! $error) // We are in a management option and no error
- {
- print '<br><input class="button" type="submit" name="dopayment_stripe" value="'.$langs->trans("StripeDoPayment").'">';
- }
- else
- {
- dol_print_error_email('ERRORNEWPAYMENTSTRIPE');
- }
- }
- print '</td></tr>'."\n";
- print '</table>'."\n";
- print '</form>'."\n";
- print '</div>'."\n";
- print '<br>';
- // Add more content on page for some services
- if (preg_match('/^dopayment/',$action))
- {
- // Simple checkout
- /*
- print '<script src="https://checkout.stripe.com/checkout.js"
- class="stripe-button"
- data-key="'.$stripe['publishable_key'].'"
- data-amount="'.$ttc.'"
- data-currency="'.$conf->currency.'"
- data-description="'.$ref.'">
- </script>';
- */
-
- // Personalized checkout
- print '<style>
- /**
- * The CSS shown here will not be introduced in the Quickstart guide, but shows
- * how you can use CSS to style your Element s container.
- */
- .StripeElement {
- background-color: white;
- padding: 8px 12px;
- border-radius: 4px;
- border: 1px solid transparent;
- box-shadow: 0 1px 3px 0 #e6ebf1;
- -webkit-transition: box-shadow 150ms ease;
- transition: box-shadow 150ms ease;
- }
-
- .StripeElement--focus {
- box-shadow: 0 1px 3px 0 #cfd7df;
- }
-
- .StripeElement--invalid {
- border-color: #fa755a;
- }
-
- .StripeElement--webkit-autofill {
- background-color: #fefde5 !important;
- }
- </style>';
-
- print '
-
- <br>
- <form action="'.$_SERVER['REQUEST_URI'].'" method="POST" id="payment-form">';
- print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'."\n";
- print '<input type="hidden" name="dopayment_stripe" value="1">'."\n";
- print '<input type="hidden" name="action" value="charge">'."\n";
- print '<input type="hidden" name="tag" value="'.$TAG.'">'."\n";
- print '<input type="hidden" name="source" value="'.$SOURCE.'">'."\n";
- print '<input type="hidden" name="ref" value="'.$REF.'">'."\n";
- print '<input type="hidden" name="fulltag" value="'.$FULLTAG.'">'."\n";
- print '<input type="hidden" name="suffix" value="'.$suffix.'">'."\n";
- print '<input type="hidden" name="securekey" value="'.$SECUREKEY.'">'."\n";
- print '<input type="hidden" name="entity" value="'.$entity.'" />';
- print '<input type="hidden" name="amount" value="'.$amount.'">'."\n";
- print '<input type="hidden" name="currency" value="'.$currency.'">'."\n";
-
- print '
- <table id="dolpaymenttable" summary="Payment form" class="center">
- <tbody><tr><td class="textpublicpayment">
-
- <div class="form-row left">
- <label for="card-element">
- Credit or debit card
- </label>
- <div id="card-element">
- <!-- a Stripe Element will be inserted here. -->
- </div>
-
- <!-- Used to display form errors -->
- <div id="card-errors" role="alert"></div>
- </div>
- <br>
- <button class="button" id="buttontopay">'.$langs->trans("ToPay").'</button>
- <img id="hourglasstopay" class="hidden" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/working.gif'.'">
- </td></tr></tbody></table>
-
- </form>
-
- <script src="https://js.stripe.com/v2/"></script>
- <script src="https://js.stripe.com/v3/"></script>
-
- <script type="text/javascript" language="javascript">';
- ?>
- // Create a Stripe client
- var stripe = Stripe('<?php echo $stripe['publishable_key']; ?>');
-
- // Create an instance of Elements
- var elements = stripe.elements();
-
- // Custom styling can be passed to options when creating an Element.
- // (Note that this demo uses a wider set of styles than the guide below.)
- var style = {
- base: {
- color: '#32325d',
- lineHeight: '24px',
- fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
- fontSmoothing: 'antialiased',
- fontSize: '16px',
- '::placeholder': {
- color: '#aab7c4'
- }
- },
- invalid: {
- color: '#fa755a',
- iconColor: '#fa755a'
- }
- };
-
- // Create an instance of the card Element
- var card = elements.create('card', {style: style});
-
- // Add an instance of the card Element into the `card-element` <div>
- card.mount('#card-element');
-
- // Handle real-time validation errors from the card Element.
- card.addEventListener('change', function(event) {
- var displayError = document.getElementById('card-errors');
- if (event.error) {
- displayError.textContent = event.error.message;
- } else {
- displayError.textContent = '';
- }
- });
-
- // Handle form submission
- var form = document.getElementById('payment-form');
- console.log(form);
- form.addEventListener('submit', function(event) {
- event.preventDefault();
-
- stripe.createToken(card).then(function(result) {
- if (result.error) {
- // Inform the user if there was an error
- var errorElement = document.getElementById('card-errors');
- errorElement.textContent = result.error.message;
- } else {
- // Send the token to your server
- stripeTokenHandler(result.token);
- }
- });
- });
-
- function stripeTokenHandler(token) {
- // Insert the token ID into the form so it gets submitted to the server
- var form = document.getElementById('payment-form');
- var hiddenInput = document.createElement('input');
- hiddenInput.setAttribute('type', 'hidden');
- hiddenInput.setAttribute('name', 'stripeToken');
- hiddenInput.setAttribute('value', token.id);
- form.appendChild(hiddenInput);
-
- // Submit the form
- jQuery('#buttontopay').hide();
- jQuery('#hourglasstopay').show();
- console.log("submit");
- form.submit();
- }
-
- <?php
- print '</script>';
- }
- htmlPrintOnlinePaymentFooter($mysoc,$langs);
- llxFooter('', 'public');
- $db->close();
|