2017-04-23 02:44:38 +02:00
< ? php
/* Copyright ( C ) 2001 - 2002 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2006 - 2013 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2012 Regis Houssin < regis . houssin @ inodbox . com >
2021-04-09 02:51:05 +02:00
* Copyright ( C ) 2021 Waël Almoman < info @ almoman . com >
2021-04-22 14:48:05 +02:00
* Copyright ( C ) 2021 Maxime Demarest < maxime @ indelog . fr >
2021-05-07 16:15:13 +02:00
* Copyright ( C ) 2021 Dorian Vabre < dorian . vabre @ gmail . com >
2017-04-23 02:44:38 +02:00
*
* 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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2017-04-23 02:44:38 +02:00
*/
/**
* \file htdocs / public / payment / paymentok . php
* \ingroup core
2021-09-08 01:41:59 +02:00
* \brief File to show page after a successful payment on a payment line system .
* The payment was already really recorded . So an error here must send warning to admin but must still infor user that payment is ok .
2017-04-23 02:44:38 +02:00
* This page is called by payment system with url provided to it completed with parameter TOKEN = xxx
2021-09-08 01:41:59 +02:00
* This token and session can be used to get more informations .
2017-04-23 02:44:38 +02:00
*/
2021-02-26 18:58:34 +01:00
if ( ! defined ( 'NOLOGIN' )) {
define ( " NOLOGIN " , 1 ); // This means this output page does not require to be logged.
}
if ( ! defined ( 'NOCSRFCHECK' )) {
define ( " NOCSRFCHECK " , 1 ); // We accept to go on this page from external web site.
}
if ( ! defined ( 'NOIPCHECK' )) {
define ( 'NOIPCHECK' , '1' ); // Do not check IP defined into conf $dolibarr_main_restrict_ip
}
if ( ! defined ( 'NOBROWSERNOTIF' )) {
define ( 'NOBROWSERNOTIF' , '1' );
}
2017-04-23 02:44:38 +02:00
// For MultiCompany module.
// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php
2020-10-23 20:08:35 +02:00
// TODO This should be useless. Because entity must be retrieve from object ref and not from url.
2020-04-10 10:59:32 +02:00
$entity = ( ! empty ( $_GET [ 'e' ]) ? ( int ) $_GET [ 'e' ] : ( ! empty ( $_POST [ 'e' ]) ? ( int ) $_POST [ 'e' ] : 1 ));
2021-02-26 18:58:34 +01:00
if ( is_numeric ( $entity )) {
define ( " DOLENTITY " , $entity );
}
2017-04-23 02:44:38 +02:00
require '../../main.inc.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php' ;
2017-05-13 14:03:09 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/payments.lib.php' ;
2021-04-21 15:31:14 +02:00
require_once DOL_DOCUMENT_ROOT . '/eventorganization/class/conferenceorboothattendee.class.php' ;
2021-05-07 13:02:34 +02:00
require_once DOL_DOCUMENT_ROOT . '/eventorganization/class/conferenceorbooth.class.php' ;
2017-05-13 14:03:09 +02:00
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> paypal -> enabled )) {
2017-04-23 02:44:38 +02:00
require_once DOL_DOCUMENT_ROOT . '/paypal/lib/paypal.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/paypal/lib/paypalfunctions.lib.php' ;
}
2020-04-10 10:59:32 +02:00
$langs -> loadLangs ( array ( " main " , " other " , " dict " , " bills " , " companies " , " paybox " , " paypal " ));
2017-04-23 02:44:38 +02:00
// Clean parameters
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> paypal -> enabled )) {
2020-04-10 10:59:32 +02:00
$PAYPAL_API_USER = " " ;
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> global -> PAYPAL_API_USER )) {
$PAYPAL_API_USER = $conf -> global -> PAYPAL_API_USER ;
}
2020-04-10 10:59:32 +02:00
$PAYPAL_API_PASSWORD = " " ;
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> global -> PAYPAL_API_PASSWORD )) {
$PAYPAL_API_PASSWORD = $conf -> global -> PAYPAL_API_PASSWORD ;
}
2020-04-10 10:59:32 +02:00
$PAYPAL_API_SIGNATURE = " " ;
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> global -> PAYPAL_API_SIGNATURE )) {
$PAYPAL_API_SIGNATURE = $conf -> global -> PAYPAL_API_SIGNATURE ;
}
2020-04-10 10:59:32 +02:00
$PAYPAL_API_SANDBOX = " " ;
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> global -> PAYPAL_API_SANDBOX )) {
$PAYPAL_API_SANDBOX = $conf -> global -> PAYPAL_API_SANDBOX ;
}
2020-04-10 10:59:32 +02:00
$PAYPAL_API_OK = " " ;
2021-02-26 18:58:34 +01:00
if ( $urlok ) {
$PAYPAL_API_OK = $urlok ;
}
2020-04-10 10:59:32 +02:00
$PAYPAL_API_KO = " " ;
2021-02-26 18:58:34 +01:00
if ( $urlko ) {
$PAYPAL_API_KO = $urlko ;
}
2020-04-10 10:59:32 +02:00
2020-09-07 10:18:17 +02:00
$PAYPALTOKEN = GETPOST ( 'TOKEN' );
2021-02-26 18:58:34 +01:00
if ( empty ( $PAYPALTOKEN )) {
$PAYPALTOKEN = GETPOST ( 'token' );
}
2020-09-07 10:18:17 +02:00
$PAYPALPAYERID = GETPOST ( 'PAYERID' );
2021-02-26 18:58:34 +01:00
if ( empty ( $PAYPALPAYERID )) {
$PAYPALPAYERID = GETPOST ( 'PayerID' );
}
2017-04-23 02:44:38 +02:00
}
2020-04-10 10:59:32 +02:00
$FULLTAG = GETPOST ( 'FULLTAG' );
2021-02-26 18:58:34 +01:00
if ( empty ( $FULLTAG )) {
$FULLTAG = GETPOST ( 'fulltag' );
}
2021-04-09 02:23:22 +02:00
$source = GETPOST ( 's' , 'alpha' ) ? GETPOST ( 's' , 'alpha' ) : GETPOST ( 'source' , 'alpha' );
2020-04-10 10:59:32 +02:00
$ref = GETPOST ( 'ref' );
2017-04-23 02:44:38 +02:00
2020-04-10 10:59:32 +02:00
$suffix = GETPOST ( " suffix " , 'aZ09' );
2021-04-09 02:23:22 +02:00
$membertypeid = GETPOST ( " membertypeid " , 'int' );
2017-09-01 18:49:55 +02:00
2021-04-23 10:32:28 +02:00
2017-05-13 15:19:35 +02:00
// Detect $paymentmethod
2020-04-10 10:59:32 +02:00
$paymentmethod = '' ;
2020-03-13 03:28:13 +01:00
$reg = array ();
2021-02-26 18:58:34 +01:00
if ( preg_match ( '/PM=([^\.]+)/' , $FULLTAG , $reg )) {
2020-09-07 10:18:17 +02:00
$paymentmethod = $reg [ 1 ];
2017-05-13 15:19:35 +02:00
}
2021-02-26 18:58:34 +01:00
if ( empty ( $paymentmethod )) {
2020-09-07 10:18:17 +02:00
dol_print_error ( null , 'The back url does not contains a parameter fulltag that should help us to find the payment method used' );
exit ;
2017-05-13 15:19:35 +02:00
}
2018-09-01 16:51:40 +02:00
dol_syslog ( " ***** paymentok.php is called paymentmethod= " . $paymentmethod . " FULLTAG= " . $FULLTAG . " REQUEST_URI= " . $_SERVER [ " REQUEST_URI " ], LOG_DEBUG , 0 , '_payment' );
2017-05-13 15:19:35 +02:00
2020-04-10 10:59:32 +02:00
$validpaymentmethod = array ();
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> paypal -> enabled )) {
$validpaymentmethod [ 'paypal' ] = 'paypal' ;
}
if ( ! empty ( $conf -> paybox -> enabled )) {
$validpaymentmethod [ 'paybox' ] = 'paybox' ;
}
if ( ! empty ( $conf -> stripe -> enabled )) {
$validpaymentmethod [ 'stripe' ] = 'stripe' ;
}
2017-04-23 02:44:38 +02:00
// Security check
2021-02-26 18:58:34 +01:00
if ( empty ( $validpaymentmethod )) {
accessforbidden ( '' , 0 , 0 , 1 );
}
2017-04-23 02:44:38 +02:00
2017-05-13 15:19:35 +02:00
$ispaymentok = false ;
2017-05-13 14:03:09 +02:00
// If payment is ok
2020-04-10 10:59:32 +02:00
$PAYMENTSTATUS = $TRANSACTIONID = $TAXAMT = $NOTE = '' ;
2017-05-13 14:03:09 +02:00
// If payment is ko
2020-04-10 10:59:32 +02:00
$ErrorCode = $ErrorShortMsg = $ErrorLongMsg = $ErrorSeverityCode = '' ;
2017-05-13 14:03:09 +02:00
2017-05-13 15:19:35 +02:00
2020-04-10 10:59:32 +02:00
$object = new stdClass (); // For triggers
2017-05-13 21:10:56 +02:00
2020-01-01 12:47:01 +01:00
$error = 0 ;
2017-05-13 14:03:09 +02:00
2021-04-23 10:32:28 +02:00
2017-04-23 02:44:38 +02:00
/*
* Actions
*/
/*
* View
*/
2018-03-04 19:39:46 +01:00
$now = dol_now ();
2020-04-10 10:59:32 +02:00
dol_syslog ( " Callback url when a payment was done. query_string= " . ( dol_escape_htmltag ( $_SERVER [ " QUERY_STRING " ]) ? dol_escape_htmltag ( $_SERVER [ " QUERY_STRING " ]) : '' ) . " script_uri= " . ( dol_escape_htmltag ( $_SERVER [ " SCRIPT_URI " ]) ? dol_escape_htmltag ( $_SERVER [ " SCRIPT_URI " ]) : '' ), LOG_DEBUG , 0 , '_payment' );
2017-04-23 02:44:38 +02:00
$tracepost = " " ;
2021-02-26 18:58:34 +01:00
foreach ( $_POST as $k => $v ) {
$tracepost .= " { $k } - { $v } \n " ;
}
2017-04-23 02:44:38 +02:00
dol_syslog ( " POST= " . $tracepost , LOG_DEBUG , 0 , '_payment' );
2020-04-10 10:59:32 +02:00
$head = '' ;
2021-02-26 18:58:34 +01:00
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 " ;
}
2017-04-23 02:44:38 +02:00
2020-04-10 10:59:32 +02:00
$conf -> dol_hide_topmenu = 1 ;
$conf -> dol_hide_leftmenu = 1 ;
2017-05-13 14:03:09 +02:00
2020-03-13 03:28:13 +01:00
$replacemainarea = ( empty ( $conf -> dol_hide_leftmenu ) ? '<div>' : '' ) . '<div>' ;
llxHeader ( $head , $langs -> trans ( " PaymentForm " ), '' , '' , 0 , 0 , '' , '' , '' , 'onlinepaymentbody' , $replacemainarea );
2017-04-23 02:44:38 +02:00
// Show message
print '<span id="dolpaymentspan"></span>' . " \n " ;
2020-03-13 03:28:13 +01:00
print '<div id="dolpaymentdiv" class="center">' . " \n " ;
2017-04-23 02:44:38 +02:00
2017-05-13 14:03:09 +02:00
2017-09-01 18:49:55 +02:00
// Show logo (search order: logo defined by PAYMENT_LOGO_suffix, then PAYMENT_LOGO, then small company logo, large company logo, theme logo, common logo)
// Define logo and logosmall
2020-03-13 03:28:13 +01:00
$logosmall = $mysoc -> logo_small ;
$logo = $mysoc -> logo ;
$paramlogo = 'ONLINE_PAYMENT_LOGO_' . $suffix ;
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> global -> $paramlogo )) {
$logosmall = $conf -> global -> $paramlogo ;
} elseif ( ! empty ( $conf -> global -> ONLINE_PAYMENT_LOGO )) {
$logosmall = $conf -> global -> ONLINE_PAYMENT_LOGO ;
}
2017-09-01 18:49:55 +02:00
//print '<!-- Show logo (logosmall='.$logosmall.' logo='.$logo.') -->'."\n";
// Define urllogo
2020-03-13 03:28:13 +01:00
$urllogo = '' ;
$urllogofull = '' ;
2021-02-26 18:58:34 +01:00
if ( ! empty ( $logosmall ) && is_readable ( $conf -> mycompany -> dir_output . '/logos/thumbs/' . $logosmall )) {
2020-03-13 03:28:13 +01:00
$urllogo = DOL_URL_ROOT . '/viewimage.php?modulepart=mycompany&entity=' . $conf -> entity . '&file=' . urlencode ( 'logos/thumbs/' . $logosmall );
$urllogofull = $dolibarr_main_url_root . '/viewimage.php?modulepart=mycompany&entity=' . $conf -> entity . '&file=' . urlencode ( 'logos/thumbs/' . $logosmall );
2021-02-26 18:58:34 +01:00
} elseif ( ! empty ( $logo ) && is_readable ( $conf -> mycompany -> dir_output . '/logos/' . $logo )) {
2020-03-13 03:28:13 +01:00
$urllogo = DOL_URL_ROOT . '/viewimage.php?modulepart=mycompany&entity=' . $conf -> entity . '&file=' . urlencode ( 'logos/' . $logo );
$urllogofull = $dolibarr_main_url_root . '/viewimage.php?modulepart=mycompany&entity=' . $conf -> entity . '&file=' . urlencode ( 'logos/' . $logo );
2017-09-01 18:49:55 +02:00
}
2020-03-13 03:28:13 +01:00
2017-09-01 18:49:55 +02:00
// Output html code for logo
2021-02-26 18:58:34 +01:00
if ( $urllogo ) {
2020-03-13 03:28:13 +01:00
print '<div class="backgreypublicpayment">' ;
print '<div class="logopublicpayment">' ;
print '<img id="dolpaymentlogo" src="' . $urllogo . '"' ;
print '>' ;
print '</div>' ;
if ( empty ( $conf -> global -> MAIN_HIDE_POWERED_BY )) {
2020-11-14 18:11:46 +01:00
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>' ;
2020-03-13 03:28:13 +01:00
}
print '</div>' ;
2017-09-01 18:49:55 +02:00
}
2021-06-19 19:45:13 +02:00
if ( ! empty ( $conf -> global -> MAIN_IMAGE_PUBLIC_PAYMENT )) {
print '<div class="backimagepublicpayment">' ;
2021-06-19 20:05:25 +02:00
print '<img id="idMAIN_IMAGE_PUBLIC_PAYMENT" src="' . $conf -> global -> MAIN_IMAGE_PUBLIC_PAYMENT . '">' ;
2021-06-19 19:45:13 +02:00
print '</div>' ;
}
2017-09-01 18:49:55 +02:00
2020-08-04 15:16:11 +02:00
print '<br><br><br>' ;
2020-03-13 03:28:13 +01:00
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> paypal -> enabled )) {
if ( $paymentmethod == 'paypal' ) { // We call this page only if payment is ok on payment system
if ( $PAYPALTOKEN ) {
2020-09-07 10:18:17 +02:00
// Get on url call
$onlinetoken = $PAYPALTOKEN ;
$fulltag = $FULLTAG ;
$payerID = $PAYPALPAYERID ;
// Set by newpayment.php
$currencyCodeType = $_SESSION [ 'currencyCodeType' ];
$FinalPaymentAmt = $_SESSION [ " FinalPaymentAmt " ];
2022-04-08 15:15:55 +02:00
$paymentType = $_SESSION [ 'PaymentType' ]; // Value can be 'Mark', 'Sole', 'Sale' for example
2020-09-07 10:18:17 +02:00
// From env
$ipaddress = $_SESSION [ 'ipaddress' ];
2017-08-31 02:34:07 +02:00
2018-09-01 16:51:40 +02:00
dol_syslog ( " Call paymentok with token= " . $onlinetoken . " paymentType= " . $paymentType . " currencyCodeType= " . $currencyCodeType . " payerID= " . $payerID . " ipaddress= " . $ipaddress . " FinalPaymentAmt= " . $FinalPaymentAmt . " fulltag= " . $fulltag , LOG_DEBUG , 0 , '_payment' );
2017-08-31 02:34:07 +02:00
// Validate record
2021-02-26 18:58:34 +01:00
if ( ! empty ( $paymentType )) {
2020-09-07 10:18:17 +02:00
dol_syslog ( " We call GetExpressCheckoutDetails " , LOG_DEBUG , 0 , '_payment' );
$resArray = getDetails ( $onlinetoken );
//var_dump($resarray);
$ack = strtoupper ( $resArray [ " ACK " ]);
2021-02-26 18:58:34 +01:00
if ( $ack == " SUCCESS " || $ack == " SUCCESSWITHWARNING " ) {
2020-09-07 10:18:17 +02:00
// Nothing to do
dol_syslog ( " Call to GetExpressCheckoutDetails return " . $ack , LOG_DEBUG , 0 , '_payment' );
} else {
dol_syslog ( " Call to GetExpressCheckoutDetails return error: " . json_encode ( $resArray ), LOG_WARNING , '_payment' );
}
dol_syslog ( " We call DoExpressCheckoutPayment token= " . $onlinetoken . " paymentType= " . $paymentType . " currencyCodeType= " . $currencyCodeType . " payerID= " . $payerID . " ipaddress= " . $ipaddress . " FinalPaymentAmt= " . $FinalPaymentAmt . " fulltag= " . $fulltag , LOG_DEBUG , 0 , '_payment' );
$resArray2 = confirmPayment ( $onlinetoken , $paymentType , $currencyCodeType , $payerID , $ipaddress , $FinalPaymentAmt , $fulltag );
//var_dump($resarray);
$ack = strtoupper ( $resArray2 [ " ACK " ]);
2021-02-26 18:58:34 +01:00
if ( $ack == " SUCCESS " || $ack == " SUCCESSWITHWARNING " ) {
2020-09-07 10:18:17 +02:00
dol_syslog ( " Call to GetExpressCheckoutDetails return " . $ack , LOG_DEBUG , 0 , '_payment' );
$object -> source = $source ;
$object -> ref = $ref ;
$object -> payerID = $payerID ;
$object -> fulltag = $fulltag ;
$object -> resArray = $resArray2 ;
// resArray was built from a string like that
// TOKEN=EC%2d1NJ057703V9359028&TIMESTAMP=2010%2d11%2d01T11%3a40%3a13Z&CORRELATIONID=1efa8c6a36bd8&ACK=Success&VERSION=56&BUILD=1553277&TRANSACTIONID=9B994597K9921420R&TRANSACTIONTYPE=expresscheckout&PAYMENTTYPE=instant&ORDERTIME=2010%2d11%2d01T11%3a40%3a12Z&AMT=155%2e57&FEEAMT=5%2e54&TAXAMT=0%2e00&CURRENCYCODE=EUR&PAYMENTSTATUS=Completed&PENDINGREASON=None&REASONCODE=None
$PAYMENTSTATUS = urldecode ( $resArray2 [ " PAYMENTSTATUS " ]); // Should contains 'Completed'
$TRANSACTIONID = urldecode ( $resArray2 [ " TRANSACTIONID " ]);
$TAXAMT = urldecode ( $resArray2 [ " TAXAMT " ]);
$NOTE = urldecode ( $resArray2 [ " NOTE " ]);
$ispaymentok = true ;
} else {
dol_syslog ( " Call to DoExpressCheckoutPayment return error: " . json_encode ( $resArray2 ), LOG_WARNING , 0 , '_payment' );
//Display a user friendly Error on the page using any of the following error information returned by PayPal
$ErrorCode = urldecode ( $resArray2 [ " L_ERRORCODE0 " ]);
$ErrorShortMsg = urldecode ( $resArray2 [ " L_SHORTMESSAGE0 " ]);
$ErrorLongMsg = urldecode ( $resArray2 [ " L_LONGMESSAGE0 " ]);
$ErrorSeverityCode = urldecode ( $resArray2 [ " L_SEVERITYCODE0 " ]);
}
} else {
2021-08-21 12:37:28 +02:00
$ErrorCode = " SESSIONEXPIRED " ;
$ErrorLongMsg = " Session expired. Can't retreive PaymentType. Payment has not been validated. " ;
$ErrorShortMsg = " Session expired " ;
dol_syslog ( $ErrorLongMsg , LOG_WARNING , 0 , '_payment' );
2020-09-07 10:18:17 +02:00
dol_print_error ( '' , 'Session expired' );
}
2020-05-21 15:05:19 +02:00
} else {
2021-08-21 12:37:28 +02:00
$ErrorCode = " PAYPALTOKENNOTDEFINED " ;
$ErrorLongMsg = " The parameter PAYPALTOKEN was not defined. Payment has not been validated. " ;
$ErrorShortMsg = " Parameter PAYPALTOKEN not defined " ;
dol_syslog ( $ErrorLongMsg , LOG_WARNING , 0 , '_payment' );
dol_print_error ( '' , 'PAYPALTOKEN not defined' );
2017-08-31 02:34:07 +02:00
}
2017-05-13 14:03:09 +02:00
}
}
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> paybox -> enabled )) {
if ( $paymentmethod == 'paybox' ) {
2022-04-08 15:15:55 +02:00
// TODO Add a check to validate that payment is ok.
2021-02-26 18:58:34 +01:00
$ispaymentok = true ; // We call this page only if payment is ok on payment system
}
2017-08-31 02:34:07 +02:00
}
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> stripe -> enabled )) {
if ( $paymentmethod == 'stripe' ) {
2022-04-08 15:15:55 +02:00
// TODO Add a check to validate that payment is ok. We can request Stripe with payment_intent and payment_intent_client_secret
2021-02-26 18:58:34 +01:00
$ispaymentok = true ; // We call this page only if payment is ok on payment system
}
2017-08-31 02:34:07 +02:00
}
2017-05-13 14:03:09 +02:00
2018-03-04 19:39:46 +01:00
// If data not provided from back url, search them into the session env
2021-02-26 18:58:34 +01:00
if ( empty ( $ipaddress )) {
$ipaddress = $_SESSION [ 'ipaddress' ];
}
if ( empty ( $TRANSACTIONID )) {
$TRANSACTIONID = $_SESSION [ 'TRANSACTIONID' ];
2022-04-08 15:15:55 +02:00
if ( empty ( $TRANSACTIONID ) && GETPOST ( 'payment_intent' , 'alphanohtml' )) {
// For the case we use STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION = 2
$TRANSACTIONID = GETPOST ( 'payment_intent' , 'alphanohtml' );
}
2021-02-26 18:58:34 +01:00
}
if ( empty ( $FinalPaymentAmt )) {
$FinalPaymentAmt = $_SESSION [ " FinalPaymentAmt " ];
}
2021-11-27 19:04:39 +01:00
if ( empty ( $currencyCodeType )) {
$currencyCodeType = $_SESSION [ 'currencyCodeType' ];
}
2022-04-08 15:15:55 +02:00
// Seems used onyl by Paypal
if ( empty ( $paymentType )) {
$paymentType = $_SESSION [ " paymentType " ];
}
2018-03-04 19:39:46 +01:00
2020-04-10 10:59:32 +02:00
$fulltag = $FULLTAG ;
$tmptag = dolExplodeIntoArray ( $fulltag , '.' , '=' );
2018-03-04 19:39:46 +01:00
2019-05-03 02:22:27 +02:00
dol_syslog ( " ispaymentok= " . $ispaymentok . " tmptag= " . var_export ( $tmptag , true ), LOG_DEBUG , 0 , '_payment' );
2018-09-01 16:51:40 +02:00
2018-03-04 19:39:46 +01:00
// Make complementary actions
$ispostactionok = 0 ;
$postactionmessages = array ();
2021-02-26 18:58:34 +01:00
if ( $ispaymentok ) {
2018-03-05 21:46:24 +01:00
// Set permission for the anonymous user
2021-02-26 18:58:34 +01:00
if ( empty ( $user -> rights -> societe )) {
$user -> rights -> societe = new stdClass ();
}
if ( empty ( $user -> rights -> facture )) {
$user -> rights -> facture = new stdClass ();
2022-07-30 15:32:18 +02:00
$user -> rights -> facture -> invoice_advance = new stdClass ();
2021-02-26 18:58:34 +01:00
}
if ( empty ( $user -> rights -> adherent )) {
2021-04-09 02:28:07 +02:00
$user -> rights -> adherent = new stdClass ();
2022-08-02 21:05:33 +02:00
$user -> rights -> adherent -> cotisation = new stdClass ();
2021-02-26 18:58:34 +01:00
}
2018-03-05 21:46:24 +01:00
$user -> rights -> societe -> creer = 1 ;
$user -> rights -> facture -> creer = 1 ;
2022-07-30 15:32:18 +02:00
$user -> rights -> facture -> invoice_advance -> validate = 1 ;
2018-03-05 21:46:24 +01:00
$user -> rights -> adherent -> cotisation -> creer = 1 ;
2021-02-26 18:58:34 +01:00
if ( array_key_exists ( 'MEM' , $tmptag ) && $tmptag [ 'MEM' ] > 0 ) {
2018-03-23 23:59:35 +01:00
// Validate member
// Create subscription
// Create complementary actions (this include creation of thirdparty)
// Send confirmation email
2020-04-10 10:59:32 +02:00
$defaultdelay = 1 ;
$defaultdelayunit = 'y' ;
2018-03-05 21:46:24 +01:00
2018-03-04 19:39:46 +01:00
// Record subscription
include_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php' ;
2018-03-05 21:46:24 +01:00
include_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent_type.class.php' ;
include_once DOL_DOCUMENT_ROOT . '/adherents/class/subscription.class.php' ;
$adht = new AdherentType ( $db );
$object = new Adherent ( $db );
2021-11-27 17:19:16 +01:00
$result1 = $object -> fetch (( int ) $tmptag [ 'MEM' ]);
2018-03-05 21:46:24 +01:00
$result2 = $adht -> fetch ( $object -> typeid );
2020-01-01 12:47:01 +01:00
dol_syslog ( " We have to process member with id= " . $tmptag [ 'MEM' ] . " result1= " . $result1 . " result2= " . $result2 , LOG_DEBUG , 0 , '_payment' );
2021-02-26 18:58:34 +01:00
if ( $result1 > 0 && $result2 > 0 ) {
2018-03-05 21:46:24 +01:00
$paymentTypeId = 0 ;
2021-02-26 18:58:34 +01:00
if ( $paymentmethod == 'paybox' ) {
$paymentTypeId = $conf -> global -> PAYBOX_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'paypal' ) {
$paymentTypeId = $conf -> global -> PAYPAL_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'stripe' ) {
$paymentTypeId = $conf -> global -> STRIPE_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( empty ( $paymentTypeId )) {
2022-03-02 15:13:17 +01:00
dol_syslog ( " paymentType = " . $paymentType , LOG_DEBUG , 0 , '_payment' );
2021-02-26 18:58:34 +01:00
if ( empty ( $paymentType )) {
$paymentType = 'CB' ;
}
2022-03-02 15:13:17 +01:00
// May return nothing when paymentType means nothing
// (for example when paymentType is 'Mark', 'Sole', 'Sale', for paypal)
2018-03-05 21:46:24 +01:00
$paymentTypeId = dol_getIdFromCode ( $db , $paymentType , 'c_paiement' , 'code' , 'id' , 1 );
2022-03-02 15:13:17 +01:00
// If previous line has returned nothing, we force to get the ID of payment of Credit Card (hard coded code 'CB').
if ( empty ( $paymentTypeId ) || $paymentTypeId < 0 ) {
$paymentTypeId = dol_getIdFromCode ( $db , 'CB' , 'c_paiement' , 'code' , 'id' , 1 );
}
2018-03-05 21:46:24 +01:00
}
2022-04-08 15:15:55 +02:00
dol_syslog ( " FinalPaymentAmt= " . $FinalPaymentAmt . " paymentTypeId= " . $paymentTypeId . " currencyCodeType= " . $currencyCodeType , LOG_DEBUG , 0 , '_payment' );
2018-03-04 19:39:46 +01:00
2018-03-05 21:46:24 +01:00
// 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)
2021-02-26 18:58:34 +01:00
if ( ! empty ( $FinalPaymentAmt ) && $paymentTypeId > 0 ) {
2021-11-27 17:19:16 +01:00
// Security protection:
2022-02-18 12:36:05 +01:00
if ( empty ( $conf -> global -> MEMBER_NEWFORM_EDITAMOUNT )) { // If we didn't allow members to choose their membership amount (if free amount is allowed, no need to check)
2021-11-27 17:19:16 +01:00
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 ;
2021-11-27 19:04:39 +01:00
dol_syslog ( " Failed to validate member (bad amount check): " . $errmsg , LOG_ERR , 0 , '_payment' );
2021-11-27 17:19:16 +01:00
}
}
}
2022-02-18 12:36:05 +01:00
// Security protection:
if ( ! empty ( $conf -> global -> MEMBER_MIN_AMOUNT )) {
if ( $FinalPaymentAmt < $conf -> global -> MEMBER_MIN_AMOUNT ) {
$error ++ ;
$errmsg = 'Value of FinalPayment (' . $FinalPaymentAmt . ') is lower than the minimum allowed (' . $conf -> global -> MEMBER_MIN_AMOUNT . '). May be a hack to try to pay a different amount ?' ;
$postactionmessages [] = $errmsg ;
$ispostactionok = - 1 ;
dol_syslog ( " Failed to validate member (amount lower than minimum): " . $errmsg , LOG_ERR , 0 , '_payment' );
}
}
2021-11-27 18:29:31 +01:00
// Security protection:
2021-11-27 19:04:39 +01:00
if ( $currencyCodeType && $currencyCodeType != $conf -> currency ) { // Check that currency is the good one
$error ++ ;
$errmsg = 'Value of currencyCodeType (' . $currencyCodeType . ') differs from value expected for membership (' . $conf -> currency . '). May be a hack to try to pay a different amount ?' ;
$postactionmessages [] = $errmsg ;
$ispostactionok = - 1 ;
dol_syslog ( " Failed to validate member (bad currency check): " . $errmsg , LOG_ERR , 0 , '_payment' );
}
2021-11-27 18:29:31 +01:00
2021-11-27 17:19:16 +01:00
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' );
}
2018-03-23 20:45:35 +01:00
}
2018-03-05 21:46:24 +01:00
// Subscription informations
2020-04-10 10:59:32 +02:00
$datesubscription = $object -> datevalid ;
2021-02-26 18:58:34 +01:00
if ( $object -> datefin > 0 ) {
2020-04-10 10:59:32 +02:00
$datesubscription = dol_time_plus_duree ( $object -> datefin , 1 , 'd' );
2018-03-05 21:46:24 +01:00
}
2018-03-23 20:45:35 +01:00
$datesubend = null ;
2021-02-26 18:58:34 +01:00
if ( $datesubscription && $defaultdelay && $defaultdelayunit ) {
2021-04-20 23:54:33 +02:00
$datesubend = dol_time_plus_duree ( $datesubscription , $defaultdelay , $defaultdelayunit );
// the new end date of subscription must be in futur
2021-04-27 20:14:03 +02:00
while ( $datesubend < $now ) {
2021-04-20 23:54:33 +02:00
$datesubend = dol_time_plus_duree ( $datesubend , $defaultdelay , $defaultdelayunit );
$datesubscription = dol_time_plus_duree ( $datesubscription , $defaultdelay , $defaultdelayunit );
}
$datesubend = dol_time_plus_duree ( $datesubend , - 1 , 'd' );
2021-02-26 18:58:34 +01:00
}
2018-03-23 20:45:35 +01:00
2020-04-10 10:59:32 +02:00
$paymentdate = $now ;
2018-03-05 21:46:24 +01:00
$amount = $FinalPaymentAmt ;
2020-04-10 10:59:32 +02:00
$label = 'Online subscription ' . dol_print_date ( $now , 'standard' ) . ' using ' . $paymentmethod . ' from ' . $ipaddress . ' - Transaction ID = ' . $TRANSACTIONID ;
2018-03-05 21:46:24 +01:00
// Payment informations
$accountid = 0 ;
2021-02-26 18:58:34 +01:00
if ( $paymentmethod == 'paybox' ) {
$accountid = $conf -> global -> PAYBOX_BANK_ACCOUNT_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'paypal' ) {
$accountid = $conf -> global -> PAYPAL_BANK_ACCOUNT_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'stripe' ) {
$accountid = $conf -> global -> STRIPE_BANK_ACCOUNT_FOR_PAYMENTS ;
}
if ( $accountid < 0 ) {
2018-03-23 20:45:35 +01:00
$error ++ ;
2020-04-10 10:59:32 +02:00
$errmsg = 'Setup of bank account to use for payment is not correctly done for payment method ' . $paymentmethod ;
2018-03-23 20:45:35 +01:00
$postactionmessages [] = $errmsg ;
$ispostactionok = - 1 ;
2020-01-01 12:47:01 +01:00
dol_syslog ( " Failed to get the bank account to record payment: " . $errmsg , LOG_ERR , 0 , '_payment' );
2018-03-23 20:45:35 +01:00
}
2022-04-08 15:15:55 +02:00
$operation = dol_getIdFromCode ( $db , $paymentTypeId , 'c_paiement' , 'id' , 'code' , 1 ); // Payment mode code returned from payment mode id
2020-04-10 10:59:32 +02:00
$num_chq = '' ;
$emetteur_nom = '' ;
$emetteur_banque = '' ;
2018-03-05 21:46:24 +01:00
// Define default choice for complementary actions
2020-04-10 10:59:32 +02:00
$option = '' ;
2022-06-11 09:46:28 +02:00
if ( ! empty ( $conf -> global -> ADHERENT_BANK_USE ) && $conf -> global -> ADHERENT_BANK_USE == 'bankviainvoice' && ! empty ( $conf -> banque -> enabled ) && ! empty ( $conf -> societe -> enabled ) && isModEnabled ( 'facture' )) {
2021-02-26 18:58:34 +01:00
$option = 'bankviainvoice' ;
} elseif ( ! empty ( $conf -> global -> ADHERENT_BANK_USE ) && $conf -> global -> ADHERENT_BANK_USE == 'bankdirect' && ! empty ( $conf -> banque -> enabled )) {
$option = 'bankdirect' ;
2022-06-11 09:46:28 +02:00
} elseif ( ! empty ( $conf -> global -> ADHERENT_BANK_USE ) && $conf -> global -> ADHERENT_BANK_USE == 'invoiceonly' && ! empty ( $conf -> banque -> enabled ) && ! empty ( $conf -> societe -> enabled ) && isModEnabled ( 'facture' )) {
2021-02-26 18:58:34 +01:00
$option = 'invoiceonly' ;
}
if ( empty ( $option )) {
$option = 'none' ;
}
2018-03-05 21:46:24 +01:00
$sendalsoemail = 1 ;
// Record the subscription then complementary actions
$db -> begin ();
// Create subscription
2021-02-26 18:58:34 +01:00
if ( ! $error ) {
2018-09-01 16:51:40 +02:00
dol_syslog ( " Call ->subscription to create subscription " , LOG_DEBUG , 0 , '_payment' );
2021-04-09 02:23:22 +02:00
$crowid = $object -> subscription ( $datesubscription , $amount , $accountid , $operation , $label , $num_chq , $emetteur_nom , $emetteur_banque , $datesubend , $membertypeid );
2021-02-26 18:58:34 +01:00
if ( $crowid <= 0 ) {
2018-03-23 20:45:35 +01:00
$error ++ ;
2020-04-10 10:59:32 +02:00
$errmsg = $object -> error ;
2018-03-23 20:45:35 +01:00
$postactionmessages [] = $errmsg ;
$ispostactionok = - 1 ;
2020-05-21 15:05:19 +02:00
} else {
2021-01-21 11:50:15 +01:00
$postactionmessages [] = 'Subscription created (id=' . $crowid . ')' ;
2020-04-10 10:59:32 +02:00
$ispostactionok = 1 ;
2018-03-23 20:45:35 +01:00
}
2018-03-05 21:46:24 +01:00
}
2021-02-26 18:58:34 +01:00
if ( ! $error ) {
2018-09-01 17:27:14 +02:00
dol_syslog ( " Call ->subscriptionComplementaryActions option= " . $option , LOG_DEBUG , 0 , '_payment' );
2018-09-01 16:51:40 +02:00
2020-04-10 10:59:32 +02:00
$autocreatethirdparty = 1 ; // will create thirdparty if member not yet linked to a thirdparty
2018-03-23 23:59:35 +01:00
2021-04-22 18:01:52 +02:00
$result = $object -> subscriptionComplementaryActions ( $crowid , $option , $accountid , $datesubscription , $paymentdate , $operation , $label , $amount , $num_chq , $emetteur_nom , $emetteur_banque , $autocreatethirdparty , $TRANSACTIONID , $service );
2021-02-26 18:58:34 +01:00
if ( $result < 0 ) {
2018-09-01 17:27:14 +02:00
dol_syslog ( " Error " . $object -> error . " " . join ( ',' , $object -> errors ), LOG_DEBUG , 0 , '_payment' );
2018-03-05 21:46:24 +01:00
$error ++ ;
$postactionmessages [] = $object -> error ;
$postactionmessages = array_merge ( $postactionmessages , $object -> errors );
$ispostactionok = - 1 ;
2020-05-21 15:05:19 +02:00
} else {
2021-02-26 18:58:34 +01:00
if ( $option == 'bankviainvoice' ) {
2018-09-01 17:27:14 +02:00
$postactionmessages [] = 'Invoice, payment and bank record created' ;
dol_syslog ( " Invoice, payment and bank record created " , LOG_DEBUG , 0 , '_payment' );
}
2021-02-26 18:58:34 +01:00
if ( $option == 'bankdirect' ) {
2018-09-01 17:27:14 +02:00
$postactionmessages [] = 'Bank record created' ;
dol_syslog ( " Bank record created " , LOG_DEBUG , 0 , '_payment' );
}
2021-02-26 18:58:34 +01:00
if ( $option == 'invoiceonly' ) {
2018-09-01 17:27:14 +02:00
$postactionmessages [] = 'Invoice recorded' ;
dol_syslog ( " Invoice recorded " , LOG_DEBUG , 0 , '_payment' );
}
2018-03-05 21:46:24 +01:00
$ispostactionok = 1 ;
2018-03-08 15:01:34 +01:00
// If an invoice was created, it is into $object->invoice
2018-03-05 21:46:24 +01:00
}
}
2021-02-26 18:58:34 +01:00
if ( ! $error ) {
if ( $paymentmethod == 'stripe' && $autocreatethirdparty && $option == 'bankviainvoice' ) {
2018-03-23 23:59:35 +01:00
$thirdparty_id = $object -> fk_soc ;
2018-09-01 16:51:40 +02:00
dol_syslog ( " Search existing Stripe customer profile for thirdparty_id= " . $thirdparty_id , LOG_DEBUG , 0 , '_payment' );
2018-03-23 23:59:35 +01:00
$service = 'StripeTest' ;
$servicestatus = 0 ;
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> global -> STRIPE_LIVE ) && ! GETPOST ( 'forcesandbox' , 'alpha' )) {
2018-03-23 23:59:35 +01:00
$service = 'StripeLive' ;
$servicestatus = 1 ;
}
2020-04-10 10:59:32 +02:00
$stripeacc = null ; // No Oauth/connect use for public pages
2018-03-23 23:59:35 +01:00
$thirdparty = new Societe ( $db );
$thirdparty -> fetch ( $thirdparty_id );
2020-12-18 19:02:36 +01:00
include_once DOL_DOCUMENT_ROOT . '/stripe/class/stripe.class.php' ; // This also set $stripearrayofkeysbyenv
2018-03-23 23:59:35 +01:00
$stripe = new Stripe ( $db );
2020-12-18 19:02:36 +01:00
//$stripeacc = $stripe->getStripeAccount($service); Already defined previously
2018-03-23 23:59:35 +01:00
$customer = $stripe -> customerStripe ( $thirdparty , $stripeacc , $servicestatus , 0 );
2021-02-26 18:58:34 +01:00
if ( ! $customer && $TRANSACTIONID ) { // Not linked to a stripe customer, we make the link
2019-12-31 19:11:36 +01:00
dol_syslog ( " No stripe profile found, so we add it for TRANSACTIONID = " . $TRANSACTIONID , LOG_DEBUG , 0 , '_payment' );
try {
2020-12-18 19:02:36 +01:00
global $stripearrayofkeysbyenv ;
\Stripe\Stripe :: setApiKey ( $stripearrayofkeysbyenv [ $servicestatus ][ 'secret_key' ]);
if ( preg_match ( '/^pi_/' , $TRANSACTIONID )) {
// This may throw an error if not found.
$chpi = \Stripe\PaymentIntent :: retrieve ( $TRANSACTIONID ); // payment_intent (pi_...)
} else {
// This throw an error if not found
$chpi = \Stripe\Charge :: retrieve ( $TRANSACTIONID ); // old method, contains the charge id (ch_...)
}
if ( $chpi ) {
$stripecu = $chpi -> customer ; // value 'cus_....'. WARNING: This property may be empty if first payment was recorded before the stripe customer was created.
if ( empty ( $stripecu )) {
// This include the INSERT
$customer = $stripe -> customerStripe ( $thirdparty , $stripeacc , $servicestatus , 1 );
// Link this customer to the payment intent
if ( preg_match ( '/^pi_/' , $TRANSACTIONID ) && $customer ) {
\Stripe\PaymentIntent :: update ( $chpi -> id , array ( 'customer' => $customer -> id ));
}
} else {
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " societe_account (fk_soc, login, key_account, site, site_account, status, entity, date_creation, fk_user_creat) " ;
2021-08-28 03:09:18 +02:00
$sql .= " VALUES ( " . (( int ) $object -> fk_soc ) . " , '', ' " . $db -> escape ( $stripecu ) . " ', 'stripe', ' " . $db -> escape ( $stripearrayofkeysbyenv [ $servicestatus ][ 'publishable_key' ]) . " ', " . (( int ) $servicestatus ) . " , " . (( int ) $conf -> entity ) . " , ' " . $db -> idate ( dol_now ()) . " ', 0) " ;
2020-12-18 19:02:36 +01:00
$resql = $db -> query ( $sql );
if ( ! $resql ) { // should not happen
$error ++ ;
$errmsg = 'Failed to insert customer stripe id in database : ' . $db -> lasterror ();
dol_syslog ( $errmsg , LOG_ERR , 0 , '_payment' );
$postactionmessages [] = $errmsg ;
$ispostactionok = - 1 ;
}
}
} else { // should not happen
2019-12-31 19:11:36 +01:00
$error ++ ;
2020-12-18 19:02:36 +01:00
$errmsg = 'Failed to retreive paymentintent or charge from id' ;
2020-12-18 16:31:32 +01:00
dol_syslog ( $errmsg , LOG_ERR , 0 , '_payment' );
2019-12-31 19:11:36 +01:00
$postactionmessages [] = $errmsg ;
$ispostactionok = - 1 ;
}
2020-12-18 19:02:36 +01:00
} catch ( Exception $e ) { // should not happen
2018-03-23 23:59:35 +01:00
$error ++ ;
2020-12-18 16:31:32 +01:00
$errmsg = 'Failed to get or save customer stripe id in database : ' . $e -> getMessage ();
dol_syslog ( $errmsg , LOG_ERR , 0 , '_payment' );
2018-03-23 23:59:35 +01:00
$postactionmessages [] = $errmsg ;
$ispostactionok = - 1 ;
}
}
}
}
2020-12-18 19:02:36 +01:00
if ( ! $error ) {
2018-03-05 21:46:24 +01:00
$db -> commit ();
2020-05-21 15:05:19 +02:00
} else {
2018-03-05 21:46:24 +01:00
$db -> rollback ();
}
2018-03-04 19:39:46 +01:00
2018-09-01 16:51:40 +02:00
// Send email to member
2021-02-26 18:58:34 +01:00
if ( ! $error ) {
2018-09-01 16:51:40 +02:00
dol_syslog ( " Send email to customer to " . $object -> email . " if we have to (sendalsoemail = " . $sendalsoemail . " ) " , LOG_DEBUG , 0 , '_payment' );
2018-03-05 21:46:24 +01:00
// Send confirmation Email
2021-02-26 18:58:34 +01:00
if ( $object -> email && $sendalsoemail ) {
2018-03-23 19:35:25 +01:00
$subject = '' ;
2020-04-10 10:59:32 +02:00
$msg = '' ;
2018-03-23 19:35:25 +01:00
// Send subscription email
include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php' ;
2020-04-10 10:59:32 +02:00
$formmail = new FormMail ( $db );
2018-03-23 19:35:25 +01:00
// Set output language
$outputlangs = new Translate ( '' , $conf );
$outputlangs -> setDefaultLang ( empty ( $object -> thirdparty -> default_lang ) ? $mysoc -> default_lang : $object -> thirdparty -> default_lang );
2019-09-20 07:02:14 +02:00
// Load traductions files required by page
2018-03-23 19:35:25 +01:00
$outputlangs -> loadLangs ( array ( " main " , " members " ));
2018-09-21 15:12:17 +02:00
// Get email content from template
2020-04-10 10:59:32 +02:00
$arraydefaultmessage = null ;
2018-03-23 19:35:25 +01:00
$labeltouse = $conf -> global -> ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION ;
2021-02-26 18:58:34 +01:00
if ( ! empty ( $labeltouse )) {
$arraydefaultmessage = $formmail -> getEMailTemplate ( $db , 'member' , $user , $outputlangs , 0 , 1 , $labeltouse );
}
2018-03-23 19:35:25 +01:00
2021-02-26 18:58:34 +01:00
if ( ! empty ( $labeltouse ) && is_object ( $arraydefaultmessage ) && $arraydefaultmessage -> id > 0 ) {
2018-03-23 19:35:25 +01:00
$subject = $arraydefaultmessage -> topic ;
$msg = $arraydefaultmessage -> content ;
}
2020-04-10 10:59:32 +02:00
$substitutionarray = getCommonSubstitutionArray ( $outputlangs , 0 , null , $object );
2021-04-19 14:19:32 +02:00
// Create external user
2021-04-19 15:23:36 +02:00
if ( ! empty ( $conf -> global -> ADHERENT_CREATE_EXTERNAL_USER_LOGIN )) {
2021-04-19 14:19:32 +02:00
$infouserlogin = '' ;
$nuser = new User ( $db );
$tmpuser = dol_clone ( $object );
2021-04-19 15:23:36 +02:00
2021-04-19 14:19:32 +02:00
$result = $nuser -> create_from_member ( $tmpuser , $object -> login );
$newpassword = $nuser -> setPassword ( $user , '' );
if ( $result < 0 ) {
$outputlangs -> load ( " errors " );
$postactionmessages [] = 'Error in create external user : ' . $nuser -> error ;
} else {
2021-04-19 14:51:50 +02:00
$infouserlogin = $outputlangs -> trans ( " Login " ) . ': ' . $nuser -> login . ' ' . " \n " . $outputlangs -> trans ( " Password " ) . ': ' . $newpassword ;
2021-04-19 14:19:32 +02:00
$postactionmessages [] = $langs -> trans ( " NewUserCreated " , $nuser -> login );
}
$substitutionarray [ '__MEMBER_USER_LOGIN_INFORMATION__' ] = $infouserlogin ;
}
2018-03-23 19:35:25 +01:00
complete_substitutions_array ( $substitutionarray , $outputlangs , $object );
$subjecttosend = make_substitutions ( $subject , $substitutionarray , $outputlangs );
$texttosend = make_substitutions ( dol_concatdesc ( $msg , $adht -> getMailOnSubscription ()), $substitutionarray , $outputlangs );
2018-03-04 19:39:46 +01:00
2018-03-08 15:01:34 +01:00
// Attach a file ?
2020-04-10 10:59:32 +02:00
$file = '' ;
$listofpaths = array ();
$listofnames = array ();
$listofmimes = array ();
2021-02-26 18:58:34 +01:00
if ( is_object ( $object -> invoice )) {
2018-03-08 15:01:34 +01:00
$invoicediroutput = $conf -> facture -> dir_output ;
2020-04-10 10:59:32 +02:00
$fileparams = dol_most_recent_file ( $invoicediroutput . '/' . $object -> invoice -> ref , preg_quote ( $object -> invoice -> ref , '/' ) . '[^\-]+' );
2018-03-08 15:01:34 +01:00
$file = $fileparams [ 'fullname' ];
2020-04-10 10:59:32 +02:00
$listofpaths = array ( $file );
$listofnames = array ( basename ( $file ));
$listofmimes = array ( dol_mimetype ( $file ));
2018-03-08 15:01:34 +01:00
}
2020-04-10 10:59:32 +02:00
$moreinheader = 'X-Dolibarr-Info: send_an_email by public/payment/paymentok.php' . " \r \n " ;
2018-10-06 20:51:35 +02:00
2020-04-10 10:59:32 +02:00
$result = $object -> send_an_email ( $texttosend , $subjecttosend , $listofpaths , $listofmimes , $listofnames , " " , " " , 0 , - 1 , " " , $moreinheader );
2018-03-25 15:00:43 +02:00
2021-02-26 18:58:34 +01:00
if ( $result < 0 ) {
2020-04-10 10:59:32 +02:00
$errmsg = $object -> error ;
2018-03-05 21:46:24 +01:00
$postactionmessages [] = $errmsg ;
$ispostactionok = - 1 ;
2020-05-21 15:05:19 +02:00
} else {
2021-02-26 18:58:34 +01:00
if ( $file ) {
$postactionmessages [] = 'Email sent to member (with invoice document attached)' ;
} else {
$postactionmessages [] = 'Email sent to member (without any attached document)' ;
}
2018-09-04 00:21:48 +02:00
// TODO Add actioncomm event
2018-03-08 15:01:34 +01:00
}
2018-03-05 21:46:24 +01:00
}
}
2020-05-21 15:05:19 +02:00
} else {
2018-03-25 15:21:32 +02:00
$postactionmessages [] = 'Failed to get a valid value for "amount paid" or "payment type" to record the payment of subscription for member ' . $tmptag [ 'MEM' ] . '. May be payment was already recorded.' ;
2018-03-04 19:39:46 +01:00
$ispostactionok = - 1 ;
}
2020-05-21 15:05:19 +02:00
} else {
2021-02-03 19:36:02 +01:00
$postactionmessages [] = 'Member ' . $tmptag [ 'MEM' ] . ' for subscription paid was not found' ;
2018-03-04 19:39:46 +01:00
$ispostactionok = - 1 ;
}
2021-02-26 18:58:34 +01:00
} elseif ( array_key_exists ( 'INV' , $tmptag ) && $tmptag [ 'INV' ] > 0 ) {
2018-03-04 19:39:46 +01:00
// Record payment
include_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php' ;
2020-08-04 15:00:03 +02:00
$object = new Facture ( $db );
2021-11-27 17:19:16 +01:00
$result = $object -> fetch (( int ) $tmptag [ 'INV' ]);
2021-02-26 18:58:34 +01:00
if ( $result ) {
2020-04-10 10:59:32 +02:00
$FinalPaymentAmt = $_SESSION [ " FinalPaymentAmt " ];
2018-03-04 19:39:46 +01:00
$paymentTypeId = 0 ;
2021-02-26 18:58:34 +01:00
if ( $paymentmethod == 'paybox' ) {
$paymentTypeId = $conf -> global -> PAYBOX_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'paypal' ) {
$paymentTypeId = $conf -> global -> PAYPAL_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'stripe' ) {
$paymentTypeId = $conf -> global -> STRIPE_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( empty ( $paymentTypeId )) {
2022-03-02 15:13:17 +01:00
dol_syslog ( " paymentType = " . $paymentType , LOG_DEBUG , 0 , '_payment' );
2021-02-26 18:58:34 +01:00
if ( empty ( $paymentType )) {
$paymentType = 'CB' ;
}
2022-03-02 15:13:17 +01:00
// May return nothing when paymentType means nothing
// (for example when paymentType is 'Mark', 'Sole', 'Sale', for paypal)
2018-03-04 19:39:46 +01:00
$paymentTypeId = dol_getIdFromCode ( $db , $paymentType , 'c_paiement' , 'code' , 'id' , 1 );
2022-03-02 15:13:17 +01:00
// If previous line has returned nothing, we force to get the ID of payment of Credit Card (hard coded code 'CB').
if ( empty ( $paymentTypeId ) || $paymentTypeId < 0 ) {
$paymentTypeId = dol_getIdFromCode ( $db , 'CB' , 'c_paiement' , 'code' , 'id' , 1 );
}
2018-03-04 19:39:46 +01:00
}
2022-04-08 12:38:49 +02:00
dol_syslog ( " FinalPaymentAmt = " . $FinalPaymentAmt . " paymentTypeId = " . $paymentTypeId , LOG_DEBUG , 0 , '_payment' );
2018-03-05 21:46:24 +01:00
// 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)
2021-02-26 18:58:34 +01:00
if ( ! empty ( $FinalPaymentAmt ) && $paymentTypeId > 0 ) {
2018-03-05 21:46:24 +01:00
$db -> begin ();
2018-03-04 19:39:46 +01:00
// Creation of payment line
include_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php' ;
$paiement = new Paiement ( $db );
2020-04-10 10:59:32 +02:00
$paiement -> datepaye = $now ;
2021-02-26 18:58:34 +01:00
if ( $currencyCodeType == $conf -> currency ) {
2020-08-04 15:00:03 +02:00
$paiement -> amounts = array ( $object -> id => $FinalPaymentAmt ); // Array with all payments dispatching with invoice id
2020-05-21 15:05:19 +02:00
} else {
2020-08-04 15:00:03 +02:00
$paiement -> multicurrency_amounts = array ( $object -> id => $FinalPaymentAmt ); // Array with all payments dispatching
2018-03-04 19:39:46 +01:00
$postactionmessages [] = 'Payment was done in a different currency that currency expected of company' ;
$ispostactionok = - 1 ;
2020-04-10 10:59:32 +02:00
$error ++ ; // Not yet supported
2018-03-04 19:39:46 +01:00
}
$paiement -> paiementid = $paymentTypeId ;
2020-03-16 19:23:18 +01:00
$paiement -> num_payment = '' ;
2018-10-16 16:57:16 +02:00
$paiement -> note_public = 'Online payment ' . dol_print_date ( $now , 'standard' ) . ' from ' . $ipaddress ;
2018-10-20 17:17:21 +02:00
$paiement -> ext_payment_id = $TRANSACTIONID ;
2018-11-01 23:04:10 +01:00
$paiement -> ext_payment_site = $service ;
2018-10-20 17:17:21 +02:00
2021-02-26 18:58:34 +01:00
if ( ! $error ) {
2020-04-10 10:59:32 +02:00
$paiement_id = $paiement -> create ( $user , 1 ); // This include closing invoices and regenerating documents
2021-02-26 18:58:34 +01:00
if ( $paiement_id < 0 ) {
2018-03-04 19:39:46 +01:00
$postactionmessages [] = $paiement -> error . ' ' . join ( " <br> \n " , $paiement -> errors );
$ispostactionok = - 1 ;
$error ++ ;
2020-05-21 15:05:19 +02:00
} else {
2018-03-04 19:39:46 +01:00
$postactionmessages [] = 'Payment created' ;
2020-04-10 10:59:32 +02:00
$ispostactionok = 1 ;
2018-03-04 19:39:46 +01:00
}
}
2021-02-26 18:58:34 +01:00
if ( ! $error && ! empty ( $conf -> banque -> enabled )) {
2018-03-04 19:39:46 +01:00
$bankaccountid = 0 ;
2021-02-26 18:58:34 +01:00
if ( $paymentmethod == 'paybox' ) {
$bankaccountid = $conf -> global -> PAYBOX_BANK_ACCOUNT_FOR_PAYMENTS ;
} elseif ( $paymentmethod == 'paypal' ) {
$bankaccountid = $conf -> global -> PAYPAL_BANK_ACCOUNT_FOR_PAYMENTS ;
} elseif ( $paymentmethod == 'stripe' ) {
$bankaccountid = $conf -> global -> STRIPE_BANK_ACCOUNT_FOR_PAYMENTS ;
}
2018-03-04 19:39:46 +01:00
2021-02-26 18:58:34 +01:00
if ( $bankaccountid > 0 ) {
2020-04-10 10:59:32 +02:00
$label = '(CustomerInvoicePayment)' ;
2021-02-26 18:58:34 +01:00
if ( $object -> type == Facture :: TYPE_CREDIT_NOTE ) {
$label = '(CustomerInvoicePaymentBack)' ; // Refund of a credit note
}
2020-04-10 10:59:32 +02:00
$result = $paiement -> addPaymentToBank ( $user , 'payment' , $label , $bankaccountid , '' , '' );
2021-02-26 18:58:34 +01:00
if ( $result < 0 ) {
2019-01-28 02:46:31 +01:00
$postactionmessages [] = $paiement -> error . ' ' . join ( " <br> \n " , $paiement -> errors );
2018-03-04 19:39:46 +01:00
$ispostactionok = - 1 ;
$error ++ ;
2020-05-21 15:05:19 +02:00
} else {
2018-10-05 13:42:30 +02:00
$postactionmessages [] = 'Bank transaction of payment created' ;
2020-04-10 10:59:32 +02:00
$ispostactionok = 1 ;
2018-03-04 19:39:46 +01:00
}
2020-05-21 15:05:19 +02:00
} else {
2021-09-08 01:41:59 +02:00
$postactionmessages [] = 'Setup of bank account to use in module ' . $paymentmethod . ' was not set. Your payment was really executed but we failed to record it. Please contact us.' ;
2018-03-04 19:39:46 +01:00
$ispostactionok = - 1 ;
$error ++ ;
}
}
2021-02-26 18:58:34 +01:00
if ( ! $error ) {
2018-03-04 19:39:46 +01:00
$db -> commit ();
2020-05-21 15:05:19 +02:00
} else {
2018-03-04 19:39:46 +01:00
$db -> rollback ();
}
2020-05-21 15:05:19 +02:00
} else {
2022-04-08 15:15:55 +02:00
$postactionmessages [] = 'Failed to get a valid value for "amount paid" (' . $FinalPaymentAmt . ') or "payment type id" (' . $paymentTypeId . ') to record the payment of invoice ' . $tmptag [ 'INV' ] . '. May be payment was already recorded.' ;
2018-03-04 19:39:46 +01:00
$ispostactionok = - 1 ;
}
2020-05-21 15:05:19 +02:00
} else {
2021-02-03 19:36:02 +01:00
$postactionmessages [] = 'Invoice paid ' . $tmptag [ 'INV' ] . ' was not found' ;
2018-03-04 19:39:46 +01:00
$ispostactionok = - 1 ;
}
2021-06-02 18:11:47 +02:00
} elseif ( array_key_exists ( 'ORD' , $tmptag ) && $tmptag [ 'ORD' ] > 0 ) {
include_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php' ;
$object = new Commande ( $db );
2021-11-27 17:19:16 +01:00
$result = $object -> fetch (( int ) $tmptag [ 'ORD' ]);
2021-06-02 18:11:47 +02:00
if ( $result ) {
$FinalPaymentAmt = $_SESSION [ " FinalPaymentAmt " ];
$paymentTypeId = 0 ;
2022-03-02 15:13:17 +01:00
if ( $paymentmethod == 'paybox' ) {
$paymentTypeId = $conf -> global -> PAYBOX_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'paypal' ) {
$paymentTypeId = $conf -> global -> PAYPAL_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'stripe' ) {
$paymentTypeId = $conf -> global -> STRIPE_PAYMENT_MODE_FOR_PAYMENTS ;
}
2021-06-02 18:11:47 +02:00
if ( empty ( $paymentTypeId )) {
2022-03-02 15:13:17 +01:00
dol_syslog ( " paymentType = " . $paymentType , LOG_DEBUG , 0 , '_payment' );
if ( empty ( $paymentType )) {
$paymentType = 'CB' ;
}
// May return nothing when paymentType means nothing
// (for example when paymentType is 'Mark', 'Sole', 'Sale', for paypal)
2021-06-02 18:11:47 +02:00
$paymentTypeId = dol_getIdFromCode ( $db , $paymentType , 'c_paiement' , 'code' , 'id' , 1 );
2022-03-02 15:13:17 +01:00
// If previous line has returned nothing, we force to get the ID of payment of Credit Card (hard coded code 'CB').
if ( empty ( $paymentTypeId ) || $paymentTypeId < 0 ) {
$paymentTypeId = dol_getIdFromCode ( $db , 'CB' , 'c_paiement' , 'code' , 'id' , 1 );
}
2021-06-02 18:11:47 +02:00
}
// 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)
2022-06-11 09:46:28 +02:00
if ( isModEnabled ( 'facture' )) {
2021-07-01 11:55:06 +02:00
if ( ! empty ( $FinalPaymentAmt ) && $paymentTypeId > 0 ) {
include_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php' ;
$invoice = new Facture ( $db );
$result = $invoice -> createFromOrder ( $object , $user );
if ( $result > 0 ) {
$object -> classifyBilled ( $user );
$invoice -> validate ( $user );
// Creation of payment line
include_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php' ;
$paiement = new Paiement ( $db );
$paiement -> datepaye = $now ;
if ( $currencyCodeType == $conf -> currency ) {
$paiement -> amounts = array ( $invoice -> id => $FinalPaymentAmt ); // Array with all payments dispatching with invoice id
} else {
$paiement -> multicurrency_amounts = array ( $invoice -> id => $FinalPaymentAmt ); // Array with all payments dispatching
2021-06-02 18:11:47 +02:00
2021-07-01 11:55:06 +02:00
$postactionmessages [] = 'Payment was done in a different currency that currency expected of company' ;
2021-06-02 18:11:47 +02:00
$ispostactionok = - 1 ;
2021-07-01 11:59:00 +02:00
$error ++ ;
2021-06-02 18:11:47 +02:00
}
2021-07-01 11:55:06 +02:00
$paiement -> paiementid = $paymentTypeId ;
$paiement -> num_payment = '' ;
$paiement -> note_public = 'Online payment ' . dol_print_date ( $now , 'standard' ) . ' from ' . $ipaddress ;
$paiement -> ext_payment_id = $TRANSACTIONID ;
$paiement -> ext_payment_site = '' ;
if ( ! $error ) {
$paiement_id = $paiement -> create ( $user , 1 ); // This include closing invoices and regenerating documents
if ( $paiement_id < 0 ) {
2021-06-02 18:11:47 +02:00
$postactionmessages [] = $paiement -> error . ' ' . join ( " <br> \n " , $paiement -> errors );
$ispostactionok = - 1 ;
$error ++ ;
} else {
2021-07-01 11:55:06 +02:00
$postactionmessages [] = 'Payment created' ;
2021-06-02 18:11:47 +02:00
$ispostactionok = 1 ;
}
}
2021-07-01 11:55:06 +02:00
if ( ! $error && ! empty ( $conf -> banque -> enabled )) {
$bankaccountid = 0 ;
if ( $paymentmethod == 'paybox' ) $bankaccountid = $conf -> global -> PAYBOX_BANK_ACCOUNT_FOR_PAYMENTS ;
elseif ( $paymentmethod == 'paypal' ) $bankaccountid = $conf -> global -> PAYPAL_BANK_ACCOUNT_FOR_PAYMENTS ;
elseif ( $paymentmethod == 'stripe' ) $bankaccountid = $conf -> global -> STRIPE_BANK_ACCOUNT_FOR_PAYMENTS ;
if ( $bankaccountid > 0 ) {
$label = '(CustomerInvoicePayment)' ;
if ( $object -> type == Facture :: TYPE_CREDIT_NOTE ) $label = '(CustomerInvoicePaymentBack)' ; // Refund of a credit note
$result = $paiement -> addPaymentToBank ( $user , 'payment' , $label , $bankaccountid , '' , '' );
if ( $result < 0 ) {
$postactionmessages [] = $paiement -> error . ' ' . join ( " <br> \n " , $paiement -> errors );
$ispostactionok = - 1 ;
$error ++ ;
} else {
$postactionmessages [] = 'Bank transaction of payment created' ;
$ispostactionok = 1 ;
}
} else {
$postactionmessages [] = 'Setup of bank account to use in module ' . $paymentmethod . ' was not set. No way to record the payment.' ;
$ispostactionok = - 1 ;
$error ++ ;
}
}
if ( ! $error ) {
$db -> commit ();
} else {
$db -> rollback ();
}
2021-06-02 18:11:47 +02:00
} else {
2021-07-01 11:55:06 +02:00
$postactionmessages [] = 'Failed to create invoice form order ' . $tmptag [ 'ORD' ] . '.' ;
$ispostactionok = - 1 ;
2021-06-02 18:11:47 +02:00
}
} else {
2022-04-08 15:15:55 +02:00
$postactionmessages [] = 'Failed to get a valid value for "amount paid" (' . $FinalPaymentAmt . ') or "payment type id" (' . $paymentTypeId . ') to record the payment of order ' . $tmptag [ 'ORD' ] . '. May be payment was already recorded.' ;
2021-06-02 18:11:47 +02:00
$ispostactionok = - 1 ;
}
} else {
2021-07-01 11:55:06 +02:00
$postactionmessages [] = 'Invoice module is not enable' ;
2021-06-02 18:11:47 +02:00
$ispostactionok = - 1 ;
}
} else {
$postactionmessages [] = 'Order paid ' . $tmptag [ 'ORD' ] . ' was not found' ;
2021-07-01 12:15:55 +02:00
$ispostactionok = - 1 ;
}
2021-04-22 14:48:05 +02:00
} elseif ( array_key_exists ( 'DON' , $tmptag ) && $tmptag [ 'DON' ] > 0 ) {
include_once DOL_DOCUMENT_ROOT . '/don/class/don.class.php' ;
$don = new Don ( $db );
2021-11-27 17:19:16 +01:00
$result = $don -> fetch (( int ) $tmptag [ 'DON' ]);
2021-04-22 14:48:05 +02:00
if ( $result ) {
$paymentTypeId = 0 ;
if ( $paymentmethod == 'paybox' ) {
$paymentTypeId = $conf -> global -> PAYBOX_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'paypal' ) {
$paymentTypeId = $conf -> global -> PAYPAL_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'stripe' ) {
$paymentTypeId = $conf -> global -> STRIPE_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( empty ( $paymentTypeId )) {
2022-03-02 15:13:17 +01:00
dol_syslog ( " paymentType = " . $paymentType , LOG_DEBUG , 0 , '_payment' );
2021-04-22 14:48:05 +02:00
if ( empty ( $paymentType )) {
$paymentType = 'CB' ;
}
2022-03-02 15:13:17 +01:00
// May return nothing when paymentType means nothing
// (for example when paymentType is 'Mark', 'Sole', 'Sale', for paypal)
2021-04-22 14:48:05 +02:00
$paymentTypeId = dol_getIdFromCode ( $db , $paymentType , 'c_paiement' , 'code' , 'id' , 1 );
2022-03-02 15:13:17 +01:00
// If previous line has returned nothing, we force to get the ID of payment of Credit Card (hard coded code 'CB').
if ( empty ( $paymentTypeId ) || $paymentTypeId < 0 ) {
$paymentTypeId = dol_getIdFromCode ( $db , 'CB' , 'c_paiement' , 'code' , 'id' , 1 );
}
2021-04-22 14:48:05 +02:00
}
// 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 ) {
$db -> begin ();
// Creation of paiement line for donation
include_once DOL_DOCUMENT_ROOT . '/don/class/paymentdonation.class.php' ;
$paiement = new PaymentDonation ( $db );
2022-05-22 17:09:08 +02:00
$totalpaid = $FinalPaymentAmt ;
2021-04-22 14:48:05 +02:00
if ( $currencyCodeType == $conf -> currency ) {
2022-05-22 17:09:08 +02:00
$paiement -> amounts = array ( $object -> id => $totalpaid ); // Array with all payments dispatching with donation
2021-04-22 14:48:05 +02:00
} else {
// PaymentDonation does not support multi currency
$postactionmessages [] = 'Payment donation can\'t be payed with diffent currency than ' . $conf -> currency ;
$ispostactionok = - 1 ;
$error ++ ; // Not yet supported
}
$paiement -> fk_donation = $don -> id ;
2022-04-08 15:15:55 +02:00
$paiement -> datep = $now ;
2021-04-22 14:48:05 +02:00
$paiement -> paymenttype = $paymentTypeId ;
$paiement -> num_payment = '' ;
$paiement -> note_public = 'Online payment ' . dol_print_date ( $now , 'standard' ) . ' from ' . $ipaddress ;
$paiement -> ext_payment_id = $TRANSACTIONID ;
$paiement -> ext_payment_site = $service ;
if ( ! $error ) {
$paiement_id = $paiement -> create ( $user , 1 );
if ( $paiement_id < 0 ) {
$postactionmessages [] = $paiement -> error . ' ' . join ( " <br> \n " , $paiement -> errors );
$ispostactionok = - 1 ;
$error ++ ;
} else {
$postactionmessages [] = 'Payment created' ;
$ispostactionok = 1 ;
2022-05-22 17:09:08 +02:00
if ( $totalpaid >= $don -> getRemainToPay ()) {
$don -> setPaid ( $don -> id );
}
2021-04-22 14:48:05 +02:00
}
}
if ( ! $error && ! empty ( $conf -> banque -> enabled )) {
$bankaccountid = 0 ;
if ( $paymentmethod == 'paybox' ) {
$bankaccountid = $conf -> global -> PAYBOX_BANK_ACCOUNT_FOR_PAYMENTS ;
} elseif ( $paymentmethod == 'paypal' ) {
$bankaccountid = $conf -> global -> PAYPAL_BANK_ACCOUNT_FOR_PAYMENTS ;
} elseif ( $paymentmethod == 'stripe' ) {
$bankaccountid = $conf -> global -> STRIPE_BANK_ACCOUNT_FOR_PAYMENTS ;
}
if ( $bankaccountid > 0 ) {
$result = $paiement -> addPaymentToBank ( $user , 'payment_donation' , '(DonationPayment)' , $bankaccountid , '' , '' );
if ( $result < 0 ) {
$postactionmessages [] = $paiement -> error . ' ' . join ( " <br> \n " , $paiement -> errors );
$ispostactionok = - 1 ;
$error ++ ;
} else {
$postactionmessages [] = 'Bank transaction of payment created' ;
$ispostactionok = 1 ;
}
} else {
2021-09-08 01:41:59 +02:00
$postactionmessages [] = 'Setup of bank account to use in module ' . $paymentmethod . ' was not set. Your payment was really executed but we failed to record it. Please contact us.' ;
2021-04-22 14:48:05 +02:00
$ispostactionok = - 1 ;
$error ++ ;
}
}
if ( ! $error ) {
$db -> commit ();
} else {
$db -> rollback ();
}
} else {
2022-04-08 15:15:55 +02:00
$postactionmessages [] = 'Failed to get a valid value for "amount paid" (' . $FinalPaymentAmt . ') or "payment type id" (' . $paymentTypeId . ') to record the payment of donation ' . $tmptag [ 'DON' ] . '. May be payment was already recorded.' ;
2021-04-22 14:48:05 +02:00
$ispostactionok = - 1 ;
}
} else {
$postactionmessages [] = 'Donation paid ' . $tmptag [ 'DON' ] . ' was not found' ;
$ispostactionok = - 1 ;
}
// TODO send email with acknowledgment for the donation
2021-09-18 13:25:12 +02:00
// (we need first that the donation module is able to generate a pdf document for the cerfa with pre filled content)
2021-04-20 14:49:11 +02:00
} elseif ( array_key_exists ( 'ATT' , $tmptag ) && $tmptag [ 'ATT' ] > 0 ) {
2021-09-08 01:41:59 +02:00
// Record payment for registration to an event for an attendee
2021-04-20 14:39:41 +02:00
include_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php' ;
$object = new Facture ( $db );
2021-04-23 16:37:39 +02:00
$result = $object -> fetch ( $ref );
2021-04-20 14:39:41 +02:00
if ( $result ) {
$paymentTypeId = 0 ;
if ( $paymentmethod == 'paybox' ) {
$paymentTypeId = $conf -> global -> PAYBOX_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'paypal' ) {
$paymentTypeId = $conf -> global -> PAYPAL_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'stripe' ) {
$paymentTypeId = $conf -> global -> STRIPE_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( empty ( $paymentTypeId )) {
2022-03-02 15:13:17 +01:00
dol_syslog ( " paymentType = " . $paymentType , LOG_DEBUG , 0 , '_payment' );
2021-04-20 14:39:41 +02:00
if ( empty ( $paymentType )) {
$paymentType = 'CB' ;
}
2022-03-02 15:13:17 +01:00
// May return nothing when paymentType means nothing
// (for example when paymentType is 'Mark', 'Sole', 'Sale', for paypal)
2021-04-20 14:39:41 +02:00
$paymentTypeId = dol_getIdFromCode ( $db , $paymentType , 'c_paiement' , 'code' , 'id' , 1 );
2022-03-02 15:13:17 +01:00
// If previous line has returned nothing, we force to get the ID of payment of Credit Card (hard coded code 'CB').
if ( empty ( $paymentTypeId ) || $paymentTypeId < 0 ) {
$paymentTypeId = dol_getIdFromCode ( $db , 'CB' , 'c_paiement' , 'code' , 'id' , 1 );
}
2021-04-20 14:39:41 +02:00
}
// 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 ) {
2021-04-23 16:46:09 +02:00
$resultvalidate = $object -> validate ( $user );
if ( $resultvalidate < 0 ) {
2021-04-23 16:37:39 +02:00
$postactionmessages [] = 'Cannot validate invoice' ;
2021-04-20 14:39:41 +02:00
$ispostactionok = - 1 ;
$error ++ ; // Not yet supported
2021-04-23 16:46:09 +02:00
} else {
$db -> begin ();
// Creation of payment line
include_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php' ;
$paiement = new Paiement ( $db );
$paiement -> datepaye = $now ;
if ( $currencyCodeType == $conf -> currency ) {
$paiement -> amounts = array ( $object -> id => $FinalPaymentAmt ); // Array with all payments dispatching with invoice id
2021-04-20 14:39:41 +02:00
} else {
2021-04-23 16:46:09 +02:00
$paiement -> multicurrency_amounts = array ( $object -> id => $FinalPaymentAmt ); // Array with all payments dispatching
2021-04-20 14:39:41 +02:00
2021-04-23 16:46:09 +02:00
$postactionmessages [] = 'Payment was done in a different currency that currency expected of company' ;
$ispostactionok = - 1 ;
$error ++ ; // Not yet supported
2021-04-20 14:39:41 +02:00
}
2021-04-23 16:46:09 +02:00
$paiement -> paiementid = $paymentTypeId ;
$paiement -> num_payment = '' ;
2021-09-08 01:41:59 +02:00
$paiement -> note_public = 'Online payment ' . dol_print_date ( $now , 'standard' ) . ' from ' . $ipaddress . ' for event registration' ;
2021-04-23 16:46:09 +02:00
$paiement -> ext_payment_id = $TRANSACTIONID ;
$paiement -> ext_payment_site = $service ;
if ( ! $error ) {
$paiement_id = $paiement -> create ( $user , 1 ); // This include closing invoices and regenerating documents
if ( $paiement_id < 0 ) {
2021-04-20 14:39:41 +02:00
$postactionmessages [] = $paiement -> error . ' ' . join ( " <br> \n " , $paiement -> errors );
$ispostactionok = - 1 ;
$error ++ ;
} else {
2021-04-23 16:46:09 +02:00
$postactionmessages [] = 'Payment created' ;
2021-04-20 14:39:41 +02:00
$ispostactionok = 1 ;
}
}
2021-04-23 16:46:09 +02:00
if ( ! $error && ! empty ( $conf -> banque -> enabled )) {
$bankaccountid = 0 ;
if ( $paymentmethod == 'paybox' ) {
$bankaccountid = $conf -> global -> PAYBOX_BANK_ACCOUNT_FOR_PAYMENTS ;
} elseif ( $paymentmethod == 'paypal' ) {
$bankaccountid = $conf -> global -> PAYPAL_BANK_ACCOUNT_FOR_PAYMENTS ;
} elseif ( $paymentmethod == 'stripe' ) {
$bankaccountid = $conf -> global -> STRIPE_BANK_ACCOUNT_FOR_PAYMENTS ;
}
2021-04-21 16:43:57 +02:00
2021-04-23 16:46:09 +02:00
if ( $bankaccountid > 0 ) {
$label = '(CustomerInvoicePayment)' ;
if ( $object -> type == Facture :: TYPE_CREDIT_NOTE ) {
$label = '(CustomerInvoicePaymentBack)' ; // Refund of a credit note
}
$result = $paiement -> addPaymentToBank ( $user , 'payment' , $label , $bankaccountid , '' , '' );
if ( $result < 0 ) {
$postactionmessages [] = $paiement -> error . ' ' . join ( " <br> \n " , $paiement -> errors );
$ispostactionok = - 1 ;
$error ++ ;
} else {
$postactionmessages [] = 'Bank transaction of payment created' ;
$ispostactionok = 1 ;
}
} else {
2021-09-08 01:41:59 +02:00
$postactionmessages [] = 'Setup of bank account to use in module ' . $paymentmethod . ' was not set. Your payment was really executed but we failed to record it. Please contact us.' ;
2021-04-23 16:46:09 +02:00
$ispostactionok = - 1 ;
$error ++ ;
}
}
2021-04-23 09:46:02 +02:00
2021-04-23 16:46:09 +02:00
if ( ! $error ) {
// Validating the attendee
$attendeetovalidate = new ConferenceOrBoothAttendee ( $db );
2021-11-27 17:19:16 +01:00
$resultattendee = $attendeetovalidate -> fetch (( int ) $tmptag [ 'ATT' ]);
2021-04-23 16:46:09 +02:00
if ( $resultattendee < 0 ) {
2021-09-08 01:41:59 +02:00
$error ++ ;
2021-04-23 16:46:09 +02:00
setEventMessages ( null , $attendeetovalidate -> errors , " errors " );
} else {
2021-05-10 15:58:54 +02:00
$attendeetovalidate -> validate ( $user );
2021-04-23 16:46:09 +02:00
2021-09-08 01:41:59 +02:00
$attendeetovalidate -> amount = $FinalPaymentAmt ;
$attendeetovalidate -> date_subscription = dol_now ();
$attendeetovalidate -> update ( $user );
}
}
2021-04-21 16:43:57 +02:00
2021-09-08 01:41:59 +02:00
if ( ! $error ) {
$db -> commit ();
} else {
setEventMessages ( null , $postactionmessages , 'warnings' );
2021-04-21 16:43:57 +02:00
2021-09-08 01:41:59 +02:00
$db -> rollback ();
}
2021-04-21 16:43:57 +02:00
2021-09-08 01:41:59 +02:00
if ( ! $error ) {
// Sending mail
$thirdparty = new Societe ( $db );
$resultthirdparty = $thirdparty -> fetch ( $attendeetovalidate -> fk_soc );
if ( $resultthirdparty < 0 ) {
setEventMessages ( null , $attendeetovalidate -> errors , " errors " );
} else {
require_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php' ;
include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php' ;
$formmail = new FormMail ( $db );
// Set output language
$outputlangs = new Translate ( '' , $conf );
$outputlangs -> setDefaultLang ( empty ( $thirdparty -> default_lang ) ? $mysoc -> default_lang : $thirdparty -> default_lang );
// Load traductions files required by page
2022-05-04 15:27:23 +02:00
$outputlangs -> loadLangs ( array ( " main " , " members " , " eventorganization " ));
2021-09-08 01:41:59 +02:00
// Get email content from template
$arraydefaultmessage = null ;
2022-05-03 20:07:21 +02:00
$idoftemplatetouse = $conf -> global -> EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT ; // Email to send for Event organization registration
2021-09-08 01:41:59 +02:00
2022-05-03 20:07:21 +02:00
if ( ! empty ( $idoftemplatetouse )) {
$arraydefaultmessage = $formmail -> getEMailTemplate ( $db , 'conferenceorbooth' , $user , $outputlangs , $idoftemplatetouse , 1 , '' );
2021-09-08 01:41:59 +02:00
}
2021-04-21 16:43:57 +02:00
2022-05-03 20:07:21 +02:00
if ( ! empty ( $idoftemplatetouse ) && is_object ( $arraydefaultmessage ) && $arraydefaultmessage -> id > 0 ) {
2021-09-08 01:41:59 +02:00
$subject = $arraydefaultmessage -> topic ;
$msg = $arraydefaultmessage -> content ;
2022-05-03 20:07:21 +02:00
} else {
2022-10-18 23:28:47 +02:00
$subject = '[' . $appli . '] ' . $object -> ref . ' - ' . $outputlangs -> trans ( " NewRegistration " ) . ']' ;
2022-05-03 20:07:21 +02:00
$msg = $outputlangs -> trans ( " OrganizationEventPaymentOfRegistrationWasReceived " );
2021-09-08 01:41:59 +02:00
}
2021-04-21 16:43:57 +02:00
2022-05-03 20:07:21 +02:00
2021-09-08 01:41:59 +02:00
$substitutionarray = getCommonSubstitutionArray ( $outputlangs , 0 , null , $thirdparty );
complete_substitutions_array ( $substitutionarray , $outputlangs , $object );
2021-04-21 16:43:57 +02:00
2021-09-08 01:41:59 +02:00
$subjecttosend = make_substitutions ( $subject , $substitutionarray , $outputlangs );
$texttosend = make_substitutions ( $msg , $substitutionarray , $outputlangs );
2021-04-21 16:43:57 +02:00
2021-09-08 01:41:59 +02:00
$sendto = $attendeetovalidate -> email ;
2023-01-09 15:37:10 +01:00
$from = ! empty ( $conf -> global -> MAILING_EMAIL_FROM ) ? $conf -> global -> MAILING_EMAIL_FROM : getDolGlobalString ( " MAIN_MAIL_EMAIL_FROM " );
2021-09-08 01:41:59 +02:00
$urlback = $_SERVER [ " REQUEST_URI " ];
$ishtml = dol_textishtml ( $texttosend ); // May contain urls
2022-05-04 15:51:24 +02:00
// Attach a file ?
$file = '' ;
$listofpaths = array ();
$listofnames = array ();
$listofmimes = array ();
if ( is_object ( $object )) {
$invoicediroutput = $conf -> facture -> dir_output ;
$fileparams = dol_most_recent_file ( $invoicediroutput . '/' . $object -> ref , preg_quote ( $object -> ref , '/' ) . '[^\-]+' );
$file = $fileparams [ 'fullname' ];
$listofpaths = array ( $file );
$listofnames = array ( basename ( $file ));
$listofmimes = array ( dol_mimetype ( $file ));
}
$mailfile = new CMailFile ( $subjecttosend , $sendto , $from , $texttosend , $listofpaths , $listofmimes , $listofnames , '' , '' , 0 , $ishtml );
2021-09-08 01:41:59 +02:00
$result = $mailfile -> sendfile ();
if ( $result ) {
dol_syslog ( " EMail sent to " . $sendto , LOG_DEBUG , 0 , '_payment' );
} else {
2022-05-03 20:07:21 +02:00
dol_syslog ( " Failed to send EMail to " . $sendto . ' - ' . $mailfile -> error , LOG_ERR , 0 , '_payment' );
2021-04-23 16:46:09 +02:00
}
2021-04-21 16:43:57 +02:00
}
2021-04-20 14:39:41 +02:00
}
}
} else {
2022-04-08 15:15:55 +02:00
$postactionmessages [] = 'Failed to get a valid value for "amount paid" (' . $FinalPaymentAmt . ') or "payment type id" (' . $paymentTypeId . ') to record the payment of invoice ' . $tmptag [ 'ATT' ] . '. May be payment was already recorded.' ;
2021-04-20 14:39:41 +02:00
$ispostactionok = - 1 ;
}
} else {
2021-04-20 14:49:11 +02:00
$postactionmessages [] = 'Invoice paid ' . $tmptag [ 'ATT' ] . ' was not found' ;
2021-04-20 14:39:41 +02:00
$ispostactionok = - 1 ;
}
2021-04-20 14:49:11 +02:00
} elseif ( array_key_exists ( 'BOO' , $tmptag ) && $tmptag [ 'BOO' ] > 0 ) {
2021-06-10 16:38:09 +02:00
// Record payment for booth or conference
2021-04-27 12:30:49 +02:00
include_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php' ;
$object = new Facture ( $db );
$result = $object -> fetch ( $ref );
if ( $result ) {
$FinalPaymentAmt = $_SESSION [ " FinalPaymentAmt " ];
$paymentTypeId = 0 ;
if ( $paymentmethod == 'paybox' ) {
$paymentTypeId = $conf -> global -> PAYBOX_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'paypal' ) {
$paymentTypeId = $conf -> global -> PAYPAL_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( $paymentmethod == 'stripe' ) {
$paymentTypeId = $conf -> global -> STRIPE_PAYMENT_MODE_FOR_PAYMENTS ;
}
if ( empty ( $paymentTypeId )) {
2022-03-02 15:13:17 +01:00
dol_syslog ( " paymentType = " . $paymentType , LOG_DEBUG , 0 , '_payment' );
2021-04-27 12:30:49 +02:00
if ( empty ( $paymentType )) {
$paymentType = 'CB' ;
}
2022-03-02 15:13:17 +01:00
// May return nothing when paymentType means nothing
// (for example when paymentType is 'Mark', 'Sole', 'Sale', for paypal)
2021-04-27 12:30:49 +02:00
$paymentTypeId = dol_getIdFromCode ( $db , $paymentType , 'c_paiement' , 'code' , 'id' , 1 );
2022-03-02 15:13:17 +01:00
// If previous line has returned nothing, we force to get the ID of payment of Credit Card (hard coded code 'CB').
if ( empty ( $paymentTypeId ) || $paymentTypeId < 0 ) {
$paymentTypeId = dol_getIdFromCode ( $db , 'CB' , 'c_paiement' , 'code' , 'id' , 1 );
}
2021-04-27 12:30:49 +02:00
}
// 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 ) {
$resultvalidate = $object -> validate ( $user );
if ( $resultvalidate < 0 ) {
$postactionmessages [] = 'Cannot validate invoice' ;
$ispostactionok = - 1 ;
$error ++ ; // Not yet supported
} else {
$db -> begin ();
// Creation of payment line
include_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php' ;
$paiement = new Paiement ( $db );
$paiement -> datepaye = $now ;
if ( $currencyCodeType == $conf -> currency ) {
$paiement -> amounts = array ( $object -> id => $FinalPaymentAmt ); // Array with all payments dispatching with invoice id
} else {
$paiement -> multicurrency_amounts = array ( $object -> id => $FinalPaymentAmt ); // Array with all payments dispatching
$postactionmessages [] = 'Payment was done in a different currency that currency expected of company' ;
$ispostactionok = - 1 ;
$error ++ ; // Not yet supported
}
$paiement -> paiementid = $paymentTypeId ;
$paiement -> num_payment = '' ;
$paiement -> note_public = 'Online payment ' . dol_print_date ( $now , 'standard' ) . ' from ' . $ipaddress ;
$paiement -> ext_payment_id = $TRANSACTIONID ;
$paiement -> ext_payment_site = $service ;
if ( ! $error ) {
$paiement_id = $paiement -> create ( $user , 1 ); // This include closing invoices and regenerating documents
if ( $paiement_id < 0 ) {
$postactionmessages [] = $paiement -> error . ' ' . join ( " <br> \n " , $paiement -> errors );
$ispostactionok = - 1 ;
$error ++ ;
} else {
$postactionmessages [] = 'Payment created' ;
$ispostactionok = 1 ;
}
}
if ( ! $error && ! empty ( $conf -> banque -> enabled )) {
$bankaccountid = 0 ;
if ( $paymentmethod == 'paybox' ) {
$bankaccountid = $conf -> global -> PAYBOX_BANK_ACCOUNT_FOR_PAYMENTS ;
} elseif ( $paymentmethod == 'paypal' ) {
$bankaccountid = $conf -> global -> PAYPAL_BANK_ACCOUNT_FOR_PAYMENTS ;
} elseif ( $paymentmethod == 'stripe' ) {
$bankaccountid = $conf -> global -> STRIPE_BANK_ACCOUNT_FOR_PAYMENTS ;
}
if ( $bankaccountid > 0 ) {
$label = '(CustomerInvoicePayment)' ;
if ( $object -> type == Facture :: TYPE_CREDIT_NOTE ) {
$label = '(CustomerInvoicePaymentBack)' ; // Refund of a credit note
}
$result = $paiement -> addPaymentToBank ( $user , 'payment' , $label , $bankaccountid , '' , '' );
if ( $result < 0 ) {
$postactionmessages [] = $paiement -> error . ' ' . join ( " <br> \n " , $paiement -> errors );
$ispostactionok = - 1 ;
$error ++ ;
} else {
$postactionmessages [] = 'Bank transaction of payment created' ;
$ispostactionok = 1 ;
}
} else {
2021-09-08 01:41:59 +02:00
$postactionmessages [] = 'Setup of bank account to use in module ' . $paymentmethod . ' was not set. Your payment was really executed but we failed to record it. Please contact us.' ;
2021-04-27 12:30:49 +02:00
$ispostactionok = - 1 ;
$error ++ ;
}
}
if ( ! $error ) {
// Putting the booth to "suggested" state
$booth = new ConferenceOrBooth ( $db );
2021-11-27 17:19:16 +01:00
$resultbooth = $booth -> fetch (( int ) $tmptag [ 'BOO' ]);
2021-04-27 12:30:49 +02:00
if ( $resultbooth < 0 ) {
$error ++ ;
setEventMessages ( null , $booth -> errors , " errors " );
} else {
2021-05-07 15:05:37 +02:00
$booth -> status = CONFERENCEORBOOTH :: STATUS_SUGGESTED ;
2021-04-27 12:30:49 +02:00
$resultboothupdate = $booth -> update ( $user );
if ( $resultboothupdate < 0 ) {
// Finding the thirdparty by getting the invoice
$invoice = new Facture ( $db );
$resultinvoice = $invoice -> fetch ( $ref );
if ( $resultinvoice < 0 ) {
$postactionmessages [] = 'Could not find the associated invoice.' ;
$ispostactionok = - 1 ;
$error ++ ;
} else {
$thirdparty = new Societe ( $db );
$resultthirdparty = $thirdparty -> fetch ( $invoice -> socid );
if ( $resultthirdparty < 0 ) {
$error ++ ;
setEventMessages ( null , $thirdparty -> errors , " errors " );
} else {
// Sending mail
require_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php' ;
include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php' ;
$formmail = new FormMail ( $db );
// Set output language
$outputlangs = new Translate ( '' , $conf );
$outputlangs -> setDefaultLang ( empty ( $thirdparty -> default_lang ) ? $mysoc -> default_lang : $thirdparty -> default_lang );
// Load traductions files required by page
2022-05-04 15:27:23 +02:00
$outputlangs -> loadLangs ( array ( " main " , " members " , " eventorganization " ));
2021-04-27 12:30:49 +02:00
// Get email content from template
$arraydefaultmessage = null ;
2022-05-03 20:07:21 +02:00
$idoftemplatetouse = $conf -> global -> EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH ; // Email sent after registration for a Booth
if ( ! empty ( $idoftemplatetouse )) {
$arraydefaultmessage = $formmail -> getEMailTemplate ( $db , 'conferenceorbooth' , $user , $outputlangs , $idoftemplatetouse , 1 , '' );
2021-04-27 12:30:49 +02:00
}
2022-05-03 20:07:21 +02:00
if ( ! empty ( $idoftemplatetouse ) && is_object ( $arraydefaultmessage ) && $arraydefaultmessage -> id > 0 ) {
2021-04-27 12:30:49 +02:00
$subject = $arraydefaultmessage -> topic ;
$msg = $arraydefaultmessage -> content ;
2022-05-03 20:07:21 +02:00
} else {
2022-10-18 23:28:47 +02:00
$subject = '[' . $appli . '] ' . $booth -> ref . ' - ' . $outputlangs -> trans ( " NewRegistration " ) . ']' ;
2022-05-03 20:07:21 +02:00
$msg = $outputlangs -> trans ( " OrganizationEventPaymentOfBoothWasReceived " );
2021-04-27 12:30:49 +02:00
}
$substitutionarray = getCommonSubstitutionArray ( $outputlangs , 0 , null , $thirdparty );
complete_substitutions_array ( $substitutionarray , $outputlangs , $object );
$subjecttosend = make_substitutions ( $subject , $substitutionarray , $outputlangs );
$texttosend = make_substitutions ( $msg , $substitutionarray , $outputlangs );
$sendto = $thirdparty -> email ;
$from = $conf -> global -> MAILING_EMAIL_FROM ;
$urlback = $_SERVER [ " REQUEST_URI " ];
$ishtml = dol_textishtml ( $texttosend ); // May contain urls
$mailfile = new CMailFile ( $subjecttosend , $sendto , $from , $texttosend , array (), array (), array (), '' , '' , 0 , $ishtml );
$result = $mailfile -> sendfile ();
if ( $result ) {
dol_syslog ( " EMail sent to " . $sendto , LOG_DEBUG , 0 , '_payment' );
} else {
dol_syslog ( " Failed to send EMail to " . $sendto , LOG_ERR , 0 , '_payment' );
}
}
}
}
}
}
if ( ! $error ) {
$db -> commit ();
} else {
$db -> rollback ();
}
}
} else {
2022-04-08 15:15:55 +02:00
$postactionmessages [] = 'Failed to get a valid value for "amount paid" (' . $FinalPaymentAmt . ') or "payment type id" (' . $paymentTypeId . ') to record the payment of invoice ' . $tmptag [ 'ATT' ] . '. May be payment was already recorded.' ;
2021-04-27 12:30:49 +02:00
$ispostactionok = - 1 ;
}
} else {
$postactionmessages [] = 'Invoice paid ' . $tmptag [ 'ATT' ] . ' was not found' ;
$ispostactionok = - 1 ;
}
2020-05-21 15:05:19 +02:00
} else {
2018-03-04 19:39:46 +01:00
// Nothing done
}
}
2022-10-18 23:28:47 +02:00
// Set $appli for emails title
2022-10-18 23:31:32 +02:00
$appli = $mysoc -> name ;
2022-10-18 23:28:47 +02:00
2021-02-26 18:58:34 +01:00
if ( $ispaymentok ) {
2020-09-07 10:18:17 +02:00
// Get on url call
$onlinetoken = empty ( $PAYPALTOKEN ) ? $_SESSION [ 'onlinetoken' ] : $PAYPALTOKEN ;
$payerID = empty ( $PAYPALPAYERID ) ? $_SESSION [ 'payerID' ] : $PAYPALPAYERID ;
// Set by newpayment.php
$currencyCodeType = $_SESSION [ 'currencyCodeType' ];
$FinalPaymentAmt = $_SESSION [ " FinalPaymentAmt " ];
2022-04-08 15:15:55 +02:00
$paymentType = $_SESSION [ 'PaymentType' ]; // Seems used by paypal only
2020-09-07 10:18:17 +02:00
if ( is_object ( $object ) && method_exists ( $object , 'call_trigger' )) {
// Call trigger
$result = $object -> call_trigger ( 'PAYMENTONLINE_PAYMENT_OK' , $user );
2021-02-26 18:58:34 +01:00
if ( $result < 0 ) {
$error ++ ;
}
2020-09-07 10:18:17 +02:00
// End call triggers
2021-07-06 15:35:17 +02:00
} elseif ( get_class ( $object ) == 'stdClass' ) {
2021-07-02 10:53:51 +02:00
//In some case $object is not instanciate (for paiement on custom object) We need to deal with payment
include_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php' ;
$paiement = new Paiement ( $db );
$result = $paiement -> call_trigger ( 'PAYMENTONLINE_PAYMENT_OK' , $user );
if ( $result < 0 ) $error ++ ;
2020-09-07 10:18:17 +02:00
}
2017-08-31 02:34:07 +02:00
2020-09-07 10:18:17 +02:00
print $langs -> trans ( " YourPaymentHasBeenRecorded " ) . " <br> \n " ;
2021-02-26 18:58:34 +01:00
if ( $TRANSACTIONID ) {
print $langs -> trans ( " ThisIsTransactionId " , $TRANSACTIONID ) . " <br><br> \n " ;
}
2017-09-09 10:03:09 +02:00
2020-09-07 10:18:17 +02:00
$key = 'ONLINE_PAYMENT_MESSAGE_OK' ;
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> global -> $key )) {
2021-09-15 21:12:16 +02:00
print '<br>' ;
2021-02-26 18:58:34 +01:00
print $conf -> global -> $key ;
}
2017-08-31 02:34:07 +02:00
2020-09-07 10:18:17 +02:00
$sendemail = '' ;
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> global -> ONLINE_PAYMENT_SENDEMAIL )) {
$sendemail = $conf -> global -> ONLINE_PAYMENT_SENDEMAIL ;
}
2017-08-31 02:34:07 +02:00
2020-09-07 10:18:17 +02:00
$tmptag = dolExplodeIntoArray ( $fulltag , '.' , '=' );
2018-01-30 11:24:02 +01:00
2020-09-07 10:18:17 +02:00
dol_syslog ( " Send email to admins if we have to (sendemail = " . $sendemail . " ) " , LOG_DEBUG , 0 , '_payment' );
2018-09-01 16:51:40 +02:00
2018-09-01 17:10:47 +02:00
// Send an email to admins
2021-02-26 18:58:34 +01:00
if ( $sendemail ) {
2018-03-04 19:39:46 +01:00
$companylangs = new Translate ( '' , $conf );
$companylangs -> setDefaultLang ( $mysoc -> default_lang );
2020-04-10 10:59:32 +02:00
$companylangs -> loadLangs ( array ( 'main' , 'members' , 'bills' , 'paypal' , 'paybox' ));
2018-03-04 19:39:46 +01:00
2020-04-10 10:59:32 +02:00
$sendto = $sendemail ;
2023-01-09 15:37:10 +01:00
$from = ! empty ( $conf -> global -> MAILING_EMAIL_FROM ) ? $conf -> global -> MAILING_EMAIL_FROM : getDolGlobalString ( " MAIN_MAIL_EMAIL_FROM " );
2017-05-13 14:03:09 +02:00
// Define $urlwithroot
2020-04-10 10:59:32 +02:00
$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
2017-05-13 14:03:09 +02:00
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
2017-05-14 16:17:00 +02:00
// Define link to login card
2017-08-31 02:34:07 +02:00
2020-04-10 10:59:32 +02:00
$urlback = $_SERVER [ " REQUEST_URI " ];
$topic = '[' . $appli . '] ' . $companylangs -> transnoentitiesnoconv ( " NewOnlinePaymentReceived " );
$content = " " ;
2021-02-26 18:58:34 +01:00
if ( array_key_exists ( 'MEM' , $tmptag )) {
2021-11-27 17:19:16 +01:00
$url = $urlwithroot . " /adherents/subscription.php?rowid= " . (( int ) $tmptag [ 'MEM' ]);
2020-04-10 10:59:32 +02:00
$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 " ;
2021-02-26 18:58:34 +01:00
} elseif ( array_key_exists ( 'INV' , $tmptag )) {
2021-11-27 17:19:16 +01:00
$url = $urlwithroot . " /compta/facture/card.php?id= " . (( int ) $tmptag [ 'INV' ]);
2020-04-10 10:59:32 +02:00
$content .= '<strong>' . $companylangs -> trans ( " Payment " ) . " </strong><br><br> \n " ;
$content .= $companylangs -> trans ( " InvoiceId " ) . ': <strong>' . $tmptag [ 'INV' ] . " </strong><br> \n " ;
2018-03-04 19:39:46 +01:00
//$content.=$companylangs->trans("ThirdPartyId").': '.$tmptag['CUS']."<br>\n";
2020-04-10 10:59:32 +02:00
$content .= $companylangs -> trans ( " Link " ) . ': <a href="' . $url . '">' . $url . '</a>' . " <br> \n " ;
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$content .= $companylangs -> transnoentitiesnoconv ( " NewOnlinePaymentReceived " ) . " <br> \n " ;
2017-05-13 14:03:09 +02:00
}
2020-04-10 10:59:32 +02:00
$content .= $companylangs -> transnoentities ( " PostActionAfterPayment " ) . ' : ' ;
2021-02-26 18:58:34 +01:00
if ( $ispostactionok > 0 ) {
2018-03-04 19:39:46 +01:00
//$topic.=' ('.$companylangs->transnoentitiesnoconv("Status").' '.$companylangs->transnoentitiesnoconv("OK").')';
2021-10-05 10:01:37 +02:00
$content .= '<span style="color: green">' . $companylangs -> transnoentitiesnoconv ( " OK " ) . '</span>' ;
2021-02-26 18:58:34 +01:00
} elseif ( $ispostactionok == 0 ) {
2020-04-10 10:59:32 +02:00
$content .= $companylangs -> transnoentitiesnoconv ( " None " );
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$topic .= ( $ispostactionok ? '' : ' (' . $companylangs -> trans ( " WarningPostActionErrorAfterPayment " ) . ')' );
2021-10-05 10:01:37 +02:00
$content .= '<span style="color: red">' . $companylangs -> transnoentitiesnoconv ( " Error " ) . '</span>' ;
2018-03-04 19:39:46 +01:00
}
2020-04-10 10:59:32 +02:00
$content .= '<br>' . " \n " ;
2021-02-26 18:58:34 +01:00
foreach ( $postactionmessages as $postactionmessage ) {
2020-04-10 10:59:32 +02:00
$content .= ' * ' . $postactionmessage . '<br>' . " \n " ;
2018-03-04 19:39:46 +01:00
}
2021-02-26 18:58:34 +01:00
if ( $ispostactionok < 0 ) {
2020-04-10 10:59:32 +02:00
$content .= $langs -> transnoentities ( " ARollbackWasPerformedOnPostActions " );
2018-03-06 00:12:23 +01:00
}
2020-04-10 10:59:32 +02:00
$content .= '<br>' . " \n " ;
2018-03-04 19:39:46 +01:00
2020-04-10 10:59:32 +02:00
$content .= " <br> \n " ;
$content .= '<u>' . $companylangs -> transnoentitiesnoconv ( " TechnicalInformation " ) . " :</u><br> \n " ;
$content .= $companylangs -> transnoentitiesnoconv ( " OnlinePaymentSystem " ) . ': <strong>' . $paymentmethod . " </strong><br> \n " ;
$content .= $companylangs -> transnoentitiesnoconv ( " ThisIsTransactionId " ) . ': <strong>' . $TRANSACTIONID . " </strong><br> \n " ;
$content .= $companylangs -> transnoentitiesnoconv ( " ReturnURLAfterPayment " ) . ': ' . $urlback . " <br> \n " ;
$content .= " <br> \n " ;
$content .= " tag= " . $fulltag . " <br> \n token= " . $onlinetoken . " <br> \n paymentType= " . $paymentType . " <br> \n currencycodeType= " . $currencyCodeType . " <br> \n payerId= " . $payerID . " <br> \n ipaddress= " . $ipaddress . " <br> \n FinalPaymentAmt= " . $FinalPaymentAmt . " <br> \n " ;
2017-05-13 14:03:09 +02:00
2021-02-26 18:58:34 +01:00
if ( ! empty ( $ErrorCode )) {
$content .= " ErrorCode = " . $ErrorCode . " <br> \n " ;
}
if ( ! empty ( $ErrorShortMsg )) {
$content .= " ErrorShortMsg = " . $ErrorShortMsg . " <br> \n " ;
}
if ( ! empty ( $ErrorLongMsg )) {
$content .= " ErrorLongMsg = " . $ErrorLongMsg . " <br> \n " ;
}
if ( ! empty ( $ErrorSeverityCode )) {
$content .= " ErrorSeverityCode = " . $ErrorSeverityCode . " <br> \n " ;
}
2018-09-12 16:11:10 +02:00
2021-04-22 14:48:05 +02:00
2020-04-10 10:59:32 +02:00
$ishtml = dol_textishtml ( $content ); // May contain urls
2017-05-13 14:03:09 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php' ;
$mailfile = new CMailFile ( $topic , $sendto , $from , $content , array (), array (), array (), '' , '' , 0 , $ishtml );
2020-04-10 10:59:32 +02:00
$result = $mailfile -> sendfile ();
2021-02-26 18:58:34 +01:00
if ( $result ) {
2017-05-13 14:03:09 +02:00
dol_syslog ( " EMail sent to " . $sendto , LOG_DEBUG , 0 , '_payment' );
2020-01-01 12:47:01 +01:00
//dol_syslog("EMail sent to ".$sendto, LOG_DEBUG, 0);
2020-05-21 15:05:19 +02:00
} else {
2017-05-13 14:03:09 +02:00
dol_syslog ( " Failed to send EMail to " . $sendto , LOG_ERR , 0 , '_payment' );
2020-01-01 12:47:01 +01:00
//dol_syslog("Failed to send EMail to ".$sendto, LOG_ERR, 0);
2017-05-13 14:03:09 +02:00
}
2017-04-23 02:44:38 +02:00
}
2020-05-21 15:05:19 +02:00
} else {
2020-09-07 10:18:17 +02:00
// Get on url call
2020-04-10 10:59:32 +02:00
$onlinetoken = empty ( $PAYPALTOKEN ) ? $_SESSION [ 'onlinetoken' ] : $PAYPALTOKEN ;
2020-09-07 10:18:17 +02:00
$payerID = empty ( $PAYPALPAYERID ) ? $_SESSION [ 'payerID' ] : $PAYPALPAYERID ;
// Set by newpayment.php
$paymentType = $_SESSION [ 'PaymentType' ];
$currencyCodeType = $_SESSION [ 'currencyCodeType' ];
$FinalPaymentAmt = $_SESSION [ " FinalPaymentAmt " ];
if ( is_object ( $object ) && method_exists ( $object , 'call_trigger' )) {
// Call trigger
$result = $object -> call_trigger ( 'PAYMENTONLINE_PAYMENT_KO' , $user );
2021-02-26 18:58:34 +01:00
if ( $result < 0 ) {
$error ++ ;
}
2020-09-07 10:18:17 +02:00
// End call triggers
}
print $langs -> trans ( 'DoExpressCheckoutPaymentAPICallFailed' ) . " <br> \n " ;
print $langs -> trans ( 'DetailedErrorMessage' ) . " : " . $ErrorLongMsg . " <br> \n " ;
print $langs -> trans ( 'ShortErrorMessage' ) . " : " . $ErrorShortMsg . " <br> \n " ;
print $langs -> trans ( 'ErrorCode' ) . " : " . $ErrorCode . " <br> \n " ;
print $langs -> trans ( 'ErrorSeverityCode' ) . " : " . $ErrorSeverityCode . " <br> \n " ;
2021-02-26 18:58:34 +01:00
if ( $mysoc -> email ) {
print " \n Please, send a screenshot of this page to " . $mysoc -> email . " <br> \n " ;
}
2020-09-07 10:18:17 +02:00
$sendemail = '' ;
2021-02-26 18:58:34 +01:00
if ( ! empty ( $conf -> global -> PAYMENTONLINE_SENDEMAIL )) {
$sendemail = $conf -> global -> PAYMENTONLINE_SENDEMAIL ;
}
2020-09-07 10:18:17 +02:00
// TODO Remove local option to keep only the generic one ?
2021-02-26 18:58:34 +01:00
if ( $paymentmethod == 'paypal' && ! empty ( $conf -> global -> PAYPAL_PAYONLINE_SENDEMAIL )) {
$sendemail = $conf -> global -> PAYPAL_PAYONLINE_SENDEMAIL ;
} elseif ( $paymentmethod == 'paybox' && ! empty ( $conf -> global -> PAYBOX_PAYONLINE_SENDEMAIL )) {
$sendemail = $conf -> global -> PAYBOX_PAYONLINE_SENDEMAIL ;
} elseif ( $paymentmethod == 'stripe' && ! empty ( $conf -> global -> STRIPE_PAYONLINE_SENDEMAIL )) {
$sendemail = $conf -> global -> STRIPE_PAYONLINE_SENDEMAIL ;
}
2020-09-07 10:18:17 +02:00
// Send warning of error to administrator
2021-02-26 18:58:34 +01:00
if ( $sendemail ) {
2020-09-07 10:18:17 +02:00
$companylangs = new Translate ( '' , $conf );
$companylangs -> setDefaultLang ( $mysoc -> default_lang );
$companylangs -> loadLangs ( array ( 'main' , 'members' , 'bills' , 'paypal' , 'paybox' ));
$sendto = $sendemail ;
2023-01-09 15:37:10 +01:00
$from = ! empty ( $conf -> global -> MAILING_EMAIL_FROM ) ? $conf -> global -> MAILING_EMAIL_FROM : getDolGlobalString ( " MAIN_MAIL_EMAIL_FROM " );
2020-09-07 10:18:17 +02:00
// 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
$urlback = $_SERVER [ " REQUEST_URI " ];
$topic = '[' . $appli . '] ' . $companylangs -> transnoentitiesnoconv ( " ValidationOfPaymentFailed " );
$content = " " ;
2021-10-05 10:01:37 +02:00
$content .= '<span style="color: orange">' . $companylangs -> transnoentitiesnoconv ( " PaymentSystemConfirmPaymentPageWasCalledButFailed " ) . " </span> \n " ;
2020-09-07 10:18:17 +02:00
$content .= " <br><br> \n " ;
$content .= '<u>' . $companylangs -> transnoentitiesnoconv ( " TechnicalInformation " ) . " :</u><br> \n " ;
$content .= $companylangs -> transnoentitiesnoconv ( " OnlinePaymentSystem " ) . ': <strong>' . $paymentmethod . " </strong><br> \n " ;
$content .= $companylangs -> transnoentitiesnoconv ( " ReturnURLAfterPayment " ) . ': ' . $urlback . " <br> \n " ;
$content .= " <br> \n " ;
$content .= " tag= " . $fulltag . " <br> \n token= " . $onlinetoken . " <br> \n paymentType= " . $paymentType . " <br> \n currencycodeType= " . $currencyCodeType . " <br> \n payerId= " . $payerID . " <br> \n ipaddress= " . $ipaddress . " <br> \n FinalPaymentAmt= " . $FinalPaymentAmt . " <br> \n " ;
$ishtml = dol_textishtml ( $content ); // May contain urls
require_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php' ;
$mailfile = new CMailFile ( $topic , $sendto , $from , $content , array (), array (), array (), '' , '' , 0 , $ishtml );
$result = $mailfile -> sendfile ();
2021-02-26 18:58:34 +01:00
if ( $result ) {
2020-09-07 10:18:17 +02:00
dol_syslog ( " EMail sent to " . $sendto , LOG_DEBUG , 0 , '_payment' );
} else {
dol_syslog ( " Failed to send EMail to " . $sendto , LOG_ERR , 0 , '_payment' );
}
}
2017-04-23 02:44:38 +02:00
}
2017-05-13 14:03:09 +02:00
2017-04-23 02:44:38 +02:00
print " \n </div> \n " ;
2021-11-27 19:04:39 +01:00
print " <!-- Info for payment: FinalPaymentAmt= " . dol_escape_htmltag ( $FinalPaymentAmt ) . " paymentTypeId= " . dol_escape_htmltag ( $paymentTypeId ) . " currencyCodeType= " . dol_escape_htmltag ( $currencyCodeType ) . " --> \n " ;
2021-11-27 18:29:31 +01:00
2017-05-13 14:03:09 +02:00
2019-01-27 11:55:16 +01:00
htmlPrintOnlinePaymentFooter ( $mysoc , $langs , 0 , $suffix );
2017-04-23 02:44:38 +02:00
2018-03-04 19:39:46 +01:00
// Clean session variables to avoid duplicate actions if post is resent
unset ( $_SESSION [ " FinalPaymentAmt " ]);
unset ( $_SESSION [ " TRANSACTIONID " ]);
2018-03-05 21:46:24 +01:00
2017-05-13 15:19:35 +02:00
llxFooter ( '' , 'public' );
2017-04-23 02:44:38 +02:00
$db -> close ();