Debug online payment using unique form

This commit is contained in:
Laurent Destailleur 2017-09-20 19:34:14 +02:00
parent 577c64cc37
commit 2f317c5834
5 changed files with 37 additions and 34 deletions

View File

@ -66,21 +66,21 @@ $suffix=GETPOST("suffix",'aZ09');
$amount=price2num(GETPOST("amount",'alpha')); $amount=price2num(GETPOST("amount",'alpha'));
if (! GETPOST("currency",'alpha')) $currency=$conf->currency; if (! GETPOST("currency",'alpha')) $currency=$conf->currency;
else $currency=GETPOST("currency",'alpha'); else $currency=GETPOST("currency",'alpha');
$source = GETPOST("source",'alpha'); $source = GETPOST("s",'alpha')?GETPOST("s",'alpha'):GETPOST("source",'alpha');
if (! $action) if (! $action)
{ {
if (! GETPOST("amount",'alpha') && ! GETPOST("source",'alpha')) if (! GETPOST("amount",'alpha') && ! $source)
{ {
print $langs->trans('ErrorBadParameters')." - amount or source"; print $langs->trans('ErrorBadParameters')." - amount or source";
exit; exit;
} }
if (is_numeric($amount) && ! GETPOST("tag",'alpha') && ! GETPOST("source",'alpha')) if (is_numeric($amount) && ! GETPOST("tag",'alpha') && ! $source)
{ {
print $langs->trans('ErrorBadParameters')." - tag or source"; print $langs->trans('ErrorBadParameters')." - tag or source";
exit; exit;
} }
if (GETPOST("source",'alpha') && ! GETPOST("ref",'alpha')) if ($source && ! GETPOST("ref",'alpha'))
{ {
print $langs->trans('ErrorBadParameters')." - ref"; print $langs->trans('ErrorBadParameters')." - ref";
exit; exit;
@ -111,7 +111,6 @@ $urlok=$urlwithroot.'/public/payment/paymentok.php?';
$urlko=$urlwithroot.'/public/payment/paymentko.php?'; $urlko=$urlwithroot.'/public/payment/paymentko.php?';
// Complete urls for post treatment // Complete urls for post treatment
$SOURCE=GETPOST("source",'alpha');
$ref=$REF=GETPOST('ref','alpha'); $ref=$REF=GETPOST('ref','alpha');
$TAG=GETPOST("tag",'alpha'); $TAG=GETPOST("tag",'alpha');
$FULLTAG=GETPOST("fulltag",'alpha'); // fulltag is tag with more informations $FULLTAG=GETPOST("fulltag",'alpha'); // fulltag is tag with more informations
@ -123,10 +122,10 @@ if (! empty($suffix))
$urlok.='suffix='.urlencode($suffix).'&'; $urlok.='suffix='.urlencode($suffix).'&';
$urlko.='suffix='.urlencode($suffix).'&'; $urlko.='suffix='.urlencode($suffix).'&';
} }
if (! empty($SOURCE)) if ($source)
{ {
$urlok.='source='.urlencode($SOURCE).'&'; $urlok.='s='.urlencode($source).'&';
$urlko.='source='.urlencode($SOURCE).'&'; $urlko.='s='.urlencode($source).'&';
} }
if (! empty($REF)) if (! empty($REF))
{ {
@ -143,15 +142,16 @@ if (! empty($FULLTAG))
$urlok.='fulltag='.urlencode($FULLTAG).'&'; $urlok.='fulltag='.urlencode($FULLTAG).'&';
$urlko.='fulltag='.urlencode($FULLTAG).'&'; $urlko.='fulltag='.urlencode($FULLTAG).'&';
} }
/* This make url too long. Seems not required into the back url
if (! empty($SECUREKEY)) if (! empty($SECUREKEY))
{ {
$urlok.='securekey='.urlencode($SECUREKEY).'&'; $urlok.='securekey='.urlencode($SECUREKEY).'&';
$urlko.='securekey='.urlencode($SECUREKEY).'&'; $urlko.='securekey='.urlencode($SECUREKEY).'&';
} }*/
if (! empty($entity)) if (! empty($entity))
{ {
$urlok.='entity='.urlencode($entity).'&'; $urlok.='e='.urlencode($entity).'&';
$urlko.='entity='.urlencode($entity).'&'; $urlko.='e='.urlencode($entity).'&';
} }
$urlok=preg_replace('/&$/','',$urlok); // Remove last & $urlok=preg_replace('/&$/','',$urlok); // Remove last &
$urlko=preg_replace('/&$/','',$urlko); // Remove last & $urlko=preg_replace('/&$/','',$urlko); // Remove last &
@ -223,7 +223,7 @@ if (! empty($conf->global->PAYMENT_SECURITY_TOKEN))
{ {
if (! empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) if (! empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE))
{ {
if ($SOURCE && $REF) $token = dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . $SOURCE . $REF, 2); // Use the source in the hash to avoid duplicates if the references are identical if ($source && $REF) $token = dol_hash($conf->global->PAYMENT_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->PAYMENT_SECURITY_TOKEN, 2); else $token = dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2);
} }
else else
@ -340,13 +340,14 @@ if ($action == 'dopayment')
elseif (empty($email)) $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("YourEMail")); elseif (empty($email)) $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("YourEMail"));
elseif (! isValidEMail($email)) $mesg=$langs->trans("ErrorBadEMail",$email); elseif (! isValidEMail($email)) $mesg=$langs->trans("ErrorBadEMail",$email);
elseif (! $origfulltag) $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("PaymentCode")); elseif (! $origfulltag) $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("PaymentCode"));
elseif (dol_strlen($urlok) > 150) $mesg='Error urlok too long '.$urlok; elseif (dol_strlen($urlok) > 150) $mesg='Error urlok too long '.$urlok.'( Paybox requires 150, found '.strlen($urlok).')';
elseif (dol_strlen($urlko) > 150) $mesg='Error urlko too long '.$urlko; elseif (dol_strlen($urlko) > 150) $mesg='Error urlko too long '.$urlko.'( Paybox requires 150, found '.strlen($urlok).')';
if (empty($mesg)) if (empty($mesg))
{ {
dol_syslog("newpayment.php call paybox api and do redirect", LOG_DEBUG); dol_syslog("newpayment.php call paybox api and do redirect", LOG_DEBUG);
include_once DOL_DOCUMENT_ROOT.'/paybox/lib/paybox.lib.php';
print_paybox_redirect($PRICE, $conf->currency, $email, $urlok, $urlko, $FULLTAG); print_paybox_redirect($PRICE, $conf->currency, $email, $urlok, $urlko, $FULLTAG);
session_destroy(); session_destroy();
@ -499,10 +500,10 @@ $conf->dol_hide_leftmenu=1;
llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody'); llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody');
// Check link validity // Check link validity
if (! empty($SOURCE) && in_array($ref, array('member_ref', 'contractline_ref', 'invoice_ref', 'order_ref', ''))) if ($source && in_array($ref, array('member_ref', 'contractline_ref', 'invoice_ref', 'order_ref', '')))
{ {
$langs->load("errors"); $langs->load("errors");
dol_print_error_email('BADREFINPAYMENTFORM', $langs->trans("ErrorBadLinkSourceSetButBadValueForRef", $SOURCE, $ref)); dol_print_error_email('BADREFINPAYMENTFORM', $langs->trans("ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
llxFooter(); llxFooter();
$db->close(); $db->close();
exit; exit;
@ -528,7 +529,7 @@ 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="tag" value="'.GETPOST("tag",'alpha').'">'."\n";
print '<input type="hidden" name="suffix" value="'.GETPOST("suffix",'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="securekey" value="'.$SECUREKEY.'">'."\n";
print '<input type="hidden" name="entity" value="'.$entity.'" />'; print '<input type="hidden" name="e" value="'.$entity.'" />';
print "\n"; print "\n";
print '<!-- Form to send a payment -->'."\n"; print '<!-- Form to send a payment -->'."\n";
print '<!-- creditor = '.$creditor.' -->'."\n"; print '<!-- creditor = '.$creditor.' -->'."\n";
@ -709,8 +710,8 @@ if ($source == 'order')
$text='<b>'.$langs->trans("PaymentOrderRef",$order->ref).'</b>'; $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 '<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 '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">'; print '<input type="hidden" name="s" value="'.dol_escape_htmltag($source).'">';
print '<input type="hidden" name="ref" value="'.$order->ref.'">'; print '<input type="hidden" name="ref" value="'.dol_escape_htmltag($order->ref).'">';
print '</td></tr>'."\n"; print '</td></tr>'."\n";
// Amount // Amount
@ -821,7 +822,7 @@ if ($source == 'invoice')
$text='<b>'.$langs->trans("PaymentInvoiceRef",$invoice->ref).'</b>'; $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 '<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 '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
print '<input type="hidden" name="source" value="'.dol_escape_htmltag(GETPOST("source",'alpha')).'">'; print '<input type="hidden" name="s" value="'.dol_escape_htmltag($source).'">';
print '<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).'">'; print '<input type="hidden" name="ref" value="'.dol_escape_htmltag($invoice->ref).'">';
print '</td></tr>'."\n"; print '</td></tr>'."\n";
@ -1004,8 +1005,8 @@ if ($source == 'contractline')
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation"); 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 '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">'; print '<input type="hidden" name="source" value="'.dol_escape_htmltag($source).'">';
print '<input type="hidden" name="ref" value="'.$contractline->ref.'">'; print '<input type="hidden" name="ref" value="'.dol_escape_htmltag($contractline->ref).'">';
print '</td></tr>'."\n"; print '</td></tr>'."\n";
// Quantity // Quantity
@ -1146,8 +1147,8 @@ if ($source == 'membersubscription')
$text='<b>'.$langs->trans("PaymentSubscription").'</b>'; $text='<b>'.$langs->trans("PaymentSubscription").'</b>';
print '<tr class="CTableRow'.($var?'1':'2').'"><td class="CTableRow'.($var?'1':'2').'">'.$langs->trans("Designation"); 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 '</td><td class="CTableRow'.($var?'1':'2').'">'.$text;
print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">'; print '<input type="hidden" name="source" value="'.dol_escape_htmltag($source).'">';
print '<input type="hidden" name="ref" value="'.$member->ref.'">'; print '<input type="hidden" name="ref" value="'.dol_escape_htmltag($member->ref).'">';
print '</td></tr>'."\n"; print '</td></tr>'."\n";
if ($member->last_subscription_date || $member->last_subscription_amount) if ($member->last_subscription_date || $member->last_subscription_amount)
@ -1272,7 +1273,7 @@ if ($action != 'dopayment')
if (! empty($conf->stripe->enabled)) if (! empty($conf->stripe->enabled))
{ {
// If STRIPE_PICTO_FOR_PAYMENT is 'cb' we show a picto of a crdit card instead of stripe // If STRIPE_PICTO_FOR_PAYMENT is 'cb' we show a picto of a crdit card instead of stripe
print '<br><input class="button buttonpayment buttonpayment'.(empty($conf->global->STRIPE_PICTO_FOR_PAYMENT)?'stripe':$conf->global->STRIPE_PICTO_FOR_PAYMENT).'" type="submit" name="dopayment__stripe" value="'.$langs->trans("StripeDoPayment").'">'; print '<br><input class="button buttonpayment buttonpayment'.(empty($conf->global->STRIPE_PICTO_FOR_PAYMENT)?'stripe':$conf->global->STRIPE_PICTO_FOR_PAYMENT).'" type="submit" name="dopayment_stripe" value="'.$langs->trans("StripeDoPayment").'">';
} }
if (! empty($conf->paypal->enabled)) if (! empty($conf->paypal->enabled))
@ -1365,12 +1366,12 @@ if (preg_match('/^dopayment/',$action))
print '<input type="hidden" name="dopayment_stripe" value="1">'."\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="action" value="charge">'."\n";
print '<input type="hidden" name="tag" value="'.$TAG.'">'."\n"; print '<input type="hidden" name="tag" value="'.$TAG.'">'."\n";
print '<input type="hidden" name="source" value="'.$SOURCE.'">'."\n"; print '<input type="hidden" name="s" value="'.$source.'">'."\n";
print '<input type="hidden" name="ref" value="'.$REF.'">'."\n"; print '<input type="hidden" name="ref" value="'.$REF.'">'."\n";
print '<input type="hidden" name="fulltag" value="'.$FULLTAG.'">'."\n"; print '<input type="hidden" name="fulltag" value="'.$FULLTAG.'">'."\n";
print '<input type="hidden" name="suffix" value="'.$suffix.'">'."\n"; print '<input type="hidden" name="suffix" value="'.$suffix.'">'."\n";
print '<input type="hidden" name="securekey" value="'.$SECUREKEY.'">'."\n"; print '<input type="hidden" name="securekey" value="'.$SECUREKEY.'">'."\n";
print '<input type="hidden" name="entity" value="'.$entity.'" />'; print '<input type="hidden" name="e" value="'.$entity.'" />';
print '<input type="hidden" name="amount" value="'.$amount.'">'."\n"; print '<input type="hidden" name="amount" value="'.$amount.'">'."\n";
print '<input type="hidden" name="currency" value="'.$currency.'">'."\n"; print '<input type="hidden" name="currency" value="'.$currency.'">'."\n";

View File

@ -31,7 +31,7 @@ define("NOCSRFCHECK",1); // We accept to go on this page from external web site.
// For MultiCompany module. // For MultiCompany module.
// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php // 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. // 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)); $entity=(! empty($_GET['e']) ? (int) $_GET['e'] : (! empty($_POST['e']) ? (int) $_POST['e'] : 1));
if (is_numeric($entity)) define("DOLENTITY", $entity); if (is_numeric($entity)) define("DOLENTITY", $entity);
require '../../main.inc.php'; require '../../main.inc.php';

View File

@ -31,7 +31,7 @@ define("NOCSRFCHECK",1); // We accept to go on this page from external web site.
// For MultiCompany module. // For MultiCompany module.
// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php // 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. // 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)); $entity=(! empty($_GET['e']) ? (int) $_GET['e'] : (! empty($_POST['e']) ? (int) $_POST['e'] : 1));
if (is_numeric($entity)) define("DOLENTITY", $entity); if (is_numeric($entity)) define("DOLENTITY", $entity);
require '../../main.inc.php'; require '../../main.inc.php';
@ -76,7 +76,7 @@ if (! empty($conf->paypal->enabled))
$FULLTAG=GETPOST('FULLTAG'); $FULLTAG=GETPOST('FULLTAG');
if (empty($FULLTAG)) $FULLTAG=GETPOST('fulltag'); if (empty($FULLTAG)) $FULLTAG=GETPOST('fulltag');
$source=GETPOST('source'); $source=GETPOST('s','alpha')?GETPOST('s','alpha'):GETPOST('source','alpha');
$ref=GETPOST('ref'); $ref=GETPOST('ref');
$suffix=GETPOST("suffix",'aZ09'); $suffix=GETPOST("suffix",'aZ09');
@ -145,7 +145,6 @@ $conf->dol_hide_leftmenu=1;
llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody'); llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody');
// Show message // Show message
print '<span id="dolpaymentspan"></span>'."\n"; print '<span id="dolpaymentspan"></span>'."\n";
print '<div id="dolpaymentdiv" align="center">'."\n"; print '<div id="dolpaymentdiv" align="center">'."\n";

View File

@ -1084,7 +1084,7 @@ div.fiche {
<?php if (! empty($conf->dol_hide_leftmenu)) print 'margin-bottom: 12px;'."\n"; ?> <?php if (! empty($conf->dol_hide_leftmenu)) print 'margin-bottom: 12px;'."\n"; ?>
} }
body.onlinepaymentbody div.fiche { /* For online payment page */ body.onlinepaymentbody div.fiche { /* For online payment page */
margin: 40px !important; margin: 20px !important;
} }
div.fiche>table:first-child { div.fiche>table:first-child {
margin-bottom: 15px !important; margin-bottom: 15px !important;
@ -3139,7 +3139,7 @@ div.titre {
/* text-shadow: 1px 1px 2px #FFFFFF; */ /* text-shadow: 1px 1px 2px #FFFFFF; */
} }
#dolpaymenttable { max-width: 600px; font-size: 16px; } #dolpaymenttable { min-width: 310px; font-size: 16px; } /* Width must have min to make stripe input area visible */
#tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; } #tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; }
#tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; } #tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; }
#tablepublicpayment tr.liste_total { border-bottom: 1px solid #CCCCCC !important; } #tablepublicpayment tr.liste_total { border-bottom: 1px solid #CCCCCC !important; }

View File

@ -1120,6 +1120,9 @@ div.fiche {
<?php if (! empty($conf->dol_hide_leftmenu) && ! empty($conf->dol_hide_topmenu)) print 'margin-top: 4px;'; ?> <?php if (! empty($conf->dol_hide_leftmenu) && ! empty($conf->dol_hide_topmenu)) print 'margin-top: 4px;'; ?>
margin-bottom: 15px; margin-bottom: 15px;
} }
body.onlinepaymentbody div.fiche { /* For online payment page */
margin: 20px !important;
}
div.fichecenter { div.fichecenter {
width: 100%; width: 100%;
clear: both; /* This is to have div fichecenter that are true rectangles */ clear: both; /* This is to have div fichecenter that are true rectangles */
@ -3239,7 +3242,7 @@ div.titre {
<?php print (empty($conf->dol_optimize_smallscreen)?'':'margin-top: 4px;'); ?> <?php print (empty($conf->dol_optimize_smallscreen)?'':'margin-top: 4px;'); ?>
} }
#dolpaymenttable { max-width: 600px; font-size: 16px; } #dolpaymenttable { min-width: 320px; font-size: 16px; } /* Width must have min to make stripe input area visible */
#tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; } #tablepublicpayment { border: 1px solid #CCCCCC !important; width: 100%; padding: 20px; }
#tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; } #tablepublicpayment .CTableRow1 { background-color: #F0F0F0 !important; }
#tablepublicpayment tr.liste_total { border-bottom: 1px solid #CCCCCC !important; } #tablepublicpayment tr.liste_total { border-bottom: 1px solid #CCCCCC !important; }