最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

zen_cart實現(xiàn)支付前生成訂單的方法

 更新時間:2016年05月06日 09:09:35   作者:freshman007  
這篇文章主要介紹了zen_cart實現(xiàn)支付前生成訂單的方法,結合實例形式詳細分析了zen_cart支付前生成訂單的具體步驟與相關實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了zen_cart實現(xiàn)支付前生成訂單的方法。分享給大家供大家參考,具體如下:

除了paypal之外. 客戶通過其他的支付方式進入index.php?main_page=checkout_confirmation這個頁面就能生出訂單.
但是!! paypal就有點與眾不同, 它只能是從它的官網 [paypal.com] 返回來并且進入checkout_process這個頁面后,才能生出訂單

而意外常會發(fā)生:比如網絡不順. 又比如客戶不小心在返回前就關了頁面.

那么,我們的網站后臺就看不到客戶買的是什么產品(雖然在paypal后臺能看到是誰買了,但確實是無法知道他到底買了什么,)這可是一個好郁悶的事情

paypal防漏單的原理就是------在 checkout_confirmation.php這個頁面先生出訂單!!!

方法是:在這個文件的最后部分

復制代碼 代碼如下:
echo TITLE_CONTINUE_CHECKOUT_PROCEDURE . '<br />' . 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程序設計有所幫助。

相關文章

  • 深入了解PHP中的Array數組和foreach

    深入了解PHP中的Array數組和foreach

    下面小編就為大家?guī)硪黄钊肓私釶HP中的Array數組和foreach。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • php fsockopen解決辦法 php實現(xiàn)多線程

    php fsockopen解決辦法 php實現(xiàn)多線程

    有沒有辦法在php中實現(xiàn)多線程呢?假設你正在寫一個基于多臺服務器的php應用,理想的情況時同時向多臺服務器發(fā)送請求,而不是一臺接一臺??梢詫崿F(xiàn)嗎?回答是當然可以,下面看解決方法
    2014-01-01
  • php中通過curl模擬登陸discuz論壇的實現(xiàn)代碼

    php中通過curl模擬登陸discuz論壇的實現(xiàn)代碼

    PHP支持的由Daniel Stenberg創(chuàng)建的libcurl庫允許你與各種的服務器使用各種類型的協(xié)議進行連接和通訊。libcurl目前支持http、https、ftp、 gopher、telnet、dict、file和ldap協(xié)議
    2012-02-02
  • Laravel中Trait的用法實例詳解

    Laravel中Trait的用法實例詳解

    這篇文章主要介紹了Laravel中Trait的用法,結合實例形式詳細描述了Trait的功能特性及在Laravel的相關使用技巧,需要的朋友可以參考下
    2016-03-03
  • PHP使用POP3讀取郵箱接收郵件的示例代碼

    PHP使用POP3讀取郵箱接收郵件的示例代碼

    這篇文章主要介紹了PHP如何使用POP3讀取郵箱接收郵件,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • CTF中的PHP特性函數解析之中篇

    CTF中的PHP特性函數解析之中篇

    這篇文章主要為大家介紹了CTF中的PHP特性函數解析,本文分三篇此篇為中篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • php實現(xiàn)評論回復刪除功能

    php實現(xiàn)評論回復刪除功能

    這篇文章主要為大家詳細介紹了php實現(xiàn)評論回復刪除功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Laravel 中創(chuàng)建 Zip 壓縮文件并提供下載的實現(xiàn)方法

    Laravel 中創(chuàng)建 Zip 壓縮文件并提供下載的實現(xiàn)方法

    這篇文章主要介紹了Laravel 中創(chuàng)建 Zip 壓縮文件并提供下載,本文通過兩個任務,實例代碼相結合的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • php 如何禁用eval() 函數實例詳解

    php 如何禁用eval() 函數實例詳解

    在php中eval是一個函數并且不能直接禁用了,但eval函數又相當的危險并經常會出現(xiàn)一些問題,今天我們就一起來看看eval函數對數組的操作及php 如何禁用eval() 函數,需要的朋友可以參考下
    2016-12-12
  • php數組去重復數據示例

    php數組去重復數據示例

    這篇文章主要介紹了php數組去重復數據示例,有時候獲得的php數組中總是出現(xiàn)value重復的,使用下面的方法就可以去掉重復數據
    2014-02-02

最新評論

南昌市| 安义县| 花莲市| 罗定市| 调兵山市| 梁平县| 嘉禾县| 印江| 福建省| 余庆县| 临漳县| 阿瓦提县| 科技| 三门峡市| 高邑县| 社旗县| 米易县| 女性| SHOW| 榆社县| 临湘市| 当阳市| 页游| 谢通门县| 贡嘎县| 中西区| 镇原县| 响水县| 湟中县| 大丰市| 城固县| 威宁| 海晏县| 饶阳县| 五家渠市| 民权县| 乡宁县| 高清| 桦甸市| 湟中县| 汕头市|