zen_cart实现支付前生成订单的方法_PHP
本文实例讲述了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;
为了避免对其他支付方式产生影响,代码做了个判断,只有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');*/ }
而且在确认页面,如果顾客一直刷新页面,就会一直生成订单,可以加个限制.
// 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; }
在pages/checkout_payment/header_php.php任意位置加上
unset($_SESSION['order_number_created']);
这样,就算顾客在确认页面一直刷新,因为已经设置了
$_SESSION['order_number_created']
订单不再生成,
如果顾客返回修改了购物车,再次到达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; }
更多关于zend framework相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《PHP操作zip文件及压缩技巧总结》、《php文件操作总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。
希望本文所述对大家基于zend框架的PHP程序设计有所帮助。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Die Baidu Map APP ist mittlerweile für viele Benutzer zur bevorzugten Reisenavigationssoftware geworden, daher sind einige der Funktionen hier umfassend und können kostenlos ausgewählt und bedient werden, um einige der Probleme zu lösen, auf die Sie beim täglichen Reisen stoßen können Erstellen Sie Ihre eigenen Reiserouten, planen Sie einige Ihrer eigenen Reisepläne, und nachdem Sie die entsprechenden Routen überprüft haben, können Sie entsprechend Ihren eigenen Bedürfnissen geeignete Reisemethoden auswählen. Egal, ob Sie sich für öffentliche Verkehrsmittel, Radfahren, Wandern oder Taxifahren entscheiden, kann alles zufriedenstellend sein Es gibt entsprechende Navigationsrouten, die Sie erfolgreich an einen bestimmten Ort führen können. Dann fühlt sich jeder wohler, wenn er sich für ein Taxi entscheidet. Es gibt viele Fahrer, die Bestellungen online entgegennehmen können werde super

uniapp ist ein plattformübergreifendes Anwendungsentwicklungs-Framework, mit dem kleine Programme, Apps und H5 gleichzeitig entwickelt werden können. In Uniapp-Anwendungen sind Zahlungs- und Auftragsverwaltung sehr häufige Anforderungen. In diesem Artikel wird erläutert, wie Zahlungsfunktionen und Auftragsverwaltung in der Uniapp-Anwendung implementiert werden, und es werden konkrete Codebeispiele aufgeführt. 1. Implementierung der Zahlungsfunktion Die Zahlungsfunktion ist der Schlüssel zur Realisierung von Online-Transaktionen und erfordert normalerweise die Integration des SDK einer Zahlungsplattform eines Drittanbieters. Im Folgenden sind die spezifischen Schritte zur Implementierung der Zahlungsfunktion in uniapp aufgeführt: Registrieren Sie sich und beziehen Sie eine Zahlungsplattform eines Drittanbieters

Mit der zunehmenden Beliebtheit von Online-Transaktionen diversifizieren sich die Zahlungsmethoden allmählich, wobei PayPal als weit verbreitete Zahlungsmethode sehr beliebt ist. Wenn Sie PayPal zum Verarbeiten von Transaktionen auf Ihrer Website oder Anwendung verwenden möchten, können Sie PHP und die PayPal-API verwenden, um den Zahlungsvorgang einfach abzuschließen. PayPalAPI ist eine Reihe von Programmierschnittstellen für die Interaktion mit PayPal. Über die API können Sie Benachrichtigungen von PayPal erhalten, die neuesten Transaktionsinformationen abfragen und Zahlungen veranlassen.

Zahlungsmethoden für Busfahrten in Wuhan: 1. Für die Barzahlung müssen Sie im Voraus ausreichend Wechselgeld bereithalten und das Geld direkt in den Münzschlitz einwerfen. Der vollständige Name von Wuhan Tong lautet Wuhan City Card , eine Karte mit integriertem Schaltkreis, auch Chipkarte genannt; 3. Besorgen Sie sich zuerst eine elektronische Buskarte von Wuhan und scannen Sie dann direkt den QR-Code, um das Geld abzuheben, wenn Sie in den Bus einsteigen . WeChat-Buscode-Zahlung: Öffnen Sie das WeChat-Applet „Ride Code“, aktivieren Sie den Wuhan „Ride Code“ und Sie können den QR-Code direkt scannen, um die Zahlung abzubuchen und in den Bus einzusteigen.

Bei der PayNow-Zahlung handelt es sich um einen elektronischen Überweisungsdienst. Benutzer können SGD-Überweisungen in Echtzeit direkt an den Zahlungsempfänger über die vom Zahlungsempfänger angegebene Mobiltelefonnummer, ID-Karten-/FIN-Nummer, UEN-Nummer oder den PayNow-QR-Code veranlassen, ohne dass die Gegenpartei erforderlich ist. Informationen zum Bankkonto.

Im schnelllebigen modernen Leben ist Meituan Takeout bei Verbrauchern wegen seiner praktischen Dienstleistungen und reichhaltigen Auswahl sehr beliebt. Unter anderem bietet die ultraschnelle Zahlungsfunktion den Benutzern großen Komfort, da die Zahlung mit einem Klick abgeschlossen werden kann und mühsame Eingabeschritte entfallen. Viele Benutzer möchten jedoch nicht direkt ohne Bestätigung bezahlen und möchten diese Funktion daher deaktivieren. Wie kann man also die schnelle Zahlung von Meituan Waimai deaktivieren? Im Folgenden stellt Ihnen der Herausgeber dieser Website ein detailliertes Schritt-für-Schritt-Setup-Tutorial vor. Ich hoffe, es kann Ihnen helfen! 1. Klicken Sie auf dem Desktop des Mobiltelefons auf das Verknüpfungssymbol „Meituan Takeaway“. 2. Melden Sie sich auf Ihrem Mobiltelefon bei der Meituan Takeout-App an und klicken Sie unten rechts auf „Mein“. 3. Klicken Sie in der Benutzeroberfläche „Mein“ auf „Wallet eingeben“. 4. Klicken Sie auf der Meituan Wallet-Benutzeroberfläche auf das Symbol „Einstellungen“ in der oberen rechten Ecke

1. Öffnen Sie zunächst die [Meituan]-APP und klicken Sie auf die Schaltfläche [Mein] in der unteren Navigationsleiste. 2. Klicken Sie dann auf die Funktionsschaltfläche [Mein Portemonnaie] und dann auf die Schaltfläche [Bargeldgutschein]. 3. Klicken Sie dann in der oberen Funktionsleiste auf die Schaltfläche [Sofortiger Abzug] und dann auf die Schaltfläche „Umschalten“, um den [Standardabzug während der Zahlung] zu aktivieren, um ihn erfolgreich zu aktivieren.

Um die Bestellzahlungstabelle des Lebensmitteleinkaufssystems in MySQL einzurichten, sind spezifische Codebeispiele erforderlich. Mit der Entwicklung des Internets ist das Einkaufen immer bequemer geworden. Im Einkaufsprozess ist die Bezahlung der Bestellung ein wichtiger Teil des Einkaufsvorgangs. Das Lebensmitteleinkaufssystem muss nicht nur über eine Bestellgenerierungsfunktion verfügen, sondern auch über einen vollständigen Bezahlvorgang verfügen, da nur eine erfolgreiche Zahlung als Abschluss einer Transaktion angesehen werden kann. In diesem Artikel wird beschrieben, wie Sie eine Bestellzahlungstabelle für das Lebensmitteleinkaufssystem in MySQL erstellen und spezifische Codebeispiele bereitstellen. 1. Gestaltung der Bestellzahlungstabelle Die Bestellzahlungstabelle im Lebensmitteleinkaufssystem speichert Bestellungen.
