Jump to content

Récupérer la variable montant total d'une commande


Recommended Posts

Bonjour à tous.

Je test un petit système d'affiliation que je greffe sur PS, mais j'ai besoin de mettre un code sur une page sur laquelle l'acheteur arrive après avoir acheté et ce code est censé récupérer le montant total de la commande.

Le code est le suivant, et il faut que je remplace obligatoirement les variables setTotalCost() et optionnellement les autres.

[removed]
sale.setTotalCost('120.50');
sale.setOrderID('ORD_12345XYZ');
sale.setProductID('test product');
[removed]



Seul problème, sur PS, si le client paie par chèque ou virement, il redirigé vers une page order-confirmation.php qui dont le code est le suivant :

<?php

/* SSL Management */
$useSSL = true;

include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/header.php');

$id_cart = intval(Tools::getValue('id_cart', 0));
$id_module = intval(Tools::getValue('id_module', 0));
$id_order = Order::getOrderByCartId(intval($id_cart));
$secure_key = isset($_GET['key']) ? $_GET['key'] : false;
if (!$id_order OR !$id_module OR !$secure_key OR empty($secure_key))
   Tools::redirect('history.php');

$order = new Order(intval($id_order));
if (!Validate::isLoadedObject($order) OR $order->id_customer != $cookie->id_customer OR $secure_key != $order->secure_key)
   Tools::redirect('history.php');
$module = Module::getInstanceById(intval($id_module));
if ($order->payment != $module->displayName)
   Tools::redirect('history.php');
$smarty->assign(array(
   'HOOK_ORDER_CONFIRMATION' => Hook::orderConfirmation(intval($id_order)),
   'HOOK_PAYMENT_RETURN' => Hook::paymentReturn(intval($id_order), intval($id_module))));

$smarty->display(_PS_THEME_DIR_.'order-confirmation.tpl');

include(dirname(__FILE__).'/footer.php');

?>


Par contre, s'il paie par paypal, il est redirigé vers l'historique après le paiement, et la page d'historique ne donne évidement pas directement le montant total de la commande qui vient d'être passée.

En revanche, j'ai vu un fichier dans chacun des dossiers chèque, bankwire (pour les paiement par virement), et paypal et ce fichier s'appelle validation.php qui se présente comme suit, mais je ne vois pas à quel moment il intervient dans le processus de paiement, ni comment récupérer la variable qui nous intéresse ?*/$!

<?php

include(dirname(__FILE__).'/../../config/config.inc.php');
include(dirname(__FILE__).'/../../header.php');
include(dirname(__FILE__).'/cheque.php');

$currency = new Currency(intval(isset($_POST['currency_payement']) ? $_POST['currency_payement'] : $cookie->id_currency));
$total = floatval(number_format($cart->getOrderTotal(true, 3), 2, '.', ''));
$mailVars =    array(
   '{cheque_name}' => Configuration::get('CHEQUE_NAME'),
   '{cheque_address}' => Configuration::get('CHEQUE_ADDRESS'),
   '{cheque_address_html}' => nl2br(Configuration::get('CHEQUE_ADDRESS')));

$cheque = new Cheque();
$cheque->validateOrder($cart->id, _PS_OS_CHEQUE_, $total, $cheque->displayName, NULL, $mailVars, $currency->id);
$order = new Order($cheque->currentOrder);
Tools::redirectLink(__PS_BASE_URI__.'order-confirmation.php?id_cart='.$cart->id.'&id;_module='.$cheque->id.'&id;_order='.$cheque->currentOrder.'&key;='.$order->secure_key);
?>



Si quelqu'un peut m'aider à trouver sur quel fichier je peux retrouver la variable "montant total de la commande" dans tout ce labyrinthe après une commande, ça m'enlèverai une grosse épine du pied. Si en plus il est possible de récupérer cette variable hors TVA et Frais de Port, je me verrai dans l'obligation d'offrir un ptit resto en guise de remerciement ;-)


Merci d'avance

Link to comment
Share on other sites

Bonjour,
Voici ce que je peux en dire, et sauf erreurs de ma part ;-)

// récupération prix total produits hors promos
echo $cart->getOrderTotal(true, 1);
// récupération prix total des promotions
echo $cart->getOrderTotal(true, 2);
// récupération prix total
echo $cart->getOrderTotal(true, 3);
// récupération prix total sans frais de port
echo $cart->getOrderTotal(true, 4);
// récupération frais de port seuls
echo $cart->getOrderTotal(true, 5);
// ou
echo $cart->getOrderShippingCost();
// on a aussi les codes 6 et 7 à voir...


