Heim Backend-Entwicklung PHP-Tutorial 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;

Nach dem Login kopieren

为了避免对其他支付方式产生影响,代码做了个判断,只有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');*/
}

Nach dem Login kopieren

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

// 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;
}

Nach dem Login kopieren

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

unset($_SESSION['order_number_created']);

Nach dem Login kopieren

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

$_SESSION['order_number_created']

Nach dem Login kopieren

订单不再生成,

如果顾客返回修改了购物车,再次到达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;
}

Nach dem Login kopieren

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

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

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So bezahlen Sie eine Taxifahrt auf Baidu Maps. Einführung in die Zahlungsschritte für eine Taxifahrt. So bezahlen Sie eine Taxifahrt auf Baidu Maps. Einführung in die Zahlungsschritte für eine Taxifahrt. Mar 13, 2024 am 10:04 AM

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

Wie die Uniapp-Anwendung die Zahlungs- und Bestellverwaltung implementiert Wie die Uniapp-Anwendung die Zahlungs- und Bestellverwaltung implementiert Oct 19, 2023 am 10:37 AM

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

Bezahlen Sie mit PHP und der PayPal-API Bezahlen Sie mit PHP und der PayPal-API Jun 19, 2023 pm 04:13 PM

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.

So bezahlen Sie die Busfahrt in Wuhan So bezahlen Sie die Busfahrt in Wuhan Oct 13, 2022 pm 02:17 PM

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.

Was bedeutet Paynow-Zahlung? Was bedeutet Paynow-Zahlung? Sep 30, 2022 am 11:01 AM

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.

So schließen Sie Meituan Takeout Express Payment So schließen Sie Meituan Takeout Express Payment Mar 27, 2024 am 10:41 AM

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

Wo kann der Meituan-Sofortrabatt standardmäßig abgezogen werden, wenn die Zahlung aktiviert ist_ Tutorial zum standardmäßigen Abzug des Meituan-Sofortrabatts, wenn die Zahlung aktiviert ist Wo kann der Meituan-Sofortrabatt standardmäßig abgezogen werden, wenn die Zahlung aktiviert ist_ Tutorial zum standardmäßigen Abzug des Meituan-Sofortrabatts, wenn die Zahlung aktiviert ist Mar 28, 2024 am 11:00 AM

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.

Erstellen einer Bestellzahlungstabelle für das Lebensmitteleinkaufssystem in MySQL Erstellen einer Bestellzahlungstabelle für das Lebensmitteleinkaufssystem in MySQL Nov 01, 2023 pm 03:48 PM

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.

See all articles