zen_cart实现支付前生成订单的方法_php实例
本文实例讲述了zen_cart实现支付前生成订单的方法。分享给大家供大家参考,具体如下:
除了paypal之外. 客户通过其他的支付方式进入index.php?main_page=checkout_confirmation这个页面就能生出订单.
但是!! paypal就有点与众不同, 它只能是从它的官网 [paypal.com] 返回来并且进入checkout_process这个页面后,才能生出订单
而意外常会发生:比如网络不顺. 又比如客户不小心在返回前就关了页面.
那么,我们的网站后台就看不到客户买的是什么产品(虽然在paypal后台能看到是谁买了,但确实是无法知道他到底买了什么,)这可是一个好郁闷的事情
paypal防漏单的原理就是------在 checkout_confirmation.php这个页面先生出订单!!!
方法是:在这个文件的最后部分
' . 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 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++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. Alipay 전자 버스 카드 먼저 Alipay에서 무한 전자 버스 카드를 받은 다음 버스에 탑승할 때 직접 QR 코드를 스캔하세요. .WeChat 버스 코드 결제, WeChat "라이드 코드" 애플릿을 열고 우한 "라이드 코드"를 활성화하면 QR 코드를 직접 스캔하여 결제를 공제하고 버스에 탑승할 수 있습니다.

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

MySQL에서 식료품 쇼핑 시스템의 주문 결제 테이블을 구축하려면 구체적인 코드 예제가 필요합니다. 인터넷의 발달로 쇼핑이 점점 더 편리해졌습니다. 쇼핑 과정에서 주문 결제는 쇼핑 과정의 중요한 부분입니다. 식료품 쇼핑 시스템은 주문 생성 기능뿐만 아니라 완전한 결제 프로세스도 갖춰야 한다. 결제에 성공해야 거래가 완료된 것으로 간주할 수 있기 때문이다. 이 기사에서는 MySQL에서 식료품 쇼핑 시스템에 대한 주문 결제 테이블을 생성하는 방법을 설명하고 구체적인 코드 예제를 제공합니다. 1. 주문 결제 테이블 설계 식료품 쇼핑 시스템의 주문 결제 테이블은 주문을 저장합니다.

PayNow 결제는 상대방 없이도 수취인이 지정한 휴대폰 번호, ID 카드/FIN 번호, UEN 번호 또는 PayNow QR 코드를 통해 수취인에게 실시간 SGD 이체를 직접 시작할 수 있는 전자 이체 서비스입니다. 은행 계좌 정보.

1. 먼저 [Meituan] 앱을 열고 하단 탐색 표시줄에서 [내] 버튼을 클릭합니다. 2. 그 후 [내 지갑] 기능 버튼을 클릭한 후, [현금상품권] 버튼을 클릭하세요. 3. 그리고 상단 기능바에서 [즉시출금] 버튼을 클릭한 후, 스위치 버튼을 클릭하여 [결제시 기본출금]을 활성화하면 성공적으로 활성화됩니다.
