Maison développement back-end tutoriel php zen_cart实现支付前生成订单的方法_PHP

zen_cart实现支付前生成订单的方法_PHP

May 28, 2016 am 11:46 AM
支付

本文实例讲述了zen_cart实现支付前生成订单的方法。分享给大家供大家参考,具体如下:

除了paypal之外. 客户通过其他的支付方式进入index.php?main_page=checkout_confirmation这个页面就能生出订单.
但是!! paypal就有点与众不同, 它只能是从它的官网 [paypal.com] 返回来并且进入checkout_process这个页面后,才能生出订单

而意外常会发生:比如网络不顺. 又比如客户不小心在返回前就关了页面.

那么,我们的网站后台就看不到客户买的是什么产品(虽然在paypal后台能看到是谁买了,但确实是无法知道他到底买了什么,)这可是一个好郁闷的事情

paypal防漏单的原理就是------在 checkout_confirmation.php这个页面先生出订单!!!

方法是:在这个文件的最后部分

代码如下:

echo TITLE_CONTINUE_CHECKOUT_PROCEDURE . '
' . TEXT_CONTINUE_CHECKOUT_PROCEDURE;

后面添加代码:

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

Copier après la connexion

为了避免对其他支付方式产生影响,代码做了个判断,只有paypal支付会运行这些生成订单的代码,加了这段后就不用担心会漏单了。

如果需要更完美的做法,为防止顾客在访问checkout process的时候会重复生成订单, 那么就需要加个判断

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

Copier après la connexion

而且在确认页面,如果顾客一直刷新页面,就会一直生成订单,可以加个限制.

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

Copier après la connexion

在pages/checkout_payment/header_php.php任意位置加上

unset($_SESSION['order_number_created']);

Copier après la connexion

这样,就算顾客在确认页面一直刷新,因为已经设置了

$_SESSION['order_number_created']

Copier après la connexion

订单不再生成,

如果顾客返回修改了购物车,再次到达checkout_payment时$_SESSION['order_number_created']将被清除,

其实,生成订单的代码可以写在modules/payment/paypal.php的 function confirmation()中。

代码如下:

