Maison  >  Article  >  développement back-end  >  zen_cart implémente la méthode de génération des commandes avant paiement

zen_cart implémente la méthode de génération des commandes avant paiement

不言
不言original
2018-06-07 17:12:322061parcourir

Cet article présente principalement la méthode de zen_cart pour générer des commandes avant paiement. Il analyse en détail les étapes spécifiques et les techniques de mise en œuvre associées de zen_cart pour générer des commandes avant paiement sous forme d'exemples. Les amis dans le besoin peuvent se référer à cet article <.>

L'exemple décrit la méthode de zen_cart pour générer les commandes avant paiement. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

En plus de Paypal, les clients peuvent passer des commandes en saisissant index.php?main_page=checkout_confirmation via d'autres méthodes de paiement

Mais !! seulement C'est un peu différent. Il ne peut passer des commandes qu'après être revenu de son site officiel [paypal.com] et être entré sur la page checkout_process

Mais des accidents surviennent souvent : par exemple, le réseau n'est pas fluide. le client n'est pas Attention à fermer la page avant de revenir.

Ensuite, le backend de notre site Web ne pourra pas voir quel produit le client a acheté (même si vous pouvez voir qui l'a acheté dans le backend paypal, mais là). il n'y a vraiment aucun moyen de savoir qui l'a acheté) Qu'avez-vous acheté ?) C'est une chose très déprimante

Le principe de la commande anti-fuite de Paypal est------Passez une commande sur checkout_confirmation. page php !!!

La méthode est : copier le code

dans la dernière partie de ce fichier

Le code est le suivant : .

echo TITLE_CONTINUE_CHECKOUT_PROCEDURE . &#39;<br />&#39; . TEXT_CONTINUE_CHECKOUT_PROCEDURE;
et ajoutez le code après :

// create the order record 防漏单 
if ($_SESSION[&#39;payment&#39;] == &#39;paypal&#39;) { 
$insert_id = $order->create($order_totals, 2);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE&#39;);
$payment_modules->after_order_create($insert_id);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE&#39;);
// store the product info to the order
$order->create_add_products($insert_id);
$_SESSION[&#39;order_number_created&#39;] = $insert_id;

Afin d'éviter d'affecter les autres modes de paiement, le code a porté un jugement uniquement. Le paiement Paypal exécutera le code qui génère les commandes. Après avoir ajouté cette section, vous n'aurez plus à vous soucier des commandes manquantes.

Si vous avez besoin d'une approche plus parfaite, afin d'éviter que les clients génèrent des commandes à plusieurs reprises lors de l'accès au processus de paiement, vous devez ajouter un jugement

if($_SESSION[&#39;payment&#39;]!=&#39;paypal&#39;){
/*// create the order record
$insert_id = $order->create($order_totals, 2);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE&#39;);
$payment_modules->after_order_create($insert_id);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE&#39;);
// store the product info to the order
$order->create_add_products($insert_id);
$_SESSION[&#39;order_number_created&#39;] = $insert_id;
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE_ADD_PRODUCTS&#39;);
//send email notifications
$order->send_order_email($insert_id, 2);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_SEND_ORDER_EMAIL&#39;);*/
}

Et sur la page de confirmation, si le client continue d'actualiser la page, les commandes continueront à être générées.

// create the order record 防漏单
if ($_SESSION[&#39;payment&#39;] == &#39;paypal&#39; and !isset($_SESSION[&#39;order_number_created&#39;])) {
$insert_id = $order->create($order_totals, 2);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE&#39;);
$payment_modules->after_order_create($insert_id);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE&#39;);
// store the product info to the order
$order->create_add_products($insert_id);
$_SESSION[&#39;order_number_created&#39;] = $insert_id;
}

dans les pages/ Ajoutez

unset($_SESSION[&#39;order_number_created&#39;]);

n'importe où dans checkout_payment/header_php.php De cette façon, même si le client continue d'actualiser la page de confirmation. , car

a été paramétré

$_SESSION[&#39;order_number_created&#39;]

La commande n'est plus générée,

Si le client revient pour modifier le panier, $ _SESSION['order_number_created'] sera effacé lorsque le checkout_payment sera à nouveau atteint,

En fait, le code pour générer une commande peut être écrit dans la fonction confirmation() de modules/payment/paypal.php.

Le code est le suivant :

function confirmation() {
if(!isset($_SESSION[&#39;order_number_created&#39;]))
{
global $order,$order_total_modules,$order_totals,$zco_notifier,$insert_id; 
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_BEGIN'); // if the customer is not logged on, redirect them to the time out page
if (!$_SESSION['customer_id']) 
{ 
zen_redirect(zen_href_link(FILENAME_TIME_OUT)); 
} 
else 
{ // validate customer 
if (zen_get_customer_validate_session($_SESSION['customer_id']) == false) 
{ 
$_SESSION['navigation']->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_SHIPPING));
zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL')); 
} 
} 
if(isset($mycartID)&&$mycartID == $_SESSION['cart']->cartID)
{ 
return array('title' => MODULE_PAYMENT_PAYPAL_TEXT_DESCRIPTION); 
} 
$mycartID = $_SESSION['cart']->cartID; 
$order = new order; // prevent 0-entry orders from being generated/spoofed 
if (sizeof($order->products) < 1) 
{ 
zen_redirect(zen_href_link(FILENAME_SHOPPING_CART)); 
} 
$order_total_modules = new order_total; 
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_BEFORE_ORDER_TOTALS_PRE_CONFIRMATION_CHECK');
//$order_totals = $order_total_modules->pre_confirmation_check(); 
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_BEFORE_ORDER_TOTALS_PROCESS'); 
$order_totals = $order_total_modules->process(); 
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_TOTALS_PROCESS'); 
if (!isset($_SESSION['payment']) && !$credit_covers) 
{ 
zen_redirect(zen_href_link(FILENAME_DEFAULT)); 
} // load the before_process
// load the before_process function from the payment modules 
//$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_BEFOREPROCESS');
// create the order record 
$insert_id = $order->create($order_totals, 2); 
require(DIR_WS_LANGUAGES.'english/email_extras.php'); 
require(DIR_WS_LANGUAGES.'english/checkout_process.php'); 
// store the product info to the order 
$order->create_add_products($insert_id); 
$_SESSION[&#39;order_number_created&#39;] = $insert_id; 
$zco_notifier->notify('NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE_ADD_PRODUCTS');
$order->send_order_email($insert_id, 2);
if (is_array($order_total_modules->modules)) 
{
reset($order_total_modules->modules);
while (list(, $value) = each($order_total_modules->modules)) 
{
$class = substr($value, 0, strrpos($value, '.'));
if (!isset($GLOBALS[$class])) continue;
$GLOBALS[$class]->output=null;
}
}
}
else 
return false;
}

Ce qui précède est tout le contenu de cet article, je j'espère que cela sera utile pour l'apprentissage de tout le monde. Aide, veuillez faire attention au site Web PHP chinois pour plus de contenu connexe !

Recommandations associées :

Développement de l'interface de paiement PHP UnionPay


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn