mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-02-20 13:46:52 +01:00
FIX redirect to payment page when membership payment mode forced
This commit is contained in:
parent
66d9964861
commit
6e27abaed9
|
|
@ -1398,6 +1398,7 @@ class Adherent extends CommonObject
|
|||
|
||||
$this->photo = $obj->photo;
|
||||
$this->statut = $obj->statut;
|
||||
$this->status = $obj->statut;
|
||||
$this->public = $obj->public;
|
||||
|
||||
$this->datec = $this->db->jdate($obj->datec);
|
||||
|
|
|
|||
|
|
@ -386,77 +386,29 @@ if (empty($reshook) && $action == 'add') {
|
|||
}
|
||||
|
||||
if (!empty($conf->global->MEMBER_NEWFORM_PAYONLINE) && $conf->global->MEMBER_NEWFORM_PAYONLINE != '-1') {
|
||||
if ($conf->global->MEMBER_NEWFORM_PAYONLINE == 'all') {
|
||||
// The default behaviour
|
||||
$urlback = DOL_MAIN_URL_ROOT.'/public/payment/newpayment.php?from=membernewform&source=membersubscription&ref='.urlencode($adh->ref);
|
||||
$urlback = DOL_MAIN_URL_ROOT.'/public/payment/newpayment.php?from=membernewform&source=membersubscription&ref='.urlencode($adh->ref);
|
||||
|
||||
if (empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT)) { // If edition of amount not allowed
|
||||
// TODO Check amount is same than the amount required for the type of member or if not defined as the defeault amount into $conf->global->MEMBER_NEWFORM_AMOUNT
|
||||
// It is not so important because a test is done on return of payment validation.
|
||||
$urlback .= '&amount='.price2num(GETPOST('amount', 'alpha'));
|
||||
} elseif (price2num(GETPOST('amount', 'alpha'))) {
|
||||
$urlback .= '&amount='.price2num(GETPOST('amount', 'alpha'));
|
||||
}
|
||||
if (empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT)) { // If edition of amount not allowed
|
||||
// TODO Check amount is same than the amount required for the type of member or if not defined as the defeault amount into $conf->global->MEMBER_NEWFORM_AMOUNT
|
||||
// It is not so important because a test is done on return of payment validation.
|
||||
$urlback .= '&amount='.price2num(GETPOST('amount', 'alpha'));
|
||||
} elseif (price2num(GETPOST('amount', 'alpha'))) {
|
||||
$urlback .= '&amount='.price2num(GETPOST('amount', 'alpha'));
|
||||
}
|
||||
|
||||
if (GETPOST('email')) {
|
||||
$urlback .= '&email='.urlencode(GETPOST('email'));
|
||||
if (GETPOST('email')) {
|
||||
$urlback .= '&email='.urlencode(GETPOST('email'));
|
||||
}
|
||||
if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) {
|
||||
if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) {
|
||||
$urlback .= '&securekey='.urlencode(dol_hash($conf->global->PAYMENT_SECURITY_TOKEN.'membersubscription'.$adh->ref, 2));
|
||||
} else {
|
||||
$urlback .= '&securekey='.urlencode($conf->global->PAYMENT_SECURITY_TOKEN);
|
||||
}
|
||||
if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) {
|
||||
if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) {
|
||||
$urlback .= '&securekey='.urlencode(dol_hash($conf->global->PAYMENT_SECURITY_TOKEN.'membersubscription'.$adh->ref, 2));
|
||||
} else {
|
||||
$urlback .= '&securekey='.urlencode($conf->global->PAYMENT_SECURITY_TOKEN);
|
||||
}
|
||||
}
|
||||
/*} elseif ($conf->global->MEMBER_NEWFORM_PAYONLINE == 'paybox') {
|
||||
$urlback = DOL_MAIN_URL_ROOT.'/public/paybox/newpayment.php?from=membernewform&source=membersubscription&ref='.urlencode($adh->ref);
|
||||
if (price2num(GETPOST('amount', 'alpha'))) {
|
||||
$urlback .= '&amount='.price2num(GETPOST('amount', 'alpha'));
|
||||
}
|
||||
if (GETPOST('email')) {
|
||||
$urlback .= '&email='.urlencode(GETPOST('email'));
|
||||
}
|
||||
if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) {
|
||||
if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) {
|
||||
$urlback .= '&securekey='.urlencode(dol_hash($conf->global->PAYMENT_SECURITY_TOKEN.'membersubscription'.$adh->ref, 2));
|
||||
} else {
|
||||
$urlback .= '&securekey='.urlencode($conf->global->PAYMENT_SECURITY_TOKEN);
|
||||
}
|
||||
}
|
||||
} elseif ($conf->global->MEMBER_NEWFORM_PAYONLINE == 'paypal') {
|
||||
$urlback = DOL_MAIN_URL_ROOT.'/public/paypal/newpayment.php?from=membernewform&source=membersubscription&ref='.urlencode($adh->ref);
|
||||
if (price2num(GETPOST('amount', 'alpha'))) {
|
||||
$urlback .= '&amount='.price2num(GETPOST('amount', 'alpha'));
|
||||
}
|
||||
if (GETPOST('email')) {
|
||||
$urlback .= '&email='.urlencode(GETPOST('email'));
|
||||
}
|
||||
if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) {
|
||||
if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) {
|
||||
$urlback .= '&securekey='.urlencode(dol_hash($conf->global->PAYMENT_SECURITY_TOKEN.'membersubscription'.$adh->ref, 2));
|
||||
} else {
|
||||
$urlback .= '&securekey='.urlencode($conf->global->PAYMENT_SECURITY_TOKEN);
|
||||
}
|
||||
}
|
||||
} elseif ($conf->global->MEMBER_NEWFORM_PAYONLINE == 'stripe') {
|
||||
$urlback = DOL_MAIN_URL_ROOT.'/public/stripe/newpayment.php?from=membernewform&source=membersubscription&ref='.$adh->ref;
|
||||
if (price2num(GETPOST('amount', 'alpha'))) {
|
||||
$urlback .= '&amount='.price2num(GETPOST('amount', 'alpha'));
|
||||
}
|
||||
if (GETPOST('email')) {
|
||||
$urlback .= '&email='.urlencode(GETPOST('email'));
|
||||
}
|
||||
if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) {
|
||||
if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) {
|
||||
$urlback .= '&securekey='.urlencode(dol_hash($conf->global->PAYMENT_SECURITY_TOKEN.'membersubscription'.$adh->ref, 2));
|
||||
} else {
|
||||
$urlback .= '&securekey='.urlencode($conf->global->PAYMENT_SECURITY_TOKEN);
|
||||
}
|
||||
}
|
||||
*/
|
||||
} else {
|
||||
dol_print_error('', "Autosubscribe form is setup to ask an online payment for a not managed online payment");
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($conf->global->MEMBER_NEWFORM_PAYONLINE != '-1' && $conf->global->MEMBER_NEWFORM_PAYONLINE != 'all') {
|
||||
$urlback .= '&paymentmethod='.urlencode($conf->global->MEMBER_NEWFORM_PAYONLINE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -184,11 +184,12 @@ if ($source == 'organizedeventregistration') {
|
|||
}
|
||||
|
||||
|
||||
$paymentmethod = GETPOST('paymentmethod', 'alphanohtml') ?GETPOST('paymentmethod', 'alphanohtml') : ''; // Empty in most cases. Defined when a payment mode is forced
|
||||
$paymentmethod = GETPOST('paymentmethod', 'alphanohtml') ? GETPOST('paymentmethod', 'alphanohtml') : ''; // Empty in most cases. Defined when a payment mode is forced
|
||||
$validpaymentmethod = array();
|
||||
|
||||
// Detect $paymentmethod
|
||||
foreach ($_POST as $key => $val) {
|
||||
$reg = array();
|
||||
if (preg_match('/^dopayment_(.*)$/', $key, $reg)) {
|
||||
$paymentmethod = $reg[1];
|
||||
break;
|
||||
|
|
@ -480,7 +481,7 @@ if ($action == 'dopayment') {
|
|||
|
||||
// Called when choosing Stripe mode.
|
||||
// When using the Charge API architecture, this code is called after clicking the 'dopayment' with the Charge API architecture.
|
||||
// When using the PaymentIntent API architecture, the Stripe customer is already created when creating PaymentIntent when showing payment page and the payment is already ok.
|
||||
// When using the PaymentIntent API architecture, the Stripe customer was already created when creating PaymentIntent when showing payment page, and the payment is already ok when action=charge.
|
||||
if ($action == 'charge' && !empty($conf->stripe->enabled)) {
|
||||
$amountstripe = $amount;
|
||||
|
||||
|
|
@ -1325,7 +1326,7 @@ if ($source == 'contractline') {
|
|||
|
||||
$qty = 1;
|
||||
if (GETPOST('qty')) {
|
||||
$qty = GETPOST('qty');
|
||||
$qty = price2num(GETPOST('qty', 'alpha'), 'MS');
|
||||
}
|
||||
|
||||
// Creditor
|
||||
|
|
|
|||
|
|
@ -386,7 +386,7 @@ if ($ispaymentok) {
|
|||
$adht = new AdherentType($db);
|
||||
$object = new Adherent($db);
|
||||
|
||||
$result1 = $object->fetch($tmptag['MEM']);
|
||||
$result1 = $object->fetch((int) $tmptag['MEM']);
|
||||
$result2 = $adht->fetch($object->typeid);
|
||||
|
||||
dol_syslog("We have to process member with id=".$tmptag['MEM']." result1=".$result1." result2=".$result2, LOG_DEBUG, 0, '_payment');
|
||||
|
|
@ -416,14 +416,41 @@ if ($ispaymentok) {
|
|||
|
||||
// Do action only if $FinalPaymentAmt is set (session variable is cleaned after this page to avoid duplicate actions when page is POST a second time)
|
||||
if (!empty($FinalPaymentAmt) && $paymentTypeId > 0) {
|
||||
$result = ($object->status == $object::STATUS_EXCLUDED) ? -1 : $object->validate($user); // if membre is excluded (status == -2) the new validation is not possible
|
||||
if ($result < 0 || empty($object->datevalid)) {
|
||||
$error++;
|
||||
$errmsg = $object->error;
|
||||
$postactionmessages[] = $errmsg;
|
||||
$postactionmessages = array_merge($postactionmessages, $object->errors);
|
||||
$ispostactionok = -1;
|
||||
dol_syslog("Failed to validate member: ".$errmsg, LOG_ERR, 0, '_payment');
|
||||
// Security protection:
|
||||
if (empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT)) { // If we didn't allow members to choose their membership amount
|
||||
if ($object->status == $object::STATUS_DRAFT) { // If the member is not yet validated, we check that the amount is the same as expected.
|
||||
$typeid = $object->typeid;
|
||||
|
||||
// Set amount for the subscription:
|
||||
// - First check the amount of the member type.
|
||||
$amountbytype = $adht->amountByType(1); // Load the array of amount per type
|
||||
$amountexpected = empty($amountbytype[$typeid]) ? 0 : $amountbytype[$typeid];
|
||||
// - If not found, take the default amount
|
||||
if (empty($amountexpected) && !empty($conf->global->MEMBER_NEWFORM_AMOUNT)) {
|
||||
$amountexpected = $conf->global->MEMBER_NEWFORM_AMOUNT;
|
||||
}
|
||||
|
||||
if ($amountexpected && $amountexpected != $FinalPaymentAmt) {
|
||||
$error++;
|
||||
$errmsg = 'Value of FinalPayment ('.$FinalPaymentAmt.') differs from value expected for membership ('.$amountexpected.'). May be a hack to try to pay a different amount ?';
|
||||
$postactionmessages[] = $errmsg;
|
||||
$ispostactionok = -1;
|
||||
dol_syslog("Failed to validate member: ".$errmsg, LOG_ERR, 0, '_payment');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! $error) {
|
||||
// We validate the member (no effect if it is already validated)
|
||||
$result = ($object->status == $object::STATUS_EXCLUDED) ? -1 : $object->validate($user); // if membre is excluded (status == -2) the new validation is not possible
|
||||
if ($result < 0 || empty($object->datevalid)) {
|
||||
$error++;
|
||||
$errmsg = $object->error;
|
||||
$postactionmessages[] = $errmsg;
|
||||
$postactionmessages = array_merge($postactionmessages, $object->errors);
|
||||
$ispostactionok = -1;
|
||||
dol_syslog("Failed to validate member: ".$errmsg, LOG_ERR, 0, '_payment');
|
||||
}
|
||||
}
|
||||
|
||||
// Subscription informations
|
||||
|
|
@ -721,7 +748,7 @@ if ($ispaymentok) {
|
|||
// Record payment
|
||||
include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
||||
$object = new Facture($db);
|
||||
$result = $object->fetch($tmptag['INV']);
|
||||
$result = $object->fetch((int) $tmptag['INV']);
|
||||
if ($result) {
|
||||
$FinalPaymentAmt = $_SESSION["FinalPaymentAmt"];
|
||||
|
||||
|
|
@ -827,7 +854,7 @@ if ($ispaymentok) {
|
|||
} elseif (array_key_exists('ORD', $tmptag) && $tmptag['ORD'] > 0) {
|
||||
include_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php';
|
||||
$object = new Commande($db);
|
||||
$result = $object->fetch($tmptag['ORD']);
|
||||
$result = $object->fetch((int) $tmptag['ORD']);
|
||||
if ($result) {
|
||||
$FinalPaymentAmt = $_SESSION["FinalPaymentAmt"];
|
||||
|
||||
|
|
@ -932,7 +959,7 @@ if ($ispaymentok) {
|
|||
} elseif (array_key_exists('DON', $tmptag) && $tmptag['DON'] > 0) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
|
||||
$don = new Don($db);
|
||||
$result = $don->fetch($tmptag['DON']);
|
||||
$result = $don->fetch((int) $tmptag['DON']);
|
||||
if ($result) {
|
||||
$FinalPaymentAmt = $_SESSION["FinalPaymentAmt"];
|
||||
|
||||
|
|
@ -1141,7 +1168,7 @@ if ($ispaymentok) {
|
|||
if (!$error) {
|
||||
// Validating the attendee
|
||||
$attendeetovalidate = new ConferenceOrBoothAttendee($db);
|
||||
$resultattendee = $attendeetovalidate->fetch($tmptag['ATT']);
|
||||
$resultattendee = $attendeetovalidate->fetch((int) $tmptag['ATT']);
|
||||
if ($resultattendee < 0) {
|
||||
$error++;
|
||||
setEventMessages(null, $attendeetovalidate->errors, "errors");
|
||||
|
|
@ -1325,7 +1352,7 @@ if ($ispaymentok) {
|
|||
if (!$error) {
|
||||
// Putting the booth to "suggested" state
|
||||
$booth = new ConferenceOrBooth($db);
|
||||
$resultbooth = $booth->fetch($tmptag['BOO']);
|
||||
$resultbooth = $booth->fetch((int) $tmptag['BOO']);
|
||||
if ($resultbooth < 0) {
|
||||
$error++;
|
||||
setEventMessages(null, $booth->errors, "errors");
|
||||
|
|
@ -1490,12 +1517,12 @@ if ($ispaymentok) {
|
|||
$topic = '['.$appli.'] '.$companylangs->transnoentitiesnoconv("NewOnlinePaymentReceived");
|
||||
$content = "";
|
||||
if (array_key_exists('MEM', $tmptag)) {
|
||||
$url = $urlwithroot."/adherents/subscription.php?rowid=".$tmptag['MEM'];
|
||||
$url = $urlwithroot."/adherents/subscription.php?rowid=".((int) $tmptag['MEM']);
|
||||
$content .= '<strong>'.$companylangs->trans("PaymentSubscription")."</strong><br><br>\n";
|
||||
$content .= $companylangs->trans("MemberId").': <strong>'.$tmptag['MEM']."</strong><br>\n";
|
||||
$content .= $companylangs->trans("Link").': <a href="'.$url.'">'.$url.'</a>'."<br>\n";
|
||||
} elseif (array_key_exists('INV', $tmptag)) {
|
||||
$url = $urlwithroot."/compta/facture/card.php?id=".$tmptag['INV'];
|
||||
$url = $urlwithroot."/compta/facture/card.php?id=".((int) $tmptag['INV']);
|
||||
$content .= '<strong>'.$companylangs->trans("Payment")."</strong><br><br>\n";
|
||||
$content .= $companylangs->trans("InvoiceId").': <strong>'.$tmptag['INV']."</strong><br>\n";
|
||||
//$content.=$companylangs->trans("ThirdPartyId").': '.$tmptag['CUS']."<br>\n";
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user