Rumah pembangunan bahagian belakang tutorial php zen_cart实现支付前生成订单的方法_PHP

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

May 28, 2016 am 11:46 AM
bayar

本文实例讲述了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;

Salin selepas log masuk

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

Salin selepas log masuk

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

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

Salin selepas log masuk

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

unset($_SESSION['order_number_created']);

Salin selepas log masuk

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

$_SESSION['order_number_created']

Salin selepas log masuk

订单不再生成,

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

Salin selepas log masuk

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

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara membayar untuk menaiki teksi di Peta Baidu Pengenalan kepada langkah pembayaran untuk menaiki teksi. Cara membayar untuk menaiki teksi di Peta Baidu Pengenalan kepada langkah pembayaran untuk menaiki teksi. Mar 13, 2024 am 10:04 AM

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

Cara aplikasi uniapp melaksanakan pengurusan pembayaran dan pesanan Cara aplikasi uniapp melaksanakan pengurusan pembayaran dan pesanan Oct 19, 2023 am 10:37 AM

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

Bayar menggunakan PHP dan API PayPal Bayar menggunakan PHP dan API PayPal Jun 19, 2023 pm 04:13 PM

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.

Bagaimana untuk membayar untuk menaiki bas di Wuhan Bagaimana untuk membayar untuk menaiki bas di Wuhan Oct 13, 2022 pm 02:17 PM

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.

Cara menutup Pembayaran Ekspres Bawa Keluar Meituan Cara menutup Pembayaran Ekspres Bawa Keluar Meituan Mar 27, 2024 am 10:41 AM

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

Apakah maksud pembayaran paynow? Apakah maksud pembayaran paynow? Sep 30, 2022 am 11:01 AM

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.

Di manakah diskaun segera Meituan boleh ditolak secara lalai apabila pembayaran didayakan_ Tutorial mengenai diskaun segera Meituan ditolak secara lalai apabila pembayaran didayakan Di manakah diskaun segera Meituan boleh ditolak secara lalai apabila pembayaran didayakan_ Tutorial mengenai diskaun segera Meituan ditolak secara lalai apabila pembayaran didayakan Mar 28, 2024 am 11:00 AM

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.

Mewujudkan jadual pembayaran pesanan untuk sistem beli-belah runcit dalam MySQL Mewujudkan jadual pembayaran pesanan untuk sistem beli-belah runcit dalam MySQL Nov 01, 2023 pm 03:48 PM

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.

See all articles