zen_cart實(shí)現(xiàn)支付前生成訂單的方法
本文實(shí)例講述了zen_cart實(shí)現(xiàn)支付前生成訂單的方法。分享給大家供大家參考,具體如下:
除了paypal之外. 客戶通過其他的支付方式進(jìn)入index.php?main_page=checkout_confirmation這個(gè)頁面就能生出訂單.
但是!! paypal就有點(diǎn)與眾不同, 它只能是從它的官網(wǎng) [paypal.com] 返回來并且進(jìn)入checkout_process這個(gè)頁面后,才能生出訂單
而意外常會(huì)發(fā)生:比如網(wǎng)絡(luò)不順. 又比如客戶不小心在返回前就關(guān)了頁面.
那么,我們的網(wǎng)站后臺(tái)就看不到客戶買的是什么產(chǎn)品(雖然在paypal后臺(tái)能看到是誰買了,但確實(shí)是無法知道他到底買了什么,)這可是一個(gè)好郁悶的事情
paypal防漏單的原理就是------在 checkout_confirmation.php這個(gè)頁面先生出訂單!!!
方法是:在這個(gè)文件的最后部分
后面添加代碼:
// 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;
為了避免對(duì)其他支付方式產(chǎn)生影響,代碼做了個(gè)判斷,只有paypal支付會(huì)運(yùn)行這些生成訂單的代碼,加了這段后就不用擔(dān)心會(huì)漏單了。
如果需要更完美的做法,為防止顧客在訪問checkout process的時(shí)候會(huì)重復(fù)生成訂單, 那么就需要加個(gè)判斷
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');*/
}
而且在確認(rèn)頁面,如果顧客一直刷新頁面,就會(huì)一直生成訂單,可以加個(gè)限制.
// 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']);
這樣,就算顧客在確認(rèn)頁面一直刷新,因?yàn)橐呀?jīng)設(shè)置了
$_SESSION['order_number_created']
訂單不再生成,
如果顧客返回修改了購物車,再次到達(dá)checkout_payment時(shí)$_SESSION['order_number_created']將被清除,
其實(shí),生成訂單的代碼可以寫在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;
}
更多關(guān)于zend framework相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Zend FrameWork框架入門教程》、《PHP操作zip文件及壓縮技巧總結(jié)》、《php文件操作總結(jié)》、《ThinkPHP入門教程》、《ThinkPHP常用方法總結(jié)》、《smarty模板入門基礎(chǔ)教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對(duì)大家基于zend框架的PHP程序設(shè)計(jì)有所幫助。
- python實(shí)現(xiàn)zencart產(chǎn)品數(shù)據(jù)導(dǎo)入到magento(python導(dǎo)入數(shù)據(jù))
- zen cart新進(jìn)商品的隨機(jī)排序修改方法
- php 修改zen-cart下單和付款流程以防止漏單
- Zend Framework入門知識(shí)點(diǎn)小結(jié)
- Zend Framework緩存Cache用法簡(jiǎn)單實(shí)例
- Zend Framework基本頁面布局分析
- Zend Framework+smarty用法實(shí)例詳解
- Zend Framework教程之Bootstrap類用法概述
- zen cart實(shí)現(xiàn)訂單中增加paypal中預(yù)留電話的方法
相關(guān)文章
php fsockopen解決辦法 php實(shí)現(xiàn)多線程
有沒有辦法在php中實(shí)現(xiàn)多線程呢?假設(shè)你正在寫一個(gè)基于多臺(tái)服務(wù)器的php應(yīng)用,理想的情況時(shí)同時(shí)向多臺(tái)服務(wù)器發(fā)送請(qǐng)求,而不是一臺(tái)接一臺(tái)。可以實(shí)現(xiàn)嗎?回答是當(dāng)然可以,下面看解決方法2014-01-01
php中通過curl模擬登陸discuz論壇的實(shí)現(xiàn)代碼
PHP支持的由Daniel Stenberg創(chuàng)建的libcurl庫允許你與各種的服務(wù)器使用各種類型的協(xié)議進(jìn)行連接和通訊。libcurl目前支持http、https、ftp、 gopher、telnet、dict、file和ldap協(xié)議2012-02-02
php實(shí)現(xiàn)評(píng)論回復(fù)刪除功能
這篇文章主要為大家詳細(xì)介紹了php實(shí)現(xiàn)評(píng)論回復(fù)刪除功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Laravel 中創(chuàng)建 Zip 壓縮文件并提供下載的實(shí)現(xiàn)方法
這篇文章主要介紹了Laravel 中創(chuàng)建 Zip 壓縮文件并提供下載,本文通過兩個(gè)任務(wù),實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
php 如何禁用eval() 函數(shù)實(shí)例詳解
在php中eval是一個(gè)函數(shù)并且不能直接禁用了,但eval函數(shù)又相當(dāng)?shù)奈kU(xiǎn)并經(jīng)常會(huì)出現(xiàn)一些問題,今天我們就一起來看看eval函數(shù)對(duì)數(shù)組的操作及php 如何禁用eval() 函數(shù),需要的朋友可以參考下2016-12-12
php數(shù)組去重復(fù)數(shù)據(jù)示例
這篇文章主要介紹了php數(shù)組去重復(fù)數(shù)據(jù)示例,有時(shí)候獲得的php數(shù)組中總是出現(xiàn)value重復(fù)的,使用下面的方法就可以去掉重復(fù)數(shù)據(jù)2014-02-02

