diff --git a/htdocs/core/modules/modStripe.class.php b/htdocs/core/modules/modStripe.class.php
index 4f4b15fa0a4b1..e7e20be5b83d2 100644
--- a/htdocs/core/modules/modStripe.class.php
+++ b/htdocs/core/modules/modStripe.class.php
@@ -65,7 +65,7 @@ function __construct($db)
$this->picto='stripe@stripe';
// Data directories to create when module is enabled.
- $this->dirs = array('/stripe/temp');
+ $this->dirs = array();
// Config pages. Put here list of php page names stored in admmin directory used to setup module.
$this->config_page_url = array("stripe.php@stripe");
diff --git a/htdocs/install/mysql/migration/5.0.0-6.0.0.sql b/htdocs/install/mysql/migration/5.0.0-6.0.0.sql
index bf28e6a3db669..7572e0d2030b9 100644
--- a/htdocs/install/mysql/migration/5.0.0-6.0.0.sql
+++ b/htdocs/install/mysql/migration/5.0.0-6.0.0.sql
@@ -117,17 +117,33 @@ CREATE TABLE llx_product_attribute_combination
entity INT DEFAULT 1 NOT NULL
);
-INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (1,'VT', 'Journal des ventes', 1, 1);
-INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (2,'AC', 'Journal des achats', 2, 1);
-INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (3,'BQ', 'Journal de banque', 3, 1);
-INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (4,'OD', 'Journal des opérations diverses', 0, 1);
-INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (5,'AN', 'Journal des à-nouveaux', 9, 1);
-ALTER TABLE llx_accounting_journal ADD COLUMN entity integer DEFAULT 1;
+ALTER TABLE llx_bank_account drop foreign key bank_fk_accountancy_journal;
-ALTER TABLE llx_paiementfourn ADD COLUMN model_pdf varchar(255);
+-- Add journal entries
+INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (1,'VT', 'Sale journal', 2, 1);
+INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (2,'AC', 'Purchase journal', 3, 1);
+INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (3,'BQ', 'Bank journal', 4, 1);
+INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (4,'OD', 'Other journal', 1, 1);
+INSERT INTO llx_accounting_journal (rowid, code, label, nature, active) VALUES (5,'AN', 'Has new journal', 9, 1);
+-- Fix old entries
+UPDATE llx_accounting_journal SET nature = 1 where code = 'OD' and nature = 0;
+UPDATE llx_accounting_journal SET nature = 2 where code = 'VT' and nature = 1;
+UPDATE llx_accounting_journal SET nature = 3 where code = 'AC' and nature = 2;
+UPDATE llx_accounting_journal SET nature = 4 where (code = 'BK' or code = 'BQ') and nature = 3;
+
+UPDATE llx_bank_account as ba set accountancy_journal = 'BQ' where accountancy_journal = 'BK';
+UPDATE llx_bank_account as ba set accountancy_journal = 'OD' where accountancy_journal IS NULL;
+
+ALTER TABLE llx_bank_account ADD COLUMN fk_accountancy_journal integer;
+ALTER TABLE llx_bank_account ADD INDEX idx_fk_accountancy_journal (fk_accountancy_journal);
+
+UPDATE llx_bank_account as ba set fk_accountancy_journal = (SELECT rowid FROM llx_accounting_journal as aj where ba.accountancy_journal = aj.code) where accountancy_journal not in ('1', '2', '3', '4', '5', '6', '5', '8', '9', '10', '11', '12', '13', '14', '15');
+ALTER TABLE llx_bank_account ADD CONSTRAINT fk_bank_account_accountancy_journal FOREIGN KEY (fk_accountancy_journal) REFERENCES llx_accounting_journal (rowid);
+ALTER TABLE llx_paiementfourn ADD COLUMN model_pdf varchar(255);
+
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_CREATE','Expense report created','Executed when an expense report is created','expensereport',201);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202);
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203);
@@ -262,14 +278,6 @@ insert into llx_c_tva(fk_pays,taux,code,recuperableonly,localtax1,localtax1_type
ALTER TABLE llx_events MODIFY COLUMN ip varchar(250);
-UPDATE llx_accounting_journal SET nature = 1 where code = 'OD' and nature = 0;
-UPDATE llx_accounting_journal SET nature = 2 where code = 'VT' and nature = 1;
-UPDATE llx_accounting_journal SET nature = 3 where code = 'AC' and nature = 2;
-UPDATE llx_accounting_journal SET nature = 4 where (code = 'BK' or code = 'BQ') and nature = 3;
-
-
-ALTER TABLE llx_bank_account CHANGE COLUMN accountancy_journal fk_accountancy_journal integer;
---ALTER TABLE llx_bank_account ADD CONSTRAINT bank_fk_accountancy_journal FOREIGN KEY (fk_accountancy_journal) REFERENCES llx_accounting_journal (rowid);
diff --git a/htdocs/install/mysql/tables/llx_bank_account.key.sql b/htdocs/install/mysql/tables/llx_bank_account.key.sql
index 986ca7ea55015..c5f2786fd2482 100644
--- a/htdocs/install/mysql/tables/llx_bank_account.key.sql
+++ b/htdocs/install/mysql/tables/llx_bank_account.key.sql
@@ -19,5 +19,6 @@
ALTER TABLE llx_bank_account ADD UNIQUE uk_bank_account_label (label,entity);
+ALTER TABLE llx_bank_account ADD INDEX idx_fk_accountancy_journal (fk_accountancy_journal);
--- ALTER TABLE llx_bank_account ADD CONSTRAINT bank_fk_accountancy_journal FOREIGN KEY (fk_accountancy_journal) REFERENCES llx_accounting_journal (rowid);
+ALTER TABLE llx_bank_account ADD CONSTRAINT fk_bank_account_accountancy_journal FOREIGN KEY (fk_accountancy_journal) REFERENCES llx_accounting_journal (rowid);
diff --git a/htdocs/langs/en_US/paybox.lang b/htdocs/langs/en_US/paybox.lang
index c0a55888e7c4f..91fe071627c00 100644
--- a/htdocs/langs/en_US/paybox.lang
+++ b/htdocs/langs/en_US/paybox.lang
@@ -11,6 +11,7 @@ YourEMail=Email to receive payment confirmation
Creditor=Creditor
PaymentCode=Payment code
PayBoxDoPayment=Go on payment
+ToPay=Do payment
YouWillBeRedirectedOnPayBox=You will be redirected on secured Paybox page to input you credit card information
Continue=Next
ToOfferALinkForOnlinePayment=URL for %s payment
diff --git a/htdocs/langs/en_US/paypal.lang b/htdocs/langs/en_US/paypal.lang
index 3c6995270186c..a0cadc88096f0 100644
--- a/htdocs/langs/en_US/paypal.lang
+++ b/htdocs/langs/en_US/paypal.lang
@@ -16,15 +16,17 @@ ThisIsTransactionId=This is id of transaction: %s
PAYPAL_ADD_PAYMENT_URL=Add the url of Paypal payment when you send a document by mail
PredefinedMailContentLink=You can click on the secure link below to make your payment (PayPal) if it is not already done.\n\n%s\n\n
YouAreCurrentlyInSandboxMode=You are currently in the "sandbox" mode
-NewPaypalPaymentReceived=New Paypal payment received
-NewPaypalPaymentFailed=New Paypal payment tried but failed
+NewOnlinePaymentReceived=New online payment received
+NewOnlinePaymentFailed=New online payment tried but failed
PAYPAL_PAYONLINE_SENDEMAIL=EMail to warn after a payment (success or not)
ReturnURLAfterPayment=Return URL after payment
-ValidationOfPaypalPaymentFailed=Validation of Paypal payment failed
-PaypalConfirmPaymentPageWasCalledButFailed=Payment confirmation page for Paypal was called by Paypal but confirmation failed
+ValidationOfOnlinePaymentFailed=Validation of online payment failed
+PaymentSystemConfirmPaymentPageWasCalledButFailed=Payment confirmation page was called by payment system returned an error
SetExpressCheckoutAPICallFailed=SetExpressCheckout API call failed.
DoExpressCheckoutPaymentAPICallFailed=DoExpressCheckoutPayment API call failed.
DetailedErrorMessage=Detailed Error Message
ShortErrorMessage=Short Error Message
ErrorCode=Error Code
ErrorSeverityCode=Error Severity Code
+OnlinePaymentSystem=Online payment system
+PaypalLiveEnabled=Paypal live enabled (otherwise test/sandbox mode)
\ No newline at end of file
diff --git a/htdocs/langs/en_US/stripe.lang b/htdocs/langs/en_US/stripe.lang
index 3f85dc2d544f5..c115a76603cb0 100644
--- a/htdocs/langs/en_US/stripe.lang
+++ b/htdocs/langs/en_US/stripe.lang
@@ -9,6 +9,7 @@ ThisScreenAllowsYouToPay=This screen allow you to make an online payment to %s.
ThisIsInformationOnPayment=This is information on payment to do
ToComplete=To complete
YourEMail=Email to receive payment confirmation
+STRIPE_PAYONLINE_SENDEMAIL=EMail to warn after a payment (success or not)
Creditor=Creditor
PaymentCode=Payment code
StripeDoPayment=Go on payment
@@ -38,4 +39,4 @@ STRIPE_TEST_SECRET_KEY=Secret test key
STRIPE_TEST_PUBLISHABLE_KEY=Publishable test key
STRIPE_LIVE_SECRET_KEY=Secret live key
STRIPE_LIVE_PUBLISHABLE_KEY=Publishable live key
-StripeLiveEnabled=Stripe live enabled
\ No newline at end of file
+StripeLiveEnabled=Stripe live enabled (otherwise test/sandbox mode)
\ No newline at end of file
diff --git a/htdocs/paypal/admin/paypal.php b/htdocs/paypal/admin/paypal.php
index 36c8df9d0d678..2d0be83c80d11 100644
--- a/htdocs/paypal/admin/paypal.php
+++ b/htdocs/paypal/admin/paypal.php
@@ -44,8 +44,6 @@
{
$db->begin();
- $result=dolibarr_set_const($db, "PAYPAL_API_SANDBOX",GETPOST('PAYPAL_API_SANDBOX','alpha'),'chaine',0,'',$conf->entity);
- if (! $result > 0) $error++;
$result=dolibarr_set_const($db, "PAYPAL_API_USER",GETPOST('PAYPAL_API_USER','alpha'),'chaine',0,'',$conf->entity);
if (! $result > 0) $error++;
$result=dolibarr_set_const($db, "PAYPAL_API_PASSWORD",GETPOST('PAYPAL_API_PASSWORD','alpha'),'chaine',0,'',$conf->entity);
@@ -85,6 +83,21 @@
}
}
+if ($action=="setlive")
+{
+ $liveenable = GETPOST('value','int')?0:1;
+ $res = dolibarr_set_const($db, "PAYPAL_API_SANDBOX", $liveenable,'yesno',0,'',$conf->entity);
+ if (! $res > 0) $error++;
+ if (! $error)
+ {
+ setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
+ }
+ else
+ {
+ setEventMessages($langs->trans("Error"), null, 'errors');
+ }
+}
+
/*
* View
@@ -127,13 +140,21 @@
print '
'.$langs->trans("Value").' ';
print "\n";
-
-print '';
-print $langs->trans("PAYPAL_API_SANDBOX").' ';
-print $form->selectyesno("PAYPAL_API_SANDBOX",$conf->global->PAYPAL_API_SANDBOX,1);
+print ' ';
+print '';
+print $langs->trans("PaypalLiveEnabled").' ';
+if (empty($conf->global->PAYPAL_API_SANDBOX))
+{
+ print '';
+ print img_picto($langs->trans("Activated"),'switch_on');
+}
+else
+{
+ print ' ';
+ print img_picto($langs->trans("Disabled"),'switch_off');
+}
print ' ';
-
print '';
print $langs->trans("PAYPAL_API_USER").' ';
print ' ';
diff --git a/htdocs/public/paybox/paymentko.php b/htdocs/public/paybox/paymentko.php
index be5b388f6edcc..9cc8a07ea700e 100644
--- a/htdocs/public/paybox/paymentko.php
+++ b/htdocs/public/paybox/paymentko.php
@@ -20,7 +20,6 @@
* \file htdocs/public/paybox/paymentko.php
* \ingroup paybox
* \brief File to show page after a failed payment
- * \author Laurent Destailleur
*/
define("NOLOGIN",1); // This means this output page does not require to be logged.
@@ -52,6 +51,8 @@
$object = new stdClass(); // For triggers
+$paymentmethod='paybox';
+
/*
* Actions
@@ -72,51 +73,74 @@
dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_paybox');
-// Appel des triggers
-include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-$interface=new Interfaces($db);
-$result=$interface->run_triggers('PAYBOX_PAYMENT_OK',$object,$user,$langs,$conf);
-if ($result < 0) { $error++; $errors=$interface->errors; }
-// Fin appel triggers
-
-
-// Send an email
-if (! empty($conf->global->PAYBOX_PAYONLINE_SENDEMAIL))
+if (! empty($_SESSION['ipaddress'])) // To avoid to make action twice
{
- $sendto=$conf->global->PAYBOX_PAYONLINE_SENDEMAIL;
- $from=$conf->global->MAILING_EMAIL_FROM;
-
- // Define link to login card
- $appli=constant('DOL_APPLICATION_TITLE');
- if (! empty($conf->global->MAIN_APPLICATION_TITLE))
- {
- $appli=$conf->global->MAIN_APPLICATION_TITLE;
- if (preg_match('/\d\.\d/', $appli))
- {
- if (! preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) $appli.=" (".DOL_VERSION.")"; // If new title contains a version that is different than core
- }
- else $appli.=" ".DOL_VERSION;
- }
- else $appli.=" ".DOL_VERSION;
-
- $urlback=$_SERVER["REQUEST_URI"];
- $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewPayboxPaymentFailed");
- $content=$langs->transnoentitiesnoconv("NewPayboxPaymentFailed")."\n".$fulltag;
- require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
- $mailfile = new CMailFile($topic, $sendto, $from, $content);
-
- $result=$mailfile->sendfile();
- if ($result)
- {
- dol_syslog("EMail sent to ".$sendto, LOG_DEBUG, 0, '_paybox');
- }
- else
- {
- dol_syslog("Failed to send EMail to ".$sendto, LOG_ERR, 0, '_paybox');
- }
+ // Get on url call
+ $fulltag = $FULLTAG;
+ $onlinetoken = empty($PAYPALTOKEN)?$_SESSION['onlinetoken']:$PAYPALTOKEN;
+ $payerID = empty($PAYPALPAYERID)?$_SESSION['payerID']:$PAYPALPAYERID;
+ // Set by newpayment.php
+ $paymentType = $_SESSION['PaymentType'];
+ $currencyCodeType = $_SESSION['currencyCodeType'];
+ $FinalPaymentAmt = $_SESSION["Payment_Amount"];
+ // From env
+ $ipaddress = $_SESSION['ipaddress'];
+
+ // Appel des triggers
+ include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
+ $interface=new Interfaces($db);
+ $result=$interface->run_triggers('PAYBOX_PAYMENT_OK',$object,$user,$langs,$conf);
+ if ($result < 0) { $error++; $errors=$interface->errors; }
+ // Fin appel triggers
+
+ // Send an email
+ $sendemail = '';
+ if (! empty($conf->global->PAYBOX_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->PAYBOX_PAYONLINE_SENDEMAIL;
+
+ if ($sendemail)
+ {
+ $sendto=$sendemail;
+ $from=$conf->global->MAILING_EMAIL_FROM;
+
+ // Define link to login card
+ $appli=constant('DOL_APPLICATION_TITLE');
+ if (! empty($conf->global->MAIN_APPLICATION_TITLE))
+ {
+ $appli=$conf->global->MAIN_APPLICATION_TITLE;
+ if (preg_match('/\d\.\d/', $appli))
+ {
+ if (! preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) $appli.=" (".DOL_VERSION.")"; // If new title contains a version that is different than core
+ }
+ else $appli.=" ".DOL_VERSION;
+ }
+ else $appli.=" ".DOL_VERSION;
+
+ $urlback=$_SERVER["REQUEST_URI"];
+ $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewOnlinePaymentFailed");
+ $content="";
+ $content.=$langs->transnoentitiesnoconv("ValidationOfOnlinePaymentFailed")."\n";
+ $content.="\n";
+ $content.=$langs->transnoentitiesnoconv("TechnicalInformation").":\n";
+ $content.=$langs->transnoentitiesnoconv("OnlinePaymentSystem").': '.$paymentmethod." \n";
+ $content.=$langs->transnoentitiesnoconv("ReturnURLAfterPayment").': '.$urlback."\n";
+ $content.="tag=".$fulltag."\npaymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
+ require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
+ $mailfile = new CMailFile($topic, $sendto, $from, $content);
+
+ $result=$mailfile->sendfile();
+ if ($result)
+ {
+ dol_syslog("EMail sent to ".$sendto, LOG_DEBUG, 0, '_paybox');
+ }
+ else
+ {
+ dol_syslog("Failed to send EMail to ".$sendto, LOG_ERR, 0, '_paybox');
+ }
+ }
+
+ unset($_SESSION['ipaddress']);
}
-
$head='';
if (! empty($conf->global->PAYBOX_CSS_URL)) $head=' '."\n";
diff --git a/htdocs/public/paybox/paymentok.php b/htdocs/public/paybox/paymentok.php
index 0e91189e242a9..b59034b774e18 100644
--- a/htdocs/public/paybox/paymentok.php
+++ b/htdocs/public/paybox/paymentok.php
@@ -20,7 +20,6 @@
* \file htdocs/public/paybox/paymentok.php
* \ingroup paybox
* \brief File to show page after a successful payment
- * \author Laurent Destailleur
*/
define("NOLOGIN",1); // This means this output page does not require to be logged.
@@ -62,6 +61,8 @@
$object = new stdClass(); // For triggers
+$paymentmethod='paybox';
+
/*
* Actions
@@ -97,7 +98,7 @@
// Get on url call
/*
-$token = $PAYBOXTOKEN;
+$onlinetoken = $PAYBOXTOKEN;
*/
$fulltag = $FULLTAG;
/*$payerID = $PAYBOXPAYERID;
@@ -108,7 +109,7 @@
// From env
$ipaddress = $_SESSION['ipaddress'];
-dol_syslog("Call newpaymentok with token=".$token." paymentType=".$paymentType." currencyCodeType=".$currencyCodeType." payerID=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt." fulltag=".$fulltag);
+dol_syslog("Call newpaymentok with token=".$onlinetoken." paymentType=".$paymentType." currencyCodeType=".$currencyCodeType." payerID=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt." fulltag=".$fulltag);
*/
@@ -149,7 +150,7 @@
else $appli.=" ".DOL_VERSION;
$urlback=$_SERVER["REQUEST_URI"];
- $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewPayboxPaymentReceived");
+ $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewOnlinePaymentReceived");
$tmptag=dolExplodeIntoArray($fulltag,'.','=');
$content="";
if (! empty($tmptag['MEM']))
@@ -162,10 +163,11 @@
}
else
{
- $content.=$langs->transnoentitiesnoconv("NewPayboxPaymentReceived")." \n";
+ $content.=$langs->transnoentitiesnoconv("NewOnlinePaymentReceived")." \n";
}
$content.=" \n";
$content.=$langs->transnoentitiesnoconv("TechnicalInformation").": \n";
+ $content.=$langs->transnoentitiesnoconv("OnlinePaymentSystem").': '.$paymentmethod." \n";
$content.=$langs->transnoentitiesnoconv("ReturnURLAfterPayment").': '.$urlback." \n";
$content.="tag=".$fulltag." \n";
diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php
index 1ea8e7385eafc..788321b62120c 100644
--- a/htdocs/public/payment/newpayment.php
+++ b/htdocs/public/payment/newpayment.php
@@ -1,6 +1,6 @@
- * Copyright (C) 2006-2012 Laurent Destailleur
+ * Copyright (C) 2006-2017 Laurent Destailleur
* Copyright (C) 2009-2012 Regis Houssin
*
* This program is free software; you can redistribute it and/or modify
@@ -24,7 +24,6 @@
* \file htdocs/public/payment/newpayment.php
* \ingroup core
* \brief File to offer a way to make a payment for a particular Dolibarr entity
- * \author Laurent Destailleur
*/
define("NOLOGIN",1); // This means this output page does not require to be logged.
@@ -43,7 +42,7 @@
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
// Security check
-//if (empty($conf->paypal->enabled)) accessforbidden('',0,0,1);
+// No check on module enabled. Done later according to $validpaymentmethod
$langs->load("main");
$langs->load("other");
@@ -115,7 +114,7 @@
$TAG=GETPOST("tag",'alpha');
$FULLTAG=GETPOST("fulltag",'alpha'); // fulltag is tag with more informations
$SECUREKEY=GETPOST("securekey"); // Secure key
-if ($paymentmethod) $FULLTAG.=($FULLTAG?'.':'').'PM='.$paymentmethod;
+if ($paymentmethod && ! preg_match('/'.preg_quote('PM='.$paymentmethod,'/').'/', $FULLTAG)) $FULLTAG.=($FULLTAG?'.':'').'PM='.$paymentmethod;
if (! empty($SOURCE))
{
@@ -502,10 +501,13 @@
$result=$order->fetch_thirdparty($order->socid);
}
- $amount=$order->total_ttc;
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
-
+ if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
+ {
+ $amount=$order->total_ttc;
+ if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
+ $amount=price2num($amount);
+ }
+
$fulltag='ORD='.$order->ref.'.CUS='.$order->thirdparty->id;
//$fulltag.='.NAM='.strtr($order->thirdparty->name,"-"," ");
if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
@@ -609,10 +611,13 @@
$result=$invoice->fetch_thirdparty($invoice->socid);
}
- $amount=price2num($invoice->total_ttc - $invoice->getSommePaiement());
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
-
+ if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
+ {
+ $amount=price2num($invoice->total_ttc - $invoice->getSommePaiement());
+ if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
+ $amount=price2num($amount);
+ }
+
$fulltag='INV='.$invoice->ref.'.CUS='.$invoice->thirdparty->id;
//$fulltag.='.NAM='.strtr($invoice->thirdparty->name,"-"," ");
if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
@@ -733,35 +738,38 @@
}
}
- $amount=$contractline->total_ttc;
- if ($contractline->fk_product)
- {
- $product=new Product($db);
- $result=$product->fetch($contractline->fk_product);
-
- // We define price for product (TODO Put this in a method in product class)
- if (! empty($conf->global->PRODUIT_MULTIPRICES))
- {
- $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
- $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
- $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
- }
- else
- {
- $pu_ht = $product->price;
- $pu_ttc = $product->price_ttc;
- $price_base_type = $product->price_base_type;
- }
-
- $amount=$pu_ttc;
- if (empty($amount))
- {
- dol_print_error('','ErrorNoPriceDefinedForThisProduct');
- exit;
- }
- }
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
+ if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
+ {
+ $amount=$contractline->total_ttc;
+ if ($contractline->fk_product)
+ {
+ $product=new Product($db);
+ $result=$product->fetch($contractline->fk_product);
+
+ // We define price for product (TODO Put this in a method in product class)
+ if (! empty($conf->global->PRODUIT_MULTIPRICES))
+ {
+ $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
+ $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
+ $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
+ }
+ else
+ {
+ $pu_ht = $product->price;
+ $pu_ttc = $product->price_ttc;
+ $price_base_type = $product->price_base_type;
+ }
+
+ $amount=$pu_ttc;
+ if (empty($amount))
+ {
+ dol_print_error('','ErrorNoPriceDefinedForThisProduct');
+ exit;
+ }
+ }
+ if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
+ $amount=price2num($amount);
+ }
$fulltag='COL='.$contractline->ref.'.CON='.$contract->ref.'.CUS='.$contract->thirdparty->id.'.DAT='.dol_print_date(dol_now(),'%Y%m%d%H%M');
//$fulltag.='.NAM='.strtr($contract->thirdparty->name,"-"," ");
@@ -911,10 +919,13 @@
$subscription=new Subscription($db);
}
- $amount=$subscription->total_ttc;
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
-
+ if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
+ {
+ $amount=$subscription->total_ttc;
+ if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
+ $amount=price2num($amount);
+ }
+
$fulltag='MEM='.$member->id.'.DAT='.dol_print_date(dol_now(),'%Y%m%d%H%M');
if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
$fulltag=dol_string_unaccent($fulltag);
@@ -1035,35 +1046,42 @@
print ''."\n";
print "\n";
-if ($found && ! $error) // We are in a management option and no error
+if ($action != 'dopayment')
{
- // Buttons for all payments registration methods
-
- if (! empty($conf->paypal->enabled))
+ if ($found && ! $error) // We are in a management option and no error
{
- if (empty($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY)) $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY='integral';
+ // Buttons for all payments registration methods
+
+ if (! empty($conf->paypal->enabled))
+ {
+ if (empty($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY)) $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY='integral';
+
+ if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY == 'integral')
+ {
+ print ' ';
+ }
+ if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY == 'paypalonly')
+ {
+ print ' ';
+ }
+ }
- if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY == 'integral')
- {
- print ' ';
- }
- if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY == 'paypalonly')
- {
- print ' ';
- }
+ if (! empty($conf->paybox->enabled))
+ {
+
+
+ }
+
+ // TODO Other methods
}
-
- if (! empty($conf->paypal->enabled))
+ else
{
-
-
+ dol_print_error_email('ERRORNEWPAYMENTPAYPAL');
}
-
- // TODO Other methods
}
else
{
- dol_print_error_email('ERRORNEWPAYMENTPAYPAL');
+ // Print
}
print ' '."\n";
diff --git a/htdocs/public/payment/paymentko.php b/htdocs/public/payment/paymentko.php
index 6ce1c3badfa04..9abcfcf2c589e 100644
--- a/htdocs/public/payment/paymentko.php
+++ b/htdocs/public/payment/paymentko.php
@@ -23,7 +23,6 @@
* \brief File to show page after a failed payment.
* This page is called by payment system with url provided to it competed with parameter TOKEN=xxx
* This token can be used to get more informations.
- * \author Laurent Destailleur
*/
define("NOLOGIN",1); // This means this output page does not require to be logged.
@@ -53,16 +52,40 @@
$langs->load("paybox");
$langs->load("paypal");
-$PAYPALTOKEN=GETPOST('TOKEN');
-if (empty($PAYPALTOKEN)) $PAYPALTOKEN=GETPOST('token');
-$PAYPALPAYERID=GETPOST('PAYERID');
-if (empty($PAYPALPAYERID)) $PAYPALPAYERID=GETPOST('PayerID');
+if (! empty($conf->paypal->enabled))
+{
+ $PAYPALTOKEN=GETPOST('TOKEN');
+ if (empty($PAYPALTOKEN)) $PAYPALTOKEN=GETPOST('token');
+ $PAYPALPAYERID=GETPOST('PAYERID');
+ if (empty($PAYPALPAYERID)) $PAYPALPAYERID=GETPOST('PayerID');
+}
+// TODO Other payment method
+
$FULLTAG=GETPOST('FULLTAG');
if (empty($FULLTAG)) $FULLTAG=GETPOST('fulltag');
+
+// Detect $paymentmethod
+$paymentmethod='';
+if (preg_match('/PM=([^\.]+)/', $FULLTAG, $reg))
+{
+ $paymentmethod=$reg[1];
+}
+if (empty($paymentmethod))
+{
+ dol_print_error(null, 'The back url does not contains a parameter fulltag that should help us to find the payment method used');
+ exit;
+}
+else
+{
+ dol_syslog("paymentmethod=".$paymentmethod);
+}
+
+
$validpaymentmethod=array();
if (! empty($conf->paypal->enabled)) $validpaymentmethod['paypal']='paypal';
if (! empty($conf->paybox->enabled)) $validpaymentmethod['paybox']='paybox';
+if (! empty($conf->stripe->enabled)) $validpaymentmethod['stripe']='stripe';
// Security check
@@ -90,50 +113,94 @@
dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_payment');
-// Appel des triggers
-include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-$interface=new Interfaces($db);
-$result=$interface->run_triggers('PAYMENTONLINE_PAYMENT_KO',$object,$user,$langs,$conf);
-if ($result < 0) { $error++; $errors=$interface->errors; }
-// Fin appel triggers
-
-
-// Send an email
-if (! empty($conf->paypal->enabled))
+if (! empty($_SESSION['ipaddress'])) // To avoid to make action twice
{
- if (! empty($conf->global->PAYPAL_PAYONLINE_SENDEMAIL))
- {
- // Get on url call
- $token = $PAYPALTOKEN;
- $fulltag = $FULLTAG;
- $payerID = $PAYPALPAYERID;
- // Set by newpayment.php
- $paymentType = $_SESSION['PaymentType'];
- $currencyCodeType = $_SESSION['currencyCodeType'];
- $FinalPaymentAmt = $_SESSION["Payment_Amount"];
- // From env
- $ipaddress = $_SESSION['ipaddress'];
-
-
- $sendto=$conf->global->PAYPAL_PAYONLINE_SENDEMAIL;
- $from=$conf->global->MAILING_EMAIL_FROM;
-
- $urlback=$_SERVER["REQUEST_URI"];
- $topic='['.$conf->global->MAIN_APPLICATION_TITLE.'] '.$langs->transnoentitiesnoconv("NewPaypalPaymentFailed");
- $content=$langs->transnoentitiesnoconv("NewPaypalPaymentFailed")."\ntag=".$fulltag."\ntoken=".$token." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
- require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
- $mailfile = new CMailFile($topic, $sendto, $from, $content);
-
- $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');
- }
- }
+ // Get on url call
+ $fulltag = $FULLTAG;
+ $onlinetoken = empty($PAYPALTOKEN)?$_SESSION['onlinetoken']:$PAYPALTOKEN;
+ $payerID = empty($PAYPALPAYERID)?$_SESSION['payerID']:$PAYPALPAYERID;
+ // Set by newpayment.php
+ $paymentType = $_SESSION['PaymentType'];
+ $currencyCodeType = $_SESSION['currencyCodeType'];
+ $FinalPaymentAmt = $_SESSION["Payment_Amount"];
+ // From env
+ $ipaddress = $_SESSION['ipaddress'];
+
+ // Appel des triggers
+ include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
+ $interface=new Interfaces($db);
+ $result=$interface->run_triggers('PAYMENTONLINE_PAYMENT_KO',$object,$user,$langs,$conf);
+ if ($result < 0) { $error++; $errors=$interface->errors; }
+ // Fin appel triggers
+
+ // Send an email
+ $sendemail = '';
+ if (! empty($conf->paypal->enabled))
+ {
+ if (! empty($conf->global->PAYPAL_PAYONLINE_SENDEMAIL))
+ {
+ $sendemail = $conf->global->PAYPAL_PAYONLINE_SENDEMAIL;
+ }
+ }
+ // Send an email
+ if (! empty($conf->paybox->enabled))
+ {
+ if (! empty($conf->global->PAYBOX_PAYONLINE_SENDEMAIL))
+ {
+ $sendemail = $conf->global->PAYBOX_PAYONLINE_SENDEMAIL;
+ }
+ }
+ // Send an email
+ if (! empty($conf->stripe->enabled))
+ {
+ if (! empty($conf->global->STRIPE_PAYONLINE_SENDEMAIL))
+ {
+ $sendemail = $conf->global->STRIPE_PAYONLINE_SENDEMAIL;
+ }
+ }
+
+ if ($sendemail)
+ {
+ $from=$conf->global->MAILING_EMAIL_FROM;
+ $sendto=$sendemail;
+
+ // Define link to login card
+ $appli=constant('DOL_APPLICATION_TITLE');
+ if (! empty($conf->global->MAIN_APPLICATION_TITLE))
+ {
+ $appli=$conf->global->MAIN_APPLICATION_TITLE;
+ if (preg_match('/\d\.\d/', $appli))
+ {
+ if (! preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) $appli.=" (".DOL_VERSION.")"; // If new title contains a version that is different than core
+ }
+ else $appli.=" ".DOL_VERSION;
+ }
+ else $appli.=" ".DOL_VERSION;
+
+ $urlback=$_SERVER["REQUEST_URI"];
+ $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewOnlinePaymentFailed");
+ $content="";
+ $content.=$langs->transnoentitiesnoconv("ValidationOfOnlinePaymentFailed")."\n";
+ $content.="\n";
+ $content.=$langs->transnoentitiesnoconv("TechnicalInformation").":\n";
+ $content.=$langs->transnoentitiesnoconv("OnlinePaymentSystem").': '.$paymentmethod." \n";
+ $content.=$langs->transnoentitiesnoconv("ReturnURLAfterPayment").': '.$urlback."\n";
+ $content.="tag=".$fulltag."\ntoken=".$onlinetoken." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
+ require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
+ $mailfile = new CMailFile($topic, $sendto, $from, $content);
+
+ $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');
+ }
+ }
+
+ unset($_SESSION['ipaddress']);
}
$head='';
@@ -150,7 +217,7 @@
print ''."\n";
print $langs->trans("YourPaymentHasNotBeenRecorded")." ";
-if (! empty($conf->global->PAYPAL_MESSAGE_KO)) print $conf->global->PAYPAL_MESSAGE_KO;
+if (! empty($conf->global->PAYMENT_MESSAGE_KO)) print $conf->global->PAYMENT_MESSAGE_KO;
print "\n
\n";
diff --git a/htdocs/public/payment/paymentok.php b/htdocs/public/payment/paymentok.php
index c1b4329c7be7f..26022dcd4f884 100644
--- a/htdocs/public/payment/paymentok.php
+++ b/htdocs/public/payment/paymentok.php
@@ -23,7 +23,6 @@
* \brief File to show page after a successful payment
* This page is called by payment system with url provided to it completed with parameter TOKEN=xxx
* This token can be used to get more informations.
- * \author Laurent Destailleur
*/
define("NOLOGIN",1); // This means this output page does not require to be logged.
@@ -88,10 +87,10 @@
if (empty($PAYPALTOKEN)) $PAYPALTOKEN=GETPOST('token');
$PAYPALPAYERID=GETPOST('PAYERID');
if (empty($PAYPALPAYERID)) $PAYPALPAYERID=GETPOST('PayerID');
- $FULLTAG=GETPOST('FULLTAG');
- if (empty($FULLTAG)) $FULLTAG=GETPOST('fulltag');
}
+$FULLTAG=GETPOST('FULLTAG');
+if (empty($FULLTAG)) $FULLTAG=GETPOST('fulltag');
$source=GETPOST('source');
$ref=GETPOST('ref');
@@ -116,6 +115,7 @@
$validpaymentmethod=array();
if (! empty($conf->paypal->enabled)) $validpaymentmethod['paypal']='paypal';
if (! empty($conf->paybox->enabled)) $validpaymentmethod['paybox']='paybox';
+if (! empty($conf->stripe->enabled)) $validpaymentmethod['stripe']='stripe';
// Security check
if (empty($validpaymentmethod)) accessforbidden('', 0, 0, 1);
@@ -169,7 +169,7 @@
if ($PAYPALTOKEN)
{
// Get on url call
- $token = $PAYPALTOKEN;
+ $onlinetoken = $PAYPALTOKEN;
$fulltag = $FULLTAG;
$payerID = $PAYPALPAYERID;
// Set by newpayment.php
@@ -179,17 +179,17 @@
// From env
$ipaddress = $_SESSION['ipaddress'];
- dol_syslog("Call paymentok with token=".$token." paymentType=".$paymentType." currencyCodeType=".$currencyCodeType." payerID=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt." fulltag=".$fulltag, LOG_DEBUG, 0, '_paypal');
+ dol_syslog("Call paymentok with token=".$onlinetoken." paymentType=".$paymentType." currencyCodeType=".$currencyCodeType." payerID=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt." fulltag=".$fulltag, LOG_DEBUG, 0, '_paypal');
// Validate record
if (! empty($paymentType))
{
dol_syslog("We call GetExpressCheckoutDetails", LOG_DEBUG, 0, '_payment');
- $resArray=getDetails($token);
+ $resArray=getDetails($onlinetoken);
//var_dump($resarray);
- dol_syslog("We call DoExpressCheckoutPayment token=".$token." paymentType=".$paymentType." currencyCodeType=".$currencyCodeType." payerID=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt." fulltag=".$fulltag, LOG_DEBUG, 0, '_payment');
- $resArray=confirmPayment($token, $paymentType, $currencyCodeType, $payerID, $ipaddress, $FinalPaymentAmt, $fulltag);
+ dol_syslog("We call DoExpressCheckoutPayment token=".$onlinetoken." paymentType=".$paymentType." currencyCodeType=".$currencyCodeType." payerID=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt." fulltag=".$fulltag, LOG_DEBUG, 0, '_payment');
+ $resArray=confirmPayment($onlinetoken, $paymentType, $currencyCodeType, $payerID, $ipaddress, $FinalPaymentAmt, $fulltag);
$ack = strtoupper($resArray["ACK"]);
if ($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING")
@@ -233,6 +233,17 @@
if ($ispaymentok)
{
+ // Get on url call
+ $fulltag = $FULLTAG;
+ $onlinetoken = empty($PAYPALTOKEN)?$_SESSION['onlinetoken']:$PAYPALTOKEN;
+ $payerID = empty($PAYPALPAYERID)?$_SESSION['payerID']:$PAYPALPAYERID;
+ // Set by newpayment.php
+ $paymentType = $_SESSION['PaymentType'];
+ $currencyCodeType = $_SESSION['currencyCodeType'];
+ $FinalPaymentAmt = $_SESSION["Payment_Amount"];
+ // From env
+ $ipaddress = $_SESSION['ipaddress'];
+
// Appel des triggers
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
$interface=new Interfaces($db);
@@ -250,6 +261,7 @@
// TODO Remove local option to keep only the generic one ?
if ($paymentmethod == 'paypal' && ! empty($conf->global->PAYPAL_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->PAYPAL_PAYONLINE_SENDEMAIL;
if ($paymentmethod == 'paybox' && ! empty($conf->global->PAYBOX_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->PAYBOX_PAYONLINE_SENDEMAIL;
+ if ($paymentmethod == 'stripe' && ! empty($conf->global->STRIPE_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->STRIPE_PAYONLINE_SENDEMAIL;
// Send an email
if ($sendemail)
@@ -261,8 +273,21 @@
$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
+ // Define link to login card
+ $appli=constant('DOL_APPLICATION_TITLE');
+ if (! empty($conf->global->MAIN_APPLICATION_TITLE))
+ {
+ $appli=$conf->global->MAIN_APPLICATION_TITLE;
+ if (preg_match('/\d\.\d/', $appli))
+ {
+ if (! preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) $appli.=" (".DOL_VERSION.")"; // If new title contains a version that is different than core
+ }
+ else $appli.=" ".DOL_VERSION;
+ }
+ else $appli.=" ".DOL_VERSION;
+
$urlback=$_SERVER["REQUEST_URI"];
- $topic='['.$conf->global->MAIN_APPLICATION_TITLE.'] '.$langs->transnoentitiesnoconv("NewPaypalPaymentReceived");
+ $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewOnlinePaymentReceived");
$tmptag=dolExplodeIntoArray($fulltag,'.','=');
$content="";
if (! empty($tmptag['MEM']))
@@ -279,9 +304,9 @@
}
$content.=" \n";
$content.=$langs->transnoentitiesnoconv("TechnicalInformation").": \n";
- $content.=$langs->transnoentitiesnoconv("PaymentSystem").': '.$paymentmethod." \n";
+ $content.=$langs->transnoentitiesnoconv("OnlinePaymentSystem").': '.$paymentmethod." \n";
$content.=$langs->transnoentitiesnoconv("ReturnURLAfterPayment").': '.$urlback." \n";
- $content.="tag=".$fulltag." token=".$token." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
+ $content.="tag=".$fulltag."\ntoken=".$onlinetoken." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
$ishtml=dol_textishtml($content); // May contain urls
@@ -301,6 +326,17 @@
}
else
{
+ // Get on url call
+ $fulltag = $FULLTAG;
+ $onlinetoken = empty($PAYPALTOKEN)?$_SESSION['onlinetoken']:$PAYPALTOKEN;
+ $payerID = empty($PAYPALPAYERID)?$_SESSION['payerID']:$PAYPALPAYERID;
+ // Set by newpayment.php
+ $paymentType = $_SESSION['PaymentType'];
+ $currencyCodeType = $_SESSION['currencyCodeType'];
+ $FinalPaymentAmt = $_SESSION["Payment_Amount"];
+ // From env
+ $ipaddress = $_SESSION['ipaddress'];
+
// Appel des triggers
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
$interface=new Interfaces($db);
@@ -322,6 +358,7 @@
// TODO Remove local option to keep only the generic one ?
if ($paymentmethod == 'paypal' && ! empty($conf->global->PAYPAL_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->PAYPAL_PAYONLINE_SENDEMAIL;
if ($paymentmethod == 'paybox' && ! empty($conf->global->PAYBOX_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->PAYBOX_PAYONLINE_SENDEMAIL;
+ if ($paymentmethod == 'stripe' && ! empty($conf->global->STRIPE_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->STRIPE_PAYONLINE_SENDEMAIL;
// Send an email
if ($sendemail)
@@ -333,15 +370,28 @@
$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
+ // Define link to login card
+ $appli=constant('DOL_APPLICATION_TITLE');
+ if (! empty($conf->global->MAIN_APPLICATION_TITLE))
+ {
+ $appli=$conf->global->MAIN_APPLICATION_TITLE;
+ if (preg_match('/\d\.\d/', $appli))
+ {
+ if (! preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) $appli.=" (".DOL_VERSION.")"; // If new title contains a version that is different than core
+ }
+ else $appli.=" ".DOL_VERSION;
+ }
+ else $appli.=" ".DOL_VERSION;
+
$urlback=$_SERVER["REQUEST_URI"];
- $topic='['.$conf->global->MAIN_APPLICATION_TITLE.'] '.$langs->transnoentitiesnoconv("ValidationOfPaypalPaymentFailed");
+ $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("ValidationOfPaymentFailed");
$content="";
- $content.=$langs->transnoentitiesnoconv("PaypalConfirmPaymentPageWasCalledButFailed")."\n";
+ $content.=$langs->transnoentitiesnoconv("PaymentSystemConfirmPaymentPageWasCalledButFailed")."\n";
$content.="\n";
$content.=$langs->transnoentitiesnoconv("TechnicalInformation").":\n";
- $content.=$langs->transnoentitiesnoconv("PaymentSystem").': '.$paymentmethod." \n";
+ $content.=$langs->transnoentitiesnoconv("OnlinePaymentSystem").': '.$paymentmethod."\n";
$content.=$langs->transnoentitiesnoconv("ReturnURLAfterPayment").': '.$urlback."\n";
- $content.="tag=".$fulltag."\ntoken=".$token." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
+ $content.="tag=".$fulltag."\ntoken=".$onlinetoken." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
$ishtml=dol_textishtml($content); // May contain urls
diff --git a/htdocs/public/paypal/newpayment.php b/htdocs/public/paypal/newpayment.php
index cd963eec7988b..08bf0c4faedf8 100644
--- a/htdocs/public/paypal/newpayment.php
+++ b/htdocs/public/paypal/newpayment.php
@@ -265,7 +265,7 @@
llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody');
-if (! empty($PAYPAL_API_SANDBOX))
+if (! empty($conf->global->PAYPAL_API_SANDBOX))
{
dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode'),'','warning');
}
@@ -418,10 +418,13 @@
$result=$order->fetch_thirdparty($order->socid);
}
- $amount=$order->total_ttc;
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
-
+ if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
+ {
+ $amount=$order->total_ttc;
+ if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
+ $amount=price2num($amount);
+ }
+
$fulltag='ORD='.$order->ref.'.CUS='.$order->thirdparty->id;
//$fulltag.='.NAM='.strtr($order->thirdparty->name,"-"," ");
if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
@@ -525,10 +528,13 @@
$result=$invoice->fetch_thirdparty($invoice->socid);
}
- $amount=price2num($invoice->total_ttc - $invoice->getSommePaiement());
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
-
+ if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
+ {
+ $amount=price2num($invoice->total_ttc - $invoice->getSommePaiement());
+ if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
+ $amount=price2num($amount);
+ }
+
$fulltag='INV='.$invoice->ref.'.CUS='.$invoice->thirdparty->id;
//$fulltag.='.NAM='.strtr($invoice->thirdparty->name,"-"," ");
if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
@@ -649,35 +655,38 @@
}
}
- $amount=$contractline->total_ttc;
- if ($contractline->fk_product)
- {
- $product=new Product($db);
- $result=$product->fetch($contractline->fk_product);
-
- // We define price for product (TODO Put this in a method in product class)
- if (! empty($conf->global->PRODUIT_MULTIPRICES))
- {
- $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
- $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
- $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
- }
- else
- {
- $pu_ht = $product->price;
- $pu_ttc = $product->price_ttc;
- $price_base_type = $product->price_base_type;
- }
-
- $amount=$pu_ttc;
- if (empty($amount))
- {
- dol_print_error('','ErrorNoPriceDefinedForThisProduct');
- exit;
- }
- }
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
+ if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
+ {
+ $amount=$contractline->total_ttc;
+ if ($contractline->fk_product)
+ {
+ $product=new Product($db);
+ $result=$product->fetch($contractline->fk_product);
+
+ // We define price for product (TODO Put this in a method in product class)
+ if (! empty($conf->global->PRODUIT_MULTIPRICES))
+ {
+ $pu_ht = $product->multiprices[$contract->thirdparty->price_level];
+ $pu_ttc = $product->multiprices_ttc[$contract->thirdparty->price_level];
+ $price_base_type = $product->multiprices_base_type[$contract->thirdparty->price_level];
+ }
+ else
+ {
+ $pu_ht = $product->price;
+ $pu_ttc = $product->price_ttc;
+ $price_base_type = $product->price_base_type;
+ }
+
+ $amount=$pu_ttc;
+ if (empty($amount))
+ {
+ dol_print_error('','ErrorNoPriceDefinedForThisProduct');
+ exit;
+ }
+ }
+ if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
+ $amount=price2num($amount);
+ }
$fulltag='COL='.$contractline->ref.'.CON='.$contract->ref.'.CUS='.$contract->thirdparty->id.'.DAT='.dol_print_date(dol_now(),'%Y%m%d%H%M');
//$fulltag.='.NAM='.strtr($contract->thirdparty->name,"-"," ");
@@ -827,10 +836,13 @@
$subscription=new Subscription($db);
}
- $amount=$subscription->total_ttc;
- if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
- $amount=price2num($amount);
-
+ if ($action != 'dopayment') // Do not change amount if we just click on first dopayment
+ {
+ $amount=$subscription->total_ttc;
+ if (GETPOST("amount",'int')) $amount=GETPOST("amount",'int');
+ $amount=price2num($amount);
+ }
+
$fulltag='MEM='.$member->id.'.DAT='.dol_print_date(dol_now(),'%Y%m%d%H%M');
if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
$fulltag=dol_string_unaccent($fulltag);
diff --git a/htdocs/public/paypal/paymentko.php b/htdocs/public/paypal/paymentko.php
index e432db2e31747..a4e3c0a83ca4c 100644
--- a/htdocs/public/paypal/paymentko.php
+++ b/htdocs/public/paypal/paymentko.php
@@ -23,7 +23,6 @@
* \brief File to show page after a failed payment.
* This page is called by paypal with url provided to payal competed with parameter TOKEN=xxx
* This token can be used to get more informations.
- * \author Laurent Destailleur
*/
define("NOLOGIN",1); // This means this output page does not require to be logged.
@@ -63,6 +62,8 @@
$object = new stdClass(); // For triggers
+$paymentmethod='paypal';
+
/*
* Actions
@@ -81,61 +82,73 @@
foreach($_POST as $k => $v) $tracepost .= "{$k} - {$v}\n";
dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_paypal');
-
-// Appel des triggers
-include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
-$interface=new Interfaces($db);
-$result=$interface->run_triggers('PAYPAL_PAYMENT_KO',$object,$user,$langs,$conf);
-if ($result < 0) { $error++; $errors=$interface->errors; }
-// Fin appel triggers
-
-
-// Send an email
-if (! empty($conf->global->PAYPAL_PAYONLINE_SENDEMAIL))
+if (! empty($_SESSION['ipaddress'])) // To avoid to make action twice
{
// Get on url call
- $token = $PAYPALTOKEN;
$fulltag = $FULLTAG;
- $payerID = $PAYPALPAYERID;
+ $onlinetoken = empty($PAYPALTOKEN)?$_SESSION['onlinetoken']:$PAYPALTOKEN;
+ $payerID = empty($PAYPALPAYERID)?$_SESSION['payerID']:$PAYPALPAYERID;
// Set by newpayment.php
$paymentType = $_SESSION['PaymentType'];
$currencyCodeType = $_SESSION['currencyCodeType'];
$FinalPaymentAmt = $_SESSION["Payment_Amount"];
// From env
$ipaddress = $_SESSION['ipaddress'];
+
+ // Appel des triggers
+ include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
+ $interface=new Interfaces($db);
+ $result=$interface->run_triggers('PAYPAL_PAYMENT_KO',$object,$user,$langs,$conf);
+ if ($result < 0) { $error++; $errors=$interface->errors; }
+ // Fin appel triggers
+
+ // Send an email
+ $sendemail = '';
+ if (! empty($conf->global->PAYPAL_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->PAYPAL_PAYONLINE_SENDEMAIL;
+
+ if ($sendemail)
+ {
+ $sendto=$sendemail;
+ $from=$conf->global->MAILING_EMAIL_FROM;
+
+ // Define link to login card
+ $appli=constant('DOL_APPLICATION_TITLE');
+ if (! empty($conf->global->MAIN_APPLICATION_TITLE))
+ {
+ $appli=$conf->global->MAIN_APPLICATION_TITLE;
+ if (preg_match('/\d\.\d/', $appli))
+ {
+ if (! preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) $appli.=" (".DOL_VERSION.")"; // If new title contains a version that is different than core
+ }
+ else $appli.=" ".DOL_VERSION;
+ }
+ else $appli.=" ".DOL_VERSION;
+
+ $urlback=$_SERVER["REQUEST_URI"];
+ $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewOnlinePaymentFailed");
+ $content="";
+ $content.=$langs->transnoentitiesnoconv("ValidationOfOnlinePaymentFailed")."\n";
+ $content.="\n";
+ $content.=$langs->transnoentitiesnoconv("TechnicalInformation").":\n";
+ $content.=$langs->transnoentitiesnoconv("OnlinePaymentSystem").': '.$paymentmethod." \n";
+ $content.=$langs->transnoentitiesnoconv("ReturnURLAfterPayment").': '.$urlback."\n";
+ $content.="tag=".$fulltag."\ntoken=".$onlinetoken." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
+
+ require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
+ $mailfile = new CMailFile($topic, $sendto, $from, $content);
+ $result=$mailfile->sendfile();
+ if ($result)
+ {
+ dol_syslog("EMail sent to ".$sendto, LOG_DEBUG, 0, '_paypal');
+ }
+ else
+ {
+ dol_syslog("Failed to send EMail to ".$sendto, LOG_ERR, 0, '_paypal');
+ }
+ }
- $sendto=$conf->global->PAYPAL_PAYONLINE_SENDEMAIL;
- $from=$conf->global->MAILING_EMAIL_FROM;
-
- // Define link to login card
- $appli=constant('DOL_APPLICATION_TITLE');
- if (! empty($conf->global->MAIN_APPLICATION_TITLE))
- {
- $appli=$conf->global->MAIN_APPLICATION_TITLE;
- if (preg_match('/\d\.\d/', $appli))
- {
- if (! preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) $appli.=" (".DOL_VERSION.")"; // If new title contains a version that is different than core
- }
- else $appli.=" ".DOL_VERSION;
- }
- else $appli.=" ".DOL_VERSION;
-
- $urlback=$_SERVER["REQUEST_URI"];
- $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewPaypalPaymentFailed");
- $content=$langs->transnoentitiesnoconv("NewPaypalPaymentFailed")."\ntag=".$fulltag."\ntoken=".$token." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
- require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
- $mailfile = new CMailFile($topic, $sendto, $from, $content);
-
- $result=$mailfile->sendfile();
- if ($result)
- {
- dol_syslog("EMail sent to ".$sendto, LOG_DEBUG, 0, '_paypal');
- }
- else
- {
- dol_syslog("Failed to send EMail to ".$sendto, LOG_ERR, 0, '_paypal');
- }
+ unset($_SESSION['ipaddress']);
}
diff --git a/htdocs/public/paypal/paymentok.php b/htdocs/public/paypal/paymentok.php
index e3f2ed201e500..d98a6085e3e60 100644
--- a/htdocs/public/paypal/paymentok.php
+++ b/htdocs/public/paypal/paymentok.php
@@ -23,7 +23,6 @@
* \brief File to show page after a successful payment
* This page is called by paypal with url provided to payal completed with parameter TOKEN=xxx
* This token can be used to get more informations.
- * \author Laurent Destailleur
*/
define("NOLOGIN",1); // This means this output page does not require to be logged.
@@ -94,6 +93,8 @@
$object = new stdClass(); // For triggers
+$paymentmethod='paypal';
+
/*
* Actions
@@ -128,7 +129,7 @@
if ($PAYPALTOKEN)
{
// Get on url call
- $token = $PAYPALTOKEN;
+ $onlinetoken = $PAYPALTOKEN;
$fulltag = $FULLTAG;
$payerID = $PAYPALPAYERID;
// Set by newpayment.php
@@ -138,18 +139,18 @@
// From env
$ipaddress = $_SESSION['ipaddress'];
- dol_syslog("Call paymentok with token=".$token." paymentType=".$paymentType." currencyCodeType=".$currencyCodeType." payerID=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt." fulltag=".$fulltag, LOG_DEBUG, 0, '_paypal');
+ dol_syslog("Call paymentok with token=".$onlinetoken." paymentType=".$paymentType." currencyCodeType=".$currencyCodeType." payerID=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt." fulltag=".$fulltag, LOG_DEBUG, 0, '_paypal');
// Validate record
if (! empty($paymentType))
{
dol_syslog("We call GetExpressCheckoutDetails", LOG_DEBUG, 0, '_paypal');
- $resArray=getDetails($token);
+ $resArray=getDetails($onlinetoken);
//var_dump($resarray);
- dol_syslog("We call DoExpressCheckoutPayment token=".$token." paymentType=".$paymentType." currencyCodeType=".$currencyCodeType." payerID=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt." fulltag=".$fulltag, LOG_DEBUG, 0, '_paypal');
- $resArray=confirmPayment($token, $paymentType, $currencyCodeType, $payerID, $ipaddress, $FinalPaymentAmt, $fulltag);
+ dol_syslog("We call DoExpressCheckoutPayment token=".$onlinetoken." paymentType=".$paymentType." currencyCodeType=".$currencyCodeType." payerID=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt." fulltag=".$fulltag, LOG_DEBUG, 0, '_paypal');
+ $resArray=confirmPayment($onlinetoken, $paymentType, $currencyCodeType, $payerID, $ipaddress, $FinalPaymentAmt, $fulltag);
$ack = strtoupper($resArray["ACK"]);
if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING")
@@ -202,7 +203,7 @@
else $appli.=" ".DOL_VERSION;
$urlback=$_SERVER["REQUEST_URI"];
- $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewPaypalPaymentReceived");
+ $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewOnlinePaymentReceived");
$tmptag=dolExplodeIntoArray($fulltag,'.','=');
$content="";
if (! empty($tmptag['MEM']))
@@ -215,12 +216,13 @@
}
else
{
- $content.=$langs->transnoentitiesnoconv("NewPaypalPaymentReceived")." \n";
+ $content.=$langs->transnoentitiesnoconv("NewOnlinePaymentReceived")." \n";
}
$content.=" \n";
$content.=$langs->transnoentitiesnoconv("TechnicalInformation").": \n";
+ $content.=$langs->transnoentitiesnoconv("OnlinePaymentSystem").': '.$paymentmethod." \n";
$content.=$langs->transnoentitiesnoconv("ReturnURLAfterPayment").': '.$urlback." \n";
- $content.="tag=".$fulltag." token=".$token." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
+ $content.="tag=".$fulltag."\ntoken=".$onlinetoken." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
$ishtml=dol_textishtml($content); // May contain urls
@@ -285,13 +287,14 @@
else $appli.=" ".DOL_VERSION;
$urlback=$_SERVER["REQUEST_URI"];
- $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("ValidationOfPaypalPaymentFailed");
+ $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("ValidationOfPaymentFailed");
$content="";
- $content.=$langs->transnoentitiesnoconv("PaypalConfirmPaymentPageWasCalledButFailed")."\n";
+ $content.=$langs->transnoentitiesnoconv("PaymentSystemConfirmPaymentPageWasCalledButFailed")."\n";
$content.="\n";
$content.=$langs->transnoentitiesnoconv("TechnicalInformation").":\n";
+ $content.=$langs->transnoentitiesnoconv("OnlinePaymentSystem").': '.$paymentmethod."\n";
$content.=$langs->transnoentitiesnoconv("ReturnURLAfterPayment").': '.$urlback."\n";
- $content.="tag=".$fulltag."\ntoken=".$token." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
+ $content.="tag=".$fulltag."\ntoken=".$onlinetoken." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
$ishtml=dol_textishtml($content); // May contain urls
diff --git a/htdocs/public/stripe/index.php b/htdocs/public/stripe/index.php
index 0b7ad1c82e4e9..6a86f3ed88ec7 100644
--- a/htdocs/public/stripe/index.php
+++ b/htdocs/public/stripe/index.php
@@ -16,7 +16,7 @@
*/
/**
- * \file htdocs/public/paybox/index.php
+ * \file htdocs/public/stripe/index.php
* \ingroup core
* \brief A redirect page to an error
* \author Laurent Destailleur
diff --git a/htdocs/public/stripe/newpayment.php b/htdocs/public/stripe/newpayment.php
index 0d6cefd357a6b..64ea70cfbeb8b 100644
--- a/htdocs/public/stripe/newpayment.php
+++ b/htdocs/public/stripe/newpayment.php
@@ -23,213 +23,1197 @@
* \brief Page to do payment with Stripe
*/
-define("NOLOGIN",1);
-define("NOCSRFCHECK",1);
+define("NOLOGIN",1); // This means this output page does not require to be logged.
+define("NOCSRFCHECK",1); // We accept to go on this page from external web site.
+
+// For MultiCompany module.
+// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php
+// TODO This should be useless. Because entity must be retreive from object ref and not from url.
+$entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
+if (is_numeric($entity)) define("DOLENTITY", $entity);
require '../../main.inc.php';
+
+require_once DOL_DOCUMENT_ROOT.'/stripe/config.php';
+/* included into config.php
+require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
require_once DOL_DOCUMENT_ROOT.'/stripe/lib/stripe.lib.php';
-require_once DOL_DOCUMENT_ROOT.'/public/stripe/config.php';
require_once DOL_DOCUMENT_ROOT.'/includes/stripe/init.php';
+*/
// Security check
if (empty($conf->stripe->enabled)) accessforbidden('',0,0,1);
$langs->load("main");
+$langs->load("companies");
$langs->load("other");
$langs->load("paybox"); // File with generic data
+$langs->load("paypal");
$langs->load("stripe");
-$source=GETPOST("source",'alpha');
-$ref=GETPOST('ref','alpha');
+$action=GETPOST('action','alpha');
+
+// Input are:
+// type ('invoice','order','contractline'),
+// id (object id),
+// amount (required if id is empty),
+// tag (a free text, required if type is empty)
+// currency (iso code)
+
+$suffix=GETPOST("suffix",'alpha');
+$amount=price2num(GETPOST("amount"));
+if (! GETPOST("currency",'alpha')) $currency=$conf->currency;
+else $currency=GETPOST("currency",'alpha');
+
+if (! $action)
+{
+ if (! GETPOST("amount") && ! GETPOST("source"))
+ {
+ dol_print_error('',$langs->trans('ErrorBadParameters')." - amount or source");
+ exit;
+ }
+ if (is_numeric($amount) && ! GETPOST("tag") && ! GETPOST("source"))
+ {
+ dol_print_error('',$langs->trans('ErrorBadParameters')." - tag or source");
+ exit;
+ }
+ if (GETPOST("source") && ! GETPOST("ref"))
+ {
+ dol_print_error('',$langs->trans('ErrorBadParameters')." - ref");
+ exit;
+ }
+}
+
+// Define $urlwithroot
+//$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
+//$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
+$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
+
+$urlok=$urlwithroot.'/public/paypal/paymentok.php?';
+$urlko=$urlwithroot.'/public/paypal/paymentko.php?';
+
+// Complete urls for post treatment
+$SOURCE=GETPOST("source",'alpha');
+$ref=$REF=GETPOST('ref','alpha');
+$TAG=GETPOST("tag",'alpha');
+$FULLTAG=GETPOST("fulltag",'alpha'); // fulltag is tag with more informations
+$SECUREKEY=GETPOST("securekey"); // Secure key
+if (! preg_match('/'.preg_quote('PM=stripe','/').'/', $FULLTAG)) $FULLTAG.=($FULLTAG?'.':'').'PM=stripe';
+
+if (! empty($SOURCE))
+{
+ $urlok.='source='.urlencode($SOURCE).'&';
+ $urlko.='source='.urlencode($SOURCE).'&';
+}
+if (! empty($REF))
+{
+ $urlok.='ref='.urlencode($REF).'&';
+ $urlko.='ref='.urlencode($REF).'&';
+}
+if (! empty($TAG))
+{
+ $urlok.='tag='.urlencode($TAG).'&';
+ $urlko.='tag='.urlencode($TAG).'&';
+}
+if (! empty($FULLTAG))
+{
+ $urlok.='fulltag='.urlencode($FULLTAG).'&';
+ $urlko.='fulltag='.urlencode($FULLTAG).'&';
+}
+if (! empty($SECUREKEY))
+{
+ $urlok.='securekey='.urlencode($SECUREKEY).'&';
+ $urlko.='securekey='.urlencode($SECUREKEY).'&';
+}
+if (! empty($entity))
+{
+ $urlok.='entity='.urlencode($entity).'&';
+ $urlko.='entity='.urlencode($entity).'&';
+}
+$urlok=preg_replace('/&$/','',$urlok); // Remove last &
+$urlko=preg_replace('/&$/','',$urlko); // Remove last &
+
+// Check parameters
+/*
+$STRIPE_API_OK="";
+if ($urlok) $STRIPE_API_OK=$urlok;
+$STRIPE_API_KO="";
+if ($urlko) $STRIPE_API_KO=$urlko;
+if (empty($STRIPE_API_USER))
+{
+ dol_print_error('',"Paypal setup param STRIPE_API_USER not defined");
+ return -1;
+}
+if (empty($STRIPE_API_PASSWORD))
+{
+ dol_print_error('',"Paypal setup param STRIPE_API_PASSWORD not defined");
+ return -1;
+}
+if (empty($STRIPE_API_SIGNATURE))
+{
+ dol_print_error('',"Paypal setup param STRIPE_API_SIGNATURE not defined");
+ return -1;
+}
+*/
+
+
+// Check security token
+$valid=true;
+if (! empty($conf->global->STRIPE_SECURITY_TOKEN))
+{
+ if (! empty($conf->global->STRIPE_SECURITY_TOKEN_UNIQUE))
+ {
+ if ($SOURCE && $REF) $token = dol_hash($conf->global->STRIPE_SECURITY_TOKEN . $SOURCE . $REF, 2); // Use the source in the hash to avoid duplicates if the references are identical
+ else $token = dol_hash($conf->global->STRIPE_SECURITY_TOKEN, 2);
+ }
+ else
+ {
+ $token = $conf->global->STRIPE_SECURITY_TOKEN;
+ }
+ if ($SECUREKEY != $token) $valid=false;
+
+ if (! $valid)
+ {
+ print 'Bad value for key.
';
+ //print 'SECUREKEY='.$SECUREKEY.' token='.$token.' valid='.$valid;
+ exit;
+ }
+}
+
+
+/*
+ * Actions
+ */
+
+if ($action == 'dopayment') // We click on button Create payment
+{
+ if (GETPOST('newamount')) $amount = GETPOST('newamount');
+ else
+ {
+ setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors');
+ $action = '';
+ }
+}
+
+if ($action == 'charge')
+{
+ // Correct the amount according to unit of currency
+ // See https://support.stripe.com/questions/which-zero-decimal-currencies-does-stripe-support
+ $arrayzerounitcurrency=array('BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'VND', 'VUV', 'XAF', 'XOF', 'XPF');
+ if (! in_array($currency, $arrayzerounitcurrency)) $amount=$amount * 100;
+
+ dol_syslog("POST keys : ".join(',', array_keys($_POST)), LOG_DEBUG, 0, '_stripe');
+ dol_syslog("POST values: ".join(',', $_POST), LOG_DEBUG, 0, '_stripe');
+
+ $stripeToken = GETPOST("stripeToken",'alpha');
+ $email = GETPOST("stripeEmail",'alpha');
+
+ dol_syslog("stripeToken = ".$stripeToken, LOG_DEBUG, 0, '_stripe');
+ dol_syslog("stripeEmail = ".$stripeEmail, LOG_DEBUG, 0, '_stripe');
+
+ $error = 0;
+
+ try {
+ dol_syslog("Create customer", LOG_DEBUG, 0, '_stripe');
+ $customer = \Stripe\Customer::create(array(
+ 'email' => $email,
+ 'card' => $stripeToken
+ // TODO
+ ));
+
+ dol_syslog("Create charge", LOG_DEBUG, 0, '_stripe');
+ $charge = \Stripe\Charge::create(array(
+ 'customer' => $customer->id,
+ 'amount' => price2num($amount, 'MU'),
+ 'currency' => $currency,
+ 'description' => 'Stripe payment: '.$FULLTAG,
+ 'statement_descriptor' => dol_trunc(dol_trunc(dol_string_unaccent($mysoc->name), 6, 'right', 'UTF-8', 1).' '.$FULLTAG, 22, 'right', 'UTF-8', 1) // 22 chars
+ ));
+ } catch(\Stripe\Error\Card $e) {
+ // Since it's a decline, \Stripe\Error\Card will be caught
+ $body = $e->getJsonBody();
+ $err = $body['error'];
+
+ print('Status is:' . $e->getHttpStatus() . "\n");
+ print('Type is:' . $err['type'] . "\n");
+ print('Code is:' . $err['code'] . "\n");
+ // param is '' in this case
+ print('Param is:' . $err['param'] . "\n");
+ print('Message is:' . $err['message'] . "\n");
+
+ $error++;
+ setEventMessages($e->getMessage(), null, 'errors');
+ dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
+ $action='';
+ } catch (\Stripe\Error\RateLimit $e) {
+ // Too many requests made to the API too quickly
+ $error++;
+ dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
+ setEventMessages($e->getMessage(), null, 'errors');
+ $action='';
+ } catch (\Stripe\Error\InvalidRequest $e) {
+ // Invalid parameters were supplied to Stripe's API
+ $error++;
+ dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
+ setEventMessages($e->getMessage(), null, 'errors');
+ $action='';
+ } catch (\Stripe\Error\Authentication $e) {
+ // Authentication with Stripe's API failed
+ // (maybe you changed API keys recently)
+ $error++;
+ dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
+ setEventMessages($e->getMessage(), null, 'errors');
+ $action='';
+ } catch (\Stripe\Error\ApiConnection $e) {
+ // Network communication with Stripe failed
+ $error++;
+ dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
+ setEventMessages($e->getMessage(), null, 'errors');
+ $action='';
+ } catch (\Stripe\Error\Base $e) {
+ // Display a very generic error to the user, and maybe send
+ // yourself an email
+ $error++;
+ dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
+ setEventMessages($e->getMessage(), null, 'errors');
+ $action='';
+ } catch (Exception $e) {
+ // Something else happened, completely unrelated to Stripe
+ $error++;
+ dol_syslog($e->getMessage(), LOG_WARNING, 0, '_stripe');
+ setEventMessages($e->getMessage(), null, 'errors');
+ $action='';
+ }
+
+ $_SESSION["onlinetoken"] = $stripeToken;
+ $_SESSION["FinalPaymentAmt"] = $amount;
+ $_SESSION["currencyCodeType"] = $currency;
+ $_SESSION["paymentType"] = '';
+ $_SESSION['ipaddress'] = $_SERVER['REMOTE_ADDR']; // Payer ip
+ $_SESSION['payerID'] = is_object($customer)?$customer->id:'';
+ $_SESSION['TRANSACTIONID'] = is_object($charge)?$charge->id:'';
+
+ dol_syslog("Action charge stripe result=".$error." ip=".$_SESSION['ipaddress'], LOG_DEBUG, 0, '_stripe');
+ dol_syslog("onlinetoken=".$_SESSION["onlinetoken"]." FinalPaymentAmt=".$_SESSION["FinalPaymentAmt"]." currencyCodeType=".$_SESSION["currencyCodeType"]." payerID=".$_SESSION['payerID']." TRANSACTIONID=".$_SESSION['TRANSACTIONID'], LOG_DEBUG, 0, '_stripe');
+ dol_syslog("FULLTAG=".$FULLTAG, LOG_DEBUG, 0, '_stripe');
+ dol_syslog("Now call the redirect to paymentok or paymentko", LOG_DEBUG, 0, '_stripe');
+
+ if ($error)
+ {
+ header("Location: ".$urlko);
+ exit;
+ }
+ else
+ {
+ header("Location: ".$urlok);
+ exit;
+ }
+
+}
+
+
+/*
+ * View
+ */
+
+$head='';
+if (! empty($conf->global->STRIPE_CSS_URL)) $head=' '."\n";
+
+$conf->dol_hide_topmenu=1;
+$conf->dol_hide_leftmenu=1;
+
+llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody');
+
+if (empty($conf->global->STRIPE_LIVE))
+{
+ dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode'),'','warning');
+}
+
+// Common variables
+$creditor=$mysoc->name;
+$paramcreditor='STRIPE_CREDITOR_'.$suffix;
+if (! empty($conf->global->$paramcreditor)) $creditor=$conf->global->$paramcreditor;
+else if (! empty($conf->global->STRIPE_CREDITOR)) $creditor=$conf->global->STRIPE_CREDITOR;
+
+print ' '."\n";
+print ''."\n";
+print '
'."\n";
+print '
'."\n";
+print ' ';
+
+
+// Add more content on page for some services
+if (preg_match('/^dopayment/',$action))
+{
+ // Simple checkout
+ /*
+ print '';
+ */
+
+ // Personalized checkout
+ print '';
+
+ print '
+
+
+
+
+
+
+
+
+ ';
+}
+
-
-
+htmlPrintOnlinePaymentFooter($mysoc,$langs);
+llxFooter('', 'public');
+$db->close();
diff --git a/htdocs/public/stripe/paymentko.php b/htdocs/public/stripe/paymentko.php
new file mode 100644
index 0000000000000..01000939b37fe
--- /dev/null
+++ b/htdocs/public/stripe/paymentko.php
@@ -0,0 +1,165 @@
+
+*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+/**
+ * \file htdocs/public/stripe/paymentko.php
+ * \ingroup core
+ * \brief File to show page after a failed payment.
+ * This page is called by payment system with url provided to it competed with parameter FULLTAG=xxx
+ * More data like token are saved into session. This token can be used to get more informations.
+ */
+
+define("NOLOGIN",1); // This means this output page does not require to be logged.
+define("NOCSRFCHECK",1); // We accept to go on this page from external web site.
+
+// For MultiCompany module.
+// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php
+// TODO This should be useless. Because entity must be retreive from object ref and not from url.
+$entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
+if (is_numeric($entity)) define("DOLENTITY", $entity);
+
+require '../../main.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
+
+$langs->load("main");
+$langs->load("other");
+$langs->load("dict");
+$langs->load("bills");
+$langs->load("companies");
+$langs->load("paybox");
+$langs->load("paypal");
+$langs->load("stripe");
+
+$FULLTAG=GETPOST('FULLTAG');
+if (empty($FULLTAG)) $FULLTAG=GETPOST('fulltag');
+
+// Security check
+if (empty($conf->stripe->enabled)) accessforbidden('',0,0,1);
+
+$object = new stdClass(); // For triggers
+
+$paymentmethod='stripe';
+
+
+/*
+ * Actions
+ */
+
+
+
+
+/*
+ * View
+ */
+
+dol_syslog("Callback url when a PayPal payment was canceled. query_string=".(empty($_SERVER["QUERY_STRING"])?'':$_SERVER["QUERY_STRING"])." script_uri=".(empty($_SERVER["SCRIPT_URI"])?'':$_SERVER["SCRIPT_URI"]), LOG_DEBUG, 0, '_stripe');
+
+$tracepost = "";
+foreach($_POST as $k => $v) $tracepost .= "{$k} - {$v}\n";
+dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_stripe');
+
+if (! empty($_SESSION['ipaddress'])) // To avoid to make action twice
+{
+ $fulltag = $FULLTAG;
+ $onlinetoken = empty($PAYPALTOKEN)?$_SESSION['onlinetoken']:$PAYPALTOKEN;
+ $payerID = empty($PAYPALPAYERID)?$_SESSION['payerID']:$PAYPALPAYERID;
+ $currencyCodeType = $_SESSION['currencyCodeType'];
+ $paymentType = $_SESSION['paymentType'];
+ $FinalPaymentAmt = $_SESSION['FinalPaymentAmt'];
+ $ipaddress = $_SESSION['ipaddress'];
+
+ // Appel des triggers
+ include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
+ $interface=new Interfaces($db);
+ $result=$interface->run_triggers('STRIPE_PAYMENT_KO',$object,$user,$langs,$conf);
+ if ($result < 0) { $error++; $errors=$interface->errors; }
+ // Fin appel triggers
+
+ // Send an email
+ $sendemail = '';
+ if (! empty($conf->global->PAYPAL_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->PAYPAL_PAYONLINE_SENDEMAIL;
+
+ if ($sendemail)
+ {
+ // Get on url call
+ $sendto=$sendemail;
+ $from=$conf->global->MAILING_EMAIL_FROM;
+
+ // Define link to login card
+ $appli=constant('DOL_APPLICATION_TITLE');
+ if (! empty($conf->global->MAIN_APPLICATION_TITLE))
+ {
+ $appli=$conf->global->MAIN_APPLICATION_TITLE;
+ if (preg_match('/\d\.\d/', $appli))
+ {
+ if (! preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) $appli.=" (".DOL_VERSION.")"; // If new title contains a version that is different than core
+ }
+ else $appli.=" ".DOL_VERSION;
+ }
+ else $appli.=" ".DOL_VERSION;
+
+ $urlback=$_SERVER["REQUEST_URI"];
+ $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewOnlinePaymentFailed");
+ $content="";
+ $content.=$langs->transnoentitiesnoconv("ValidationOfOnlinePaymentFailed")."\n";
+ $content.="\n";
+ $content.=$langs->transnoentitiesnoconv("TechnicalInformation").":\n";
+ $content.=$langs->transnoentitiesnoconv("OnlinePaymentSystem").': '.$paymentmethod."\n";
+ $content.=$langs->transnoentitiesnoconv("ReturnURLAfterPayment").': '.$urlback."\n";
+ $content.="tag=".$fulltag."\ntoken=".$onlinetoken." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
+ require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
+ $mailfile = new CMailFile($topic, $sendto, $from, $content);
+
+ $result=$mailfile->sendfile();
+ if ($result)
+ {
+ dol_syslog("EMail sent to ".$sendto, LOG_DEBUG, 0, '_stripe');
+ }
+ else
+ {
+ dol_syslog("Failed to send EMail to ".$sendto, LOG_ERR, 0, '_stripe');
+ }
+ }
+
+ unset($_SESSION['ipaddress']);
+}
+
+$head='';
+if (! empty($conf->global->STRIPE_CSS_URL)) $head=' '."\n";
+
+$conf->dol_hide_topmenu=1;
+$conf->dol_hide_leftmenu=1;
+
+llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody');
+
+
+// Show ko message
+print ' '."\n";
+print ''."\n";
+print $langs->trans("YourPaymentHasNotBeenRecorded")." ";
+
+if (! empty($conf->global->STRIPE_MESSAGE_KO)) print $conf->global->STRIPE_MESSAGE_KO;
+print "\n
\n";
+
+
+htmlPrintOnlinePaymentFooter($mysoc,$langs);
+
+
+llxFooter('', 'public');
+
+$db->close();
diff --git a/htdocs/public/stripe/paymentok.php b/htdocs/public/stripe/paymentok.php
new file mode 100644
index 0000000000000..4eede2e954465
--- /dev/null
+++ b/htdocs/public/stripe/paymentok.php
@@ -0,0 +1,199 @@
+
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+/**
+ * \file htdocs/public/stripe/paymentok.php
+ * \ingroup core
+ * \brief File to show page after a successful payment
+ * This page is called by payment system with url provided to it completed with parameter FULLTAG=xxx
+ * More data like token are saved into session. This token can be used to get more informations.
+ */
+
+define("NOLOGIN",1); // This means this output page does not require to be logged.
+define("NOCSRFCHECK",1); // We accept to go on this page from external web site.
+
+// For MultiCompany module.
+// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php
+// TODO This should be useless. Because entity must be retreive from object ref and not from url.
+$entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
+if (is_numeric($entity)) define("DOLENTITY", $entity);
+
+require '../../main.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
+
+$langs->load("main");
+$langs->load("other");
+$langs->load("dict");
+$langs->load("bills");
+$langs->load("companies");
+$langs->load("paybox");
+$langs->load("paypal");
+
+$FULLTAG=GETPOST('FULLTAG');
+if (empty($FULLTAG)) $FULLTAG=GETPOST('fulltag');
+$source=GETPOST('source');
+$ref=GETPOST('ref');
+
+// Security check
+if (empty($conf->stripe->enabled)) accessforbidden('', 0, 0, 1);
+
+
+$ispaymentok = false;
+// If payment is ok
+$PAYMENTSTATUS=$TRANSACTIONID=$TAXAMT=$NOTE='';
+// If payment is ko
+$ErrorCode=$ErrorShortMsg=$ErrorLongMsg=$ErrorSeverityCode='';
+
+
+$object = new stdClass(); // For triggers
+
+$paymentmethod='stripe';
+
+
+/*
+ * Actions
+ */
+
+
+
+/*
+ * View
+ */
+
+dol_syslog("Callback url when a payment was done. query_string=".(empty($_SERVER["QUERY_STRING"])?'':$_SERVER["QUERY_STRING"])." script_uri=".(empty($_SERVER["SCRIPT_URI"])?'':$_SERVER["SCRIPT_URI"]), LOG_DEBUG, 0, '_stripe');
+
+$tracepost = "";
+foreach($_POST as $k => $v) $tracepost .= "{$k} - {$v}\n";
+dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_stripe');
+
+$head='';
+if (! empty($conf->global->STRIPE_CSS_URL)) $head=' '."\n";
+
+$conf->dol_hide_topmenu=1;
+$conf->dol_hide_leftmenu=1;
+
+llxHeader($head, $langs->trans("PaymentForm"), '', '', 0, 0, '', '', '', 'onlinepaymentbody');
+
+
+
+// Show message
+print ' '."\n";
+print ''."\n";
+
+$ispaymentok = true; // We call this page if payment is ok
+if ($ispaymentok)
+{
+ // Get on url call
+ $fulltag = $FULLTAG;
+ $onlinetoken = empty($PAYPALTOKEN)?$_SESSION['onlinetoken']:$PAYPALTOKEN;
+ $payerID = empty($PAYPALPAYERID)?$_SESSION['payerID']:$PAYPALPAYERID;
+ // Set by newpayment.php
+ $paymentType = $_SESSION['PaymentType'];
+ $currencyCodeType = $_SESSION['currencyCodeType'];
+ $FinalPaymentAmt = $_SESSION["Payment_Amount"];
+ // From env
+ $ipaddress = $_SESSION['ipaddress'];
+ $TRANSACTIONID = $_SESSION['TRANSACTIONID'];
+
+ // Appel des triggers
+ include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
+ $interface=new Interfaces($db);
+ $result=$interface->run_triggers('STRIPE_PAYMENT_OK',$object,$user,$langs,$conf);
+ if ($result < 0) { $error++; $errors=$interface->errors; }
+ // Fin appel triggers
+
+
+ print $langs->trans("YourPaymentHasBeenRecorded")."
\n";
+ print $langs->trans("ThisIsTransactionId",$TRANSACTIONID)."
\n";
+ if (! empty($conf->global->STRIPE_MESSAGE_OK)) print $conf->global->STRIPE_MESSAGE_OK;
+
+ $sendemail = '';
+ if (! empty($conf->global->STRIPE_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->STRIPE_PAYONLINE_SENDEMAIL;
+
+ // Send an email
+ if ($sendemail)
+ {
+ $sendto=$sendemail;
+ $from=$conf->global->MAILING_EMAIL_FROM;
+ // 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
+
+ // Define link to login card
+ $appli=constant('DOL_APPLICATION_TITLE');
+ if (! empty($conf->global->MAIN_APPLICATION_TITLE))
+ {
+ $appli=$conf->global->MAIN_APPLICATION_TITLE;
+ if (preg_match('/\d\.\d/', $appli))
+ {
+ if (! preg_match('/'.preg_quote(DOL_VERSION).'/', $appli)) $appli.=" (".DOL_VERSION.")"; // If new title contains a version that is different than core
+ }
+ else $appli.=" ".DOL_VERSION;
+ }
+ else $appli.=" ".DOL_VERSION;
+
+ $urlback=$_SERVER["REQUEST_URI"];
+ $topic='['.$appli.'] '.$langs->transnoentitiesnoconv("NewOnlinePaymentReceived");
+ $tmptag=dolExplodeIntoArray($fulltag,'.','=');
+ $content="";
+ if (! empty($tmptag['MEM']))
+ {
+ $langs->load("members");
+ $url=$urlwithroot."/adherents/card_subscriptions.php?rowid=".$tmptag['MEM'];
+ $content.=$langs->trans("PaymentSubscription")."
\n";
+ $content.=$langs->trans("MemberId").': '.$tmptag['MEM']."
\n";
+ $content.=$langs->trans("Link").':
'.$url.' '."
\n";
+ }
+ else
+ {
+ $content.=$langs->transnoentitiesnoconv("NewOnlinePaymentReceived")."
\n";
+ }
+ $content.="
\n";
+ $content.=$langs->transnoentitiesnoconv("TechnicalInformation").":
\n";
+ $content.=$langs->transnoentitiesnoconv("OnlinePaymentSystem").': '.$paymentmethod."
\n";
+ $content.=$langs->transnoentitiesnoconv("ReturnURLAfterPayment").': '.$urlback."
\n";
+ $content.="tag=".$fulltag."\ntoken=".$onlinetoken." paymentType=".$paymentType." currencycodeType=".$currencyCodeType." payerId=".$payerID." ipaddress=".$ipaddress." FinalPaymentAmt=".$FinalPaymentAmt;
+
+ $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();
+ if ($result)
+ {
+ dol_syslog("EMail sent to ".$sendto, LOG_DEBUG, 0, '_stripe');
+ }
+ else
+ {
+ dol_syslog("Failed to send EMail to ".$sendto, LOG_ERR, 0, '_stripe');
+ }
+ }
+}
+
+
+print "\n
\n";
+
+
+htmlPrintOnlinePaymentFooter($mysoc,$langs);
+
+
+llxFooter('', 'public');
+
+$db->close();
diff --git a/htdocs/stripe/admin/stripe.php b/htdocs/stripe/admin/stripe.php
index 3dd238b2f1dba..056e43690b242 100644
--- a/htdocs/stripe/admin/stripe.php
+++ b/htdocs/stripe/admin/stripe.php
@@ -47,15 +47,15 @@
$result=dolibarr_set_const($db, "STRIPE_LIVE",GETPOST('STRIPE_LIVE','alpha'),'chaine',0,'',$conf->entity);
if (! $result > 0) $error++;
- $result=dolibarr_set_const($db, "STRIPE_TEST_SECRET_KEY",GETPOST('STRIPE_TEST_SECRET_KEY','alpha'),'chaine',0,'',$conf->entity);
- if (! $result > 0) $error++;
$result=dolibarr_set_const($db, "STRIPE_TEST_PUBLISHABLE_KEY",GETPOST('STRIPE_TEST_PUBLISHABLE_KEY','alpha'),'chaine',0,'',$conf->entity);
if (! $result > 0) $error++;
- $result=dolibarr_set_const($db, "STRIPE_LIVE_SECRET_KEY",GETPOST('STRIPE_LIVE_SECRET_KEY','alpha'),'chaine',0,'',$conf->entity);
+ $result=dolibarr_set_const($db, "STRIPE_TEST_SECRET_KEY",GETPOST('STRIPE_TEST_SECRET_KEY','alpha'),'chaine',0,'',$conf->entity);
if (! $result > 0) $error++;
$result=dolibarr_set_const($db, "STRIPE_LIVE_PUBLISHABLE_KEY",GETPOST('STRIPE_LIVE_PUBLISHABLE_KEY','alpha'),'chaine',0,'',$conf->entity);
if (! $result > 0) $error++;
- $result=dolibarr_set_const($db, "STRIPE_CREDITOR",GETPOST('STRIPE_CREDITOR','alpha'),'chaine',0,'',$conf->entity);
+ $result=dolibarr_set_const($db, "STRIPE_LIVE_SECRET_KEY",GETPOST('STRIPE_LIVE_SECRET_KEY','alpha'),'chaine',0,'',$conf->entity);
+ if (! $result > 0) $error++;
+ $result=dolibarr_set_const($db, "STRIPE_CREDITOR",GETPOST('STRIPE_CREDITOR','alpha'),'chaine',0,'',$conf->entity);
if (! $result > 0) $error++;
$result=dolibarr_set_const($db, "STRIPE_CSS_URL",GETPOST('STRIPE_CSS_URL','alpha'),'chaine',0,'',$conf->entity);
if (! $result > 0) $error++;
@@ -63,6 +63,8 @@
if (! $result > 0) $error++;
$result=dolibarr_set_const($db, "STRIPE_MESSAGE_KO",GETPOST('STRIPE_MESSAGE_KO','alpha'),'chaine',0,'',$conf->entity);
if (! $result > 0) $error++;
+ $result=dolibarr_set_const($db, "STRIPE_PAYONLINE_SENDEMAIL",GETPOST('STRIPE_PAYONLINE_SENDEMAIL'),'chaine',0,'',$conf->entity);
+ if (! $result > 0) $error++;
if (! $error)
{
@@ -91,21 +93,22 @@
}
}
+
/*
* View
*/
$form=new Form($db);
-$SECRET_TEST_KEY="sk_test_xxxxxxxxxxxxxxxxxxxxxxxx"; // Stripe test secret key
-if (empty($conf->global->STRIPE_TEST_SECRET_KEY)) $conf->global->STRIPE_TEST_SECRET_KEY = $SECRET_TEST_KEY;
-$PUBLISHABLE_TEST_KEY="pk_test_xxxxxxxxxxxxxxxxxxxxxxxx"; // Stripe test publishable key
-if (empty($conf->global->STRIPE_TEST_PUBLISHABLE_KEY)) $conf->global->STRIPE_TEST_PUBLISHABLE_KEY = $PUBLISHABLE_TEST_KEY;
+//$SECRET_TEST_KEY="sk_test_xxxxxxxxxxxxxxxxxxxxxxxx"; // Stripe test secret key
+//if (empty($conf->global->STRIPE_TEST_SECRET_KEY)) $conf->global->STRIPE_TEST_SECRET_KEY = $SECRET_TEST_KEY;
+//$PUBLISHABLE_TEST_KEY="pk_test_xxxxxxxxxxxxxxxxxxxxxxxx"; // Stripe test publishable key
+//if (empty($conf->global->STRIPE_TEST_PUBLISHABLE_KEY)) $conf->global->STRIPE_TEST_PUBLISHABLE_KEY = $PUBLISHABLE_TEST_KEY;
-$SECRET_LIVE_KEY="sk_live_xxxxxxxxxxxxxxxxxxxxxxxx"; // Stripe live secret key
-if (empty($conf->global->STRIPE_LIVE_SECRET_KEY)) $conf->global->STRIPE_LIVE_SECRET_KEY = $SECRET_LIVE_KEY;
-$PUBLISHABLE_LIVE_KEY="pk_live_xxxxxxxxxxxxxxxxxxxxxxxx"; // Stripe live publishable key
-if (empty($conf->global->STRIPE_LIVE_PUBLISHABLE_KEY)) $conf->global->STRIPE_LIVE_PUBLISHABLE_KEY = $PUBLISHABLE_LIVE_KEY;
+//$SECRET_LIVE_KEY="sk_live_xxxxxxxxxxxxxxxxxxxxxxxx"; // Stripe live secret key
+//if (empty($conf->global->STRIPE_LIVE_SECRET_KEY)) $conf->global->STRIPE_LIVE_SECRET_KEY = $SECRET_LIVE_KEY;
+//$PUBLISHABLE_LIVE_KEY="pk_live_xxxxxxxxxxxxxxxxxxxxxxxx"; // Stripe live publishable key
+//if (empty($conf->global->STRIPE_LIVE_PUBLISHABLE_KEY)) $conf->global->STRIPE_LIVE_PUBLISHABLE_KEY = $PUBLISHABLE_LIVE_KEY;
llxHeader('',$langs->trans("StripeSetup"));
@@ -146,27 +149,27 @@
print '';
print '';
-print ''.$langs->trans("STRIPE_TEST_SECRET_KEY").' ';
-print ' ';
-print ' '.$langs->trans("Example").': sk_test_xxxxxxxxxxxxxxxxxxxxxxxx';
+print ''.$langs->trans("STRIPE_TEST_PUBLISHABLE_KEY").' ';
+print ' ';
+print ' '.$langs->trans("Example").': pk_test_xxxxxxxxxxxxxxxxxxxxxxxx';
print ' ';
print '';
-print ''.$langs->trans("STRIPE_TEST_PUBLISHABLE_KEY").' ';
-print ' ';
-print ' '.$langs->trans("Example").': pk_test_xxxxxxxxxxxxxxxxxxxxxxxx';
+print ''.$langs->trans("STRIPE_TEST_SECRET_KEY").' ';
+print ' ';
+print ' '.$langs->trans("Example").': sk_test_xxxxxxxxxxxxxxxxxxxxxxxx';
print ' ';
print '';
-print ''.$langs->trans("STRIPE_LIVE_SECRET_KEY").' ';
-print ' ';
-print ' '.$langs->trans("Example").': sk_live_xxxxxxxxxxxxxxxxxxxxxxxx';
+print ''.$langs->trans("STRIPE_LIVE_PUBLISHABLE_KEY").' ';
+print ' ';
+print ' '.$langs->trans("Example").': pk_live_xxxxxxxxxxxxxxxxxxxxxxxx';
print ' ';
print '';
-print ''.$langs->trans("STRIPE_LIVE_PUBLISHABLE_KEY").' ';
-print ' ';
-print ' '.$langs->trans("Example").': pk_live_xxxxxxxxxxxxxxxxxxxxxxxx';
+print ''.$langs->trans("STRIPE_LIVE_SECRET_KEY").' ';
+print ' ';
+print ' '.$langs->trans("Example").': sk_live_xxxxxxxxxxxxxxxxxxxxxxxx';
print ' ';
print '';
@@ -182,13 +185,13 @@
print '';
print $langs->trans("VendorName").' ';
print ' ';
-print ' '.$langs->trans("Example").': '.$mysoc->name;
+print ' '.$langs->trans("Example").': '.$mysoc->name;
print ' ';
print '';
print $langs->trans("CSSUrlForPaymentForm").' ';
print ' ';
-print ' '.$langs->trans("Example").': http://mysite/mycss.css';
+print ' '.$langs->trans("Example").': http://mysite/mycss.css';
print ' ';
print '';
@@ -203,6 +206,12 @@
$doleditor->Create();
print ' ';
+print '';
+print $langs->trans("STRIPE_PAYONLINE_SENDEMAIL").' ';
+print ' ';
+print ' '.$langs->trans("Example").': myemail@myserver.com';
+print ' ';
+
print '';
dol_fiche_end();
diff --git a/htdocs/public/stripe/config.php b/htdocs/stripe/config.php
similarity index 82%
rename from htdocs/public/stripe/config.php
rename to htdocs/stripe/config.php
index dfd0ea6aa1adf..0cc15c7fb609e 100644
--- a/htdocs/public/stripe/config.php
+++ b/htdocs/stripe/config.php
@@ -17,21 +17,22 @@
*/
/**
-* \file stripe/config.php
+* \file htdocs/public/stripe/config.php
* \ingroup Stripe
* \brief Page to move config in api
*/
-require '../../main.inc.php';
-
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
require_once DOL_DOCUMENT_ROOT.'/stripe/lib/stripe.lib.php';
require_once DOL_DOCUMENT_ROOT.'/includes/stripe/init.php';
+global $stripe;
+global $conf;
+
//use \includes\stripe as stripe;
$stripe = array();
-if(empty($conf->global->SKYPE_LIVE))
+if (empty($conf->global->SKYPE_LIVE))
{
$stripe = array(
"secret_key" => $conf->global->STRIPE_TEST_SECRET_KEY,
@@ -46,4 +47,7 @@
);
}
-\includes\stripe::setApiKey($stripe['secret_key']);
\ No newline at end of file
+require_once DOL_DOCUMENT_ROOT."/includes/stripe/lib/Stripe.php";
+require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
+
+\Stripe\Stripe::setApiKey($stripe['secret_key']);
diff --git a/htdocs/stripe/lib/stripe.lib.php b/htdocs/stripe/lib/stripe.lib.php
index 5f0b1bd0404eb..fbafd47c3abd1 100644
--- a/htdocs/stripe/lib/stripe.lib.php
+++ b/htdocs/stripe/lib/stripe.lib.php
@@ -73,6 +73,7 @@ function showStripePaymentUrl($type,$ref)
$out.=img_picto('','object_globe.png').' '.$langs->trans("ToOfferALinkForOnlinePayment",$servicename).' ';
$url=getStripePaymentUrl(0,$type,$ref);
$out.=' ';
+ $out.=ajax_autoselect("stripeurl", 0);
return $out;
}