<?php
include(dirname(__FILE__).'/../../config/config.inc.php');
include(dirname(__FILE__).'/../../header.php');
include(dirname(__FILE__).'/cheque.php');
$currency = new Currency(intval(isset($_POST['currency_payement']) ? $_POST['currency_payement'] : $cookie->id_currency));
// on a donc, récupération du montant total, avec formatage du format du montant au passage, ici :
$total = floatval(number_format($cart->getOrderTotal(true, 3), 2, '.', ''));
$mailVars =    array(
   '{cheque_name}' => Configuration::get('CHEQUE_NAME'),
   '{cheque_address}' => Configuration::get('CHEQUE_ADDRESS'),
   '{cheque_address_html}' => nl2br(Configuration::get('CHEQUE_ADDRESS')));

$cheque = new Cheque();
$cheque->validateOrder($cart->id, _PS_OS_CHEQUE_, $total, $cheque->displayName, NULL, $mailVars, $currency->id);
$order = new Order($cheque->currentOrder);
Tools::redirectLink(__PS_BASE_URI__.'order-confirmation.php?id_cart='.$cart->id.'&id;_module='.$cheque->id.'&id;_order='.$cheque->currentOrder.'&key;='.$order->secure_key);
?> 

Link to comment
Share on other sites

  • 2 months later...
  • 2 weeks later...

Bon alors pour être plus précis, j'ai donc insérer mon code de mon programme d'affiliation dans la page :
order-confirmation.php
Le tracking de la vent s'éffectue correctement (pour les chèques dans un premier temps)
mais voilà je n'arrive pas à récupérer la variable prix total de la commande.
Mon code :

<?php
/* SSL Management */
$useSSL = true;
include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/header.php');
$id_cart = intval(Tools::getValue('id_cart', 0));
$id_module = intval(Tools::getValue('id_module', 0));
$id_order = Order::getOrderByCartId(intval($id_cart));
$secure_key = isset($_GET['key']) ? $_GET['key'] : false;
if (!$id_order OR !$id_module OR !$secure_key OR empty($secure_key))
   Tools::redirect('history.php');
$order = new Order(intval($id_order));
if (!Validate::isLoadedObject($order) OR $order->id_customer != $cookie->id_customer OR $secure_key != $order->secure_key)
Tools::redirect('history.php');
$module = Module::getInstanceById(intval($id_module));
if ($order->payment != $module->displayName)
   Tools::redirect('history.php');
$smarty->assign(array(
   'HOOK_ORDER_CONFIRMATION' => Hook::orderConfirmation(intval($id_order)),
   'HOOK_PAYMENT_RETURN' => Hook::paymentReturn(intval($id_order), intval($id_module))));
?>
<!-----insertion javascript ici !!------>
var sale = PostAffTracker.createSale();
sale.setTotalCost('<?php echo $cart->getOrderTotal(true, 3); ?>');
sale.setOrderID('<?php echo $id_order; ?>');
PostAffTracker.register();
[removed]
<?php
$smarty->display(_PS_THEME_DIR_.'order-confirmation.tpl');
include(dirname(__FILE__).'/footer.php');
?>



cette variable est à renseigner dans : sale.setTotalCost();
Pourquoi cela ne marche pas alors que la variable $id_order retourne bien un résultat ?
J'ai mal placé mon code ou alors ce n'est pas le bon pour récupérer le prix total ?

Merci d'avance de votre aide.

Link to comment
Share on other sites

  • 1 year later...

Bonjour,

Voici comment j'ai fait pour inserér le code de Google Conversions pour qu'il prenne en compte le montant HT de la commande (sans le port). Je suis en PrestaShop 1.3.1

Dans le fichier order-confirmation.php il faut ajouter les lignes suivantes :
$_cart = new Cart($id_cart);
$smarty->assign('total_prod', $_cart->getOrderTotal(false, 4));
Juste avant la ligne :
$smarty->display(_PS_THEME_DIR_.'order-confirmation.tpl');

Dans le fichier order-confirmation.tpl il faut coller le code fourni par Google directement en haut de la page puis modifier une des lignes de cette façon :
var google_conversion_value = {$total_prod};

En espérant vous avoir aidé

Philippe

Link to comment
Share on other sites

  • 4 weeks later...
  • 11 months later...

Bonjour,

Je suis en PS 1.4.3 et souhaite pouvoir récupérer la valeur totale de la transaction sur la page de confirmation de commande. J'ai testé la portion de code d'AgriToys, mais cela ne fonctionne pas. Avez-vous davantages d'info pour permettre cette remontée de donnée ?

Merci,

Link to comment
Share on other sites

  • 1 year later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...