zen_cart实现支付前生成订单的方法,zen_cart生成订单
zen_cart实现支付前生成订单的方法,zen_cart生成订单
本文实例讲述了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程序设计有所帮助。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Baidu 지도 앱은 이제 많은 사용자가 선호하는 여행 내비게이션 소프트웨어가 되었습니다. 따라서 여기에 있는 일부 기능은 포괄적이며 무료로 선택 및 작동하여 일상 여행에서 발생할 수 있는 일부 문제를 해결할 수 있습니다. 자신만의 여행 경로를 선택하고, 자신만의 여행 계획을 세우고, 해당 경로를 확인한 후 자신의 필요에 따라 적절한 여행 방법을 선택할 수 있습니다. 따라서 대중교통을 선택하든, 자전거를 타든, 걷든, 택시를 타든 모두 만족할 수 있습니다. 귀하의 필요에 따라 귀하를 특정 장소로 성공적으로 안내할 수 있는 해당 내비게이션 경로가 있습니다. 그러면 모든 사람이 택시를 선택하면 더 편리하게 느낄 것입니다. 그들은 모두 온라인으로 주문을 받을 수 있습니다. 슈퍼가 되다

uniapp은 작은 프로그램과 Apps, H5를 동시에 개발할 수 있는 크로스 플랫폼 애플리케이션 개발 프레임워크입니다. uniapp 애플리케이션에서 결제 및 주문 관리는 매우 일반적인 요구 사항입니다. 이 글에서는 유니앱 애플리케이션에서 결제 기능과 주문 관리를 구현하는 방법을 소개하고 구체적인 코드 예시를 제공합니다. 1. 결제 기능 구현 결제 기능은 온라인 거래를 실현하는 핵심이며, 일반적으로 타사 결제 플랫폼의 SDK 통합이 필요합니다. uniapp에서 결제 기능을 구현하는 구체적인 단계는 다음과 같습니다. 제3자 결제 플랫폼 등록 및 획득

많은 사용자가 위의 기능 중 일부를 매우 좋아한다고 생각합니다. 시간과 노력을 더 절약할 수 있을 뿐만 아니라 음식에 대한 다양한 요구를 항상 충족할 수 있습니다. 잘못 배달되었거나 음식을 먹을 수 없는 경우에는 일부 환불 방법을 취해야 하므로 일부 문제가 있는 경우 더 나은 도움을 드릴 수 있도록 여기 계신 모든 분들께 도움을 드릴 수 있기를 바랍니다. 앞으로 우리가 주문하는 테이크어웨이는 확실히 우리의 권리와 이익을 직접 보호할 수 있습니다. 판매자가 동의하지 않으면 우리가 직접 고객 개입을 전달할 것이므로 세부 사항을 지금 살펴보겠습니다. 이 멋진 이벤트를 놓치지 마세요, 서둘러주세요

온라인 거래의 인기가 높아짐에 따라 결제수단도 점차 다양해지고 있으며, 그 중 페이팔(PayPal)이 널리 사용되는 결제수단으로 큰 인기를 얻고 있습니다. PayPal을 사용하여 웹사이트나 애플리케이션에서 거래를 처리하려는 경우 PHP 및 PayPal API를 사용하여 결제 프로세스를 쉽게 완료할 수 있습니다. PayPalAPI는 PayPal과 상호작용하기 위한 프로그래밍 인터페이스 세트입니다. API를 통해 PayPal로부터 알림을 받고, 최신 거래 정보를 쿼리하고, 결제를 시작할 수 있습니다.

1. 먼저 메이투안 앱을 열고 입력할 주문을 클릭하세요. 2. 그런 다음 사용할 페이지에서 환불하려는 주문을 클릭합니다. 3. 그러면 가맹점 정보와 주문 정보가 나옵니다. 이때 환불 신청 옵션이 보입니다. 4. 마지막으로 환불사유를 선택해주세요. 일반적으로 가맹점에 영향이 없는 사유를 선택하시면 빠르게 결제가 처리됩니다.

PHP 쇼핑몰 개발 스킬: 장바구니 디자인 및 주문 동기화 기능 쇼핑몰 웹사이트에서 장바구니와 주문은 없어서는 안되는 기능입니다. 장바구니는 이용자가 상품을 구매하고 임시 장바구니에 저장하기 위해 사용되며, 주문은 이용자가 상품 구매를 확인한 후 생성되는 기록입니다. 사용자 경험을 향상시키고 오류를 줄이기 위해서는 장바구니 및 주문 동기화 기능을 설계하는 것이 매우 중요합니다. 1. 장바구니 및 주문의 개념 장바구니는 일반적으로 사용자가 구매한 상품을 보관하는 데 사용되는 임시 컨테이너입니다. 사용자는 쉽게 탐색하고 관리할 수 있도록 장바구니에 제품을 추가할 수 있습니다.

우한에서 버스 이용 시 결제 방법: 1. 현금으로 결제하려면 충분한 잔돈을 미리 준비한 후 동전 투입구에 직접 넣어야 합니다. 2. 우한 통 카드를 스와이프하세요. 정식 이름은 우한 시티 카드입니다. , 칩 카드라고도 불리는 집적 회로 카드 3. Alipay 전자 버스 카드 먼저 Alipay에서 무한 전자 버스 카드를 받은 다음 버스에 탑승할 때 직접 QR 코드를 스캔하세요. .WeChat 버스 코드 결제, WeChat "라이드 코드" 애플릿을 열고 우한 "라이드 코드"를 활성화하면 QR 코드를 직접 스캔하여 결제를 공제하고 버스에 탑승할 수 있습니다.

빠르게 변화하는 현대 생활 속에서 Meituan Takeaway는 편리한 서비스와 풍부한 선택으로 소비자들에게 깊은 사랑을 받고 있습니다. 그 중 초고속 결제 기능은 번거로운 입력 단계를 없애고 한 번의 클릭으로 결제를 완료할 수 있어 사용자에게 큰 편의성을 제공합니다. 하지만 많은 사용자들은 확인 없이 직접 결제하는 것을 좋아하지 않아 이 기능을 끄고 싶어합니다. 그렇다면 Meituan Waimai의 빠른 결제를 끄는 방법은 무엇입니까? 다음에서는 이 웹사이트의 편집자가 자세한 단계별 설정 튜토리얼을 제공할 것입니다. 이 튜토리얼이 도움이 되기를 바랍니다! 1. 휴대폰 바탕화면에서 '메이투안 테이크아웃' 바로가기 아이콘을 클릭하세요. 2. 휴대폰에서 메이투안 테이크아웃 앱에 로그인한 후 오른쪽 하단의 '내'를 클릭하세요. 3. 내 인터페이스에서 "지갑 입력"을 클릭하세요. 4. 메이투안 지갑 인터페이스 오른쪽 상단에 있는 '설정' 아이콘을 클릭하세요.
