이 글에서는 결제 전 주문을 생성하는 zen_cart의 방법을 주로 소개합니다. 결제 전 주문을 생성하는 zen_cart의 구체적인 단계와 관련 구현 기술을 예시 형식으로 자세히 분석합니다. 이 기사에서는 zen_cart에 의한 결제 구현에 대해 설명합니다. 이전에 주문을 생성하는 방법입니다. 참고하실 수 있도록 자세한 내용은 다음과 같습니다.
페이팔 외에도 고객은 index.php?main_page=checkout_confirmation 페이지에 다른 결제 수단을 입력하여 주문할 수 있습니다.
하지만 페이팔은 조금 다릅니다. , it 공식 홈페이지 [paypal.com]에서 반품하고 checkout_process 페이지에 진입한 후에만 주문할 수 있습니다
하지만 네트워크가 원활하지 않거나 고객이 반품하기 전에 실수로 페이지를 닫는 등의 사고가 자주 발생합니다.
그러면 저희 웹사이트 백엔드는 고객이 어떤 제품을 구매했는지 알 수 없습니다(페이팔 백엔드에서는 누가 구매했는지 알 수 있지만 그가 무엇을 구매했는지는 알 수 없습니다). 이것은 매우 우울한 일입니다
의 원칙. 페이팔 누출 방지 주문은------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 결제에서만 주문을 생성하는 코드를 실행하게 됩니다. 주문 누락에 대해 걱정할 필요가 없습니다. 좀 더 완벽한 접근이 필요하다면 고객이 결제 과정에 접근할 때 반복적으로 주문이 생성되는 것을 방지하기 위해 판단을 추가해야 합니다
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; }추가
unset($_SESSION['order_number_created']);이런 방식으로 고객이 설정되었기 때문에 확인 페이지가 계속 새로고침됩니다
$_SESSION['order_number_created']주문이 더 이상 생성되지 않습니다. 고객이 장바구니를 수정하기 위해 돌아오는 경우 $_SESSION['order_number_created']는 checkout_결제 시 삭제됩니다. 다시 도달하면 실제로 주문을 생성하는 코드는 모듈/결제/paypal.php의 확인() 함수에서 작성할 수 있습니다. 코드는 다음과 같습니다.
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; }위 내용은 모두의 학습에 도움이 되기를 바랍니다. ! 관련 권장 사항:
UnionPay 결제 인터페이스 PHP 버전 개발
위 내용은 zen_cart는 결제 전 주문을 생성하는 방법을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!