function confirmation() {
if(!isset($_SESSION['order_number_created']))
{
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['order_number_created'] = $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;
}

Copier après la connexion

更多关于zend framework相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《PHP操作zip文件及压缩技巧总结》、《php文件操作总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。

希望本文所述对大家基于zend框架的PHP程序设计有所帮助。

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment payer une course en taxi sur Baidu Maps Introduction aux étapes de paiement d'une course en taxi. Comment payer une course en taxi sur Baidu Maps Introduction aux étapes de paiement d'une course en taxi. Mar 13, 2024 am 10:04 AM

Baidu Map APP est désormais devenu le logiciel de navigation de voyage préféré pour de nombreux utilisateurs, de sorte que certaines des fonctions ici sont complètes et peuvent être sélectionnées et utilisées gratuitement pour résoudre certains des problèmes que vous pouvez rencontrer lors de vos déplacements quotidiens. vos propres itinéraires de voyage, planifiez certains de vos propres projets de voyage et après avoir vérifié les itinéraires correspondants, vous pouvez choisir les méthodes de voyage appropriées en fonction de vos propres besoins. Ainsi, que vous choisissiez des transports en commun, le vélo, la marche ou le taxi peuvent tous satisfaire. Il existe des itinéraires de navigation correspondants qui peuvent vous conduire à un certain endroit. Ensuite, tout le monde se sentira plus à l'aise s'il choisit de prendre un taxi. Il existe de nombreux chauffeurs. Ils sont tous capables de prendre des commandes en ligne et il existe des taxis. devenir super

Comment l'application Uniapp implémente la gestion des paiements et des commandes Comment l'application Uniapp implémente la gestion des paiements et des commandes Oct 19, 2023 am 10:37 AM

uniapp est un framework de développement d'applications multiplateforme qui peut développer simultanément de petits programmes, des applications et H5. Dans les applications Uniapp, le paiement et la gestion des commandes sont des besoins très courants. Cet article présentera comment implémenter les fonctions de paiement et la gestion des commandes dans l'application uniapp, et donnera des exemples de code spécifiques. 1. Implémentation de la fonction de paiement La fonction de paiement est la clé pour réaliser des transactions en ligne, et elle nécessite généralement l'intégration du SDK d'une plateforme de paiement tierce. Voici les étapes spécifiques pour mettre en œuvre la fonction de paiement dans uniapp : Inscrivez-vous et obtenez une plateforme de paiement tierce.

Payez en utilisant PHP et l'API PayPal Payez en utilisant PHP et l'API PayPal Jun 19, 2023 pm 04:13 PM

Avec la popularité croissante des transactions en ligne, les méthodes de paiement se diversifient progressivement, parmi lesquelles PayPal est très populaire en tant que méthode de paiement largement utilisée. Si vous souhaitez utiliser PayPal pour traiter des transactions sur votre site Web ou votre application, vous pouvez utiliser PHP et l'API PayPal pour terminer facilement le processus de paiement. PayPalAPI est un ensemble d'interfaces de programmation permettant d'interagir avec PayPal. Grâce à l'API, vous pouvez recevoir des notifications de PayPal, consulter les dernières informations sur les transactions et initier des paiements.

Comment payer pour prendre le bus à Wuhan Comment payer pour prendre le bus à Wuhan Oct 13, 2022 pm 02:17 PM

Méthodes de paiement pour prendre les bus à Wuhan : 1. Pour le paiement en espèces, vous devez préparer suffisamment de monnaie à l'avance et mettre l'argent directement dans la fente à monnaie ; 2. Glissez la carte Wuhan Tong. Le nom complet de Wuhan Tong est Wuhan City Card. , qui est une carte à circuit intégré, également appelée carte à puce ; 3. Carte de bus électronique Alipay Obtenez d'abord une carte de bus électronique Wuhan dans Alipay, puis scannez directement le code QR pour déduire l'argent lorsque vous montez dans le bus 4 ; . Paiement du code de bus WeChat, ouvrez l'applet WeChat "Ride Code", activez le "Ride Code" de Wuhan et vous pouvez directement scanner le code QR pour déduire le paiement et monter dans le bus.

Comment fermer le paiement Meituan Takeout Express Comment fermer le paiement Meituan Takeout Express Mar 27, 2024 am 10:41 AM

Dans la vie moderne trépidante, Meituan Takeaway est profondément apprécié par les consommateurs pour ses services pratiques et ses choix riches. Parmi eux, la fonction de paiement ultra-rapide apporte une grande commodité aux utilisateurs. Le paiement peut être effectué en un seul clic, éliminant ainsi les étapes de saisie fastidieuses. Cependant, de nombreux utilisateurs n'aiment pas payer directement sans confirmation et souhaitent donc désactiver cette fonctionnalité. Alors comment désactiver le paiement rapide de Meituan Waimai ? Dans ce qui suit, l'éditeur de ce site vous proposera un tutoriel de configuration détaillé étape par étape, j'espère qu'il pourra vous aider ! 1. Cliquez sur l'icône de raccourci « Meituan Takeout » sur le bureau du téléphone mobile. 2. Connectez-vous à l'application de plats à emporter Meituan sur votre téléphone mobile et cliquez sur « Mon » dans le coin inférieur droit. 3. Dans l'interface Mon, cliquez sur « Entrer dans le portefeuille ». 4. Sur l'interface Meituan Wallet, cliquez sur l'icône « Paramètres » dans le coin supérieur droit.

Que signifie le paiement Paynow ? Que signifie le paiement Paynow ? Sep 30, 2022 am 11:01 AM

Le paiement PayNow est un service de transfert électronique. Les utilisateurs peuvent directement lancer des transferts SGD en temps réel vers le bénéficiaire via le numéro de téléphone mobile, le numéro de carte d'identité/FIN, le numéro UEN ou le code QR PayNow spécifié par le bénéficiaire sans avoir besoin de l'autre partie. Informations sur le compte bancaire.

Où la remise instantanée Meituan peut-elle être déduite par défaut lorsque le paiement est activé_ Tutoriel sur la remise instantanée Meituan déduite par défaut lorsque le paiement est activé Où la remise instantanée Meituan peut-elle être déduite par défaut lorsque le paiement est activé_ Tutoriel sur la remise instantanée Meituan déduite par défaut lorsque le paiement est activé Mar 28, 2024 am 11:00 AM

1. Ouvrez d'abord l'application [Meituan], cliquez sur le bouton [Mon] dans la barre de navigation inférieure. 2. Cliquez ensuite sur le bouton de fonction [Mon portefeuille] et cliquez sur le bouton [Cash Voucher]. 3. Ensuite, dans la barre de fonctions supérieure, cliquez sur le bouton [Déduction instantanée], puis cliquez sur le bouton de commutation pour activer [Déduction par défaut pendant le paiement] afin de l'activer avec succès.

Établir un tableau de paiement des commandes pour le système d'épicerie dans MySQL Établir un tableau de paiement des commandes pour le système d'épicerie dans MySQL Nov 01, 2023 pm 03:48 PM

Pour établir le tableau de paiement des commandes du système d'épicerie dans MySQL, des exemples de code spécifiques sont nécessaires. Avec le développement d'Internet, les achats sont devenus de plus en plus pratiques. Dans le processus d'achat, le paiement de la commande constitue une partie importante du processus d'achat. Le système d'épicerie doit non seulement disposer d'une fonction de génération de commandes, mais également d'un processus de paiement complet, car seul un paiement réussi peut être considéré comme l'achèvement d'une transaction. Cet article décrira comment créer un tableau de paiement de commande pour le système d'épicerie dans MySQL et fournira des exemples de code spécifiques. 1. Conception du tableau de paiement des commandes. Le tableau de paiement des commandes dans le système d'épicerie stocke les commandes.

See all articles