>백엔드 개발 >PHP 튜토리얼 >zen_cart는 결제 전 주문을 생성하는 방법을 구현합니다.

zen_cart는 결제 전 주문을 생성하는 방법을 구현합니다.

不言
不言원래의
2018-06-07 17:12:322084검색

이 글에서는 결제 전 주문을 생성하는 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 . &#39;<br />&#39; . TEXT_CONTINUE_CHECKOUT_PROCEDURE;
마지막에 코드를 추가하세요.

// create the order record 防漏单 
if ($_SESSION[&#39;payment&#39;] == &#39;paypal&#39;) { 
$insert_id = $order->create($order_totals, 2);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE&#39;);
$payment_modules->after_order_create($insert_id);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE&#39;);
// store the product info to the order
$order->create_add_products($insert_id);
$_SESSION[&#39;order_number_created&#39;] = $insert_id;

다른 결제 방법에 영향을 주지 않기 위해 코드는 PayPal 결제에서만 주문을 생성하는 코드를 실행하게 됩니다. 주문 누락에 대해 걱정할 필요가 없습니다.

좀 더 완벽한 접근이 필요하다면 고객이 결제 과정에 접근할 때 반복적으로 주문이 생성되는 것을 방지하기 위해 판단을 추가해야 합니다

if($_SESSION[&#39;payment&#39;]!=&#39;paypal&#39;){
/*// create the order record
$insert_id = $order->create($order_totals, 2);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE&#39;);
$payment_modules->after_order_create($insert_id);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE&#39;);
// store the product info to the order
$order->create_add_products($insert_id);
$_SESSION[&#39;order_number_created&#39;] = $insert_id;
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE_ADD_PRODUCTS&#39;);
//send email notifications
$order->send_order_email($insert_id, 2);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_SEND_ORDER_EMAIL&#39;);*/
}

그리고 확인 페이지에서 고객이 계속 새로 고침을 한다면 페이지에서 계속 주문을 생성할 때

// create the order record 防漏单
if ($_SESSION[&#39;payment&#39;] == &#39;paypal&#39; and !isset($_SESSION[&#39;order_number_created&#39;])) {
$insert_id = $order->create($order_totals, 2);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_ORDER_CREATE&#39;);
$payment_modules->after_order_create($insert_id);
$zco_notifier->notify(&#39;NOTIFY_CHECKOUT_PROCESS_AFTER_PAYMENT_MODULES_AFTER_ORDER_CREATE&#39;);
// store the product info to the order
$order->create_add_products($insert_id);
$_SESSION[&#39;order_number_created&#39;] = $insert_id;
}

추가

unset($_SESSION[&#39;order_number_created&#39;]);

이런 방식으로 고객이 설정되었기 때문에 확인 페이지가 계속 새로고침됩니다

$_SESSION[&#39;order_number_created&#39;]

주문이 더 이상 생성되지 않습니다.

고객이 장바구니를 수정하기 위해 돌아오는 경우 $_SESSION['order_number_created']는 checkout_결제 시 삭제됩니다. 다시 도달하면

실제로 주문을 생성하는 코드는 모듈/결제/paypal.php의 확인() 함수에서 작성할 수 있습니다.

코드는 다음과 같습니다.

function confirmation() {
if(!isset($_SESSION[&#39;order_number_created&#39;]))
{
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[&#39;order_number_created&#39;] = $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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.