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程序设计有所帮助。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Baidu Map APP kini telah menjadi perisian navigasi perjalanan pilihan untuk ramai pengguna, jadi beberapa fungsi di sini adalah komprehensif dan boleh dipilih dan dikendalikan secara percuma untuk menyelesaikan beberapa masalah yang mungkin anda hadapi dalam perjalanan harian Anda boleh menyemak beberapa daripadanya laluan perjalanan anda sendiri, rancang beberapa pelan perjalanan anda sendiri, dan selepas menyemak laluan yang sepadan, anda boleh memilih kaedah perjalanan yang sesuai mengikut keperluan anda sendiri Jadi sama ada anda memilih beberapa pengangkutan awam, Berbasikal, berjalan kaki atau menaiki teksi semuanya boleh memuaskan keperluan anda. Terdapat laluan navigasi yang sesuai yang boleh membawa anda ke tempat tertentu Kemudian semua orang akan berasa lebih selesa jika mereka memilih untuk menaiki teksi menjadi super

uniapp ialah rangka kerja pembangunan aplikasi merentas platform yang boleh membangunkan program kecil, Apps dan H5 pada masa yang sama. Dalam aplikasi uniapp, pengurusan pembayaran dan pesanan adalah keperluan yang sangat biasa. Artikel ini akan memperkenalkan cara melaksanakan fungsi pembayaran dan pengurusan pesanan dalam aplikasi uniapp dan memberikan contoh kod khusus. 1. Melaksanakan fungsi pembayaran Fungsi pembayaran adalah kunci untuk merealisasikan urus niaga dalam talian, dan ia biasanya memerlukan penyepaduan SDK platform pembayaran pihak ketiga. Berikut ialah langkah khusus untuk melaksanakan fungsi pembayaran dalam uniapp: Daftar dan dapatkan platform pembayaran pihak ketiga

Dengan peningkatan populariti transaksi dalam talian, kaedah pembayaran secara beransur-ansur mempelbagaikan, antaranya PayPal sangat popular sebagai kaedah pembayaran yang digunakan secara meluas. Jika anda ingin menggunakan PayPal untuk memproses transaksi di tapak web atau aplikasi anda, maka anda boleh menggunakan PHP dan API PayPal untuk menyelesaikan proses pembayaran dengan mudah. PayPalAPI ialah satu set antara muka pengaturcaraan untuk berinteraksi dengan PayPal. Melalui API, anda boleh menerima pemberitahuan daripada PayPal, menanyakan maklumat transaksi terkini dan memulakan pembayaran.

Kaedah pembayaran untuk menaiki bas di Wuhan: 1. Untuk pembayaran tunai, anda perlu menyediakan wang yang mencukupi terlebih dahulu dan memasukkan wang terus ke dalam slot syiling 2. Leret kad Wuhan Tong Nama penuh Wuhan Tong ialah Kad Bandar Wuhan , yang merupakan kad litar bersepadu, juga dipanggil kad cip; . Pembayaran kod bas WeChat , buka applet "Ride Code" WeChat, aktifkan "Ride Code" Wuhan dan anda boleh terus mengimbas kod QR untuk menolak bayaran dan menaiki bas.

Dalam kehidupan moden yang serba pantas, Meituan Takeaway amat disayangi oleh pengguna kerana perkhidmatannya yang mudah dan pilihan yang pelbagai. Antaranya, fungsi pembayaran ultra pantas membawa kemudahan yang hebat kepada pengguna Pembayaran boleh diselesaikan dengan satu klik, menghapuskan langkah input yang membosankan. Walau bagaimanapun, ramai pengguna tidak suka membayar terus tanpa pengesahan, jadi mereka mahu mematikan ciri ini. Jadi bagaimana untuk mematikan pembayaran pantas Meituan Waimai? Dalam perkara berikut, editor laman web ini akan membawakan anda tutorial persediaan langkah demi langkah yang terperinci, saya harap ia dapat membantu anda! 1. Klik ikon pintasan "Meituan Takeaway" pada desktop telefon mudah alih. 2. Log masuk ke aplikasi bawa pulang Meituan pada telefon mudah alih anda dan klik "Saya" di penjuru kanan sebelah bawah. 3. Dalam antara muka Saya, klik "Masukkan Dompet". 4. Dalam antara muka dompet Meituan, klik ikon "Tetapan" di penjuru kanan sebelah atas

Pembayaran PayNow ialah perkhidmatan pindahan elektronik Pengguna boleh terus memulakan pemindahan SGD masa nyata kepada penerima melalui nombor telefon mudah alih, nombor kad pengenalan/FIN, nombor UEN atau kod QR PayNow yang ditentukan oleh penerima tanpa memerlukan pihak lain. Maklumat akaun bank.

1. Mula-mula buka APP [Meituan], klik butang [Saya] di bar navigasi bawah. 2. Kemudian klik butang fungsi [Dompet Saya] dan klik butang [Baucar Tunai]. 3. Kemudian dalam bar fungsi atas, klik butang [Potongan Segera], dan klik butang suis untuk menghidupkan [Potongan Lalai semasa Pembayaran] untuk berjaya menghidupkannya.

Untuk mewujudkan jadual pembayaran pesanan sistem beli-belah runcit dalam MySQL, contoh kod khusus diperlukan Dengan perkembangan Internet, membeli-belah telah menjadi lebih dan lebih mudah. Dalam proses membeli-belah, pembayaran pesanan adalah bahagian penting dalam proses membeli-belah. Sistem beli-belah runcit bukan sahaja perlu mempunyai fungsi penjanaan pesanan, tetapi juga mesti mempunyai proses pembayaran yang lengkap, kerana hanya pembayaran yang berjaya boleh dianggap sebagai menyelesaikan transaksi. Artikel ini akan menerangkan cara membuat jadual pembayaran pesanan untuk sistem beli-belah runcit dalam MySQL dan memberikan contoh kod khusus. 1. Reka bentuk jadual pembayaran pesanan Jadual pembayaran pesanan dalam sistem beli-belah runcit menyimpan pesanan.
