관리-도구
편집 파일: zcAjaxPayment.php
<?php /** * zcAjaxPayment * * @copyright Copyright 2003-2023 Zen Cart Development Team * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0 * @version $Id: Scott C Wilson 2023 Mar 14 Modified in v1.5.8a $ */ use Zencart\LanguageLoader\LanguageLoaderFactory; class zcAjaxPayment extends base { /** * Test whether the selected payment module "does" the "CollectsCardDataOnsite" method */ public function doesCollectsCardDataOnsite() { require_once (DIR_WS_CLASSES.'payment.php'); $retVal = false; $payment = new payment ($_POST['paymentValue']); if (isset ($payment->selected_module)) { if ($payment->paymentClass->collectsCardDataOnsite===true) { $retVal = true; } } return (array( 'data' => $retVal )); } /** * Build replacement confirmation page, which doesn't transmit sensitive CHD */ public function prepareConfirmation() { global $messageStack, $template, $breadcrumb, $template_dir_select, $template_dir, $language_page_directory, $currencies, $order, $zco_notifier, $db, $current_page_base, $order_total_modules, $credit_covers; $_GET['main_page'] = $current_page_base = $current_page = FILENAME_CHECKOUT_CONFIRMATION; if ($_SESSION['cart']->count_contents ()<=0) { zen_redirect (zen_href_link (FILENAME_TIME_OUT)); } if (!zen_is_logged_in()) { $_SESSION['navigation']->set_snapshot (array( 'mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT )); zen_redirect (zen_href_link (FILENAME_LOGIN, '', 'SSL')); } else { // validate customer if (zen_get_customer_validate_session ($_SESSION['customer_id'])==false) { $_SESSION['navigation']->set_snapshot (); zen_redirect (zen_href_link (FILENAME_LOGIN, '', 'SSL')); } } // avoid hack attempts during the checkout procedure by checking the internal cartID if (isset ($_SESSION['cart']->cartID)&&$_SESSION['cartID']) { if ($_SESSION['cart']->cartID!=$_SESSION['cartID']) { zen_redirect (zen_href_link (FILENAME_CHECKOUT_SHIPPING, '', 'SSL')); } } // if no shipping method has been selected, redirect the customer to the shipping method selection page if (!isset ($_SESSION['shipping'])) { zen_redirect (zen_href_link (FILENAME_CHECKOUT_SHIPPING, '', 'SSL')); } if (isset ($_SESSION['shipping']['id']) && $_SESSION['shipping']['id']=='free_free' && $_SESSION['cart']->get_content_type () != 'virtual' && defined ('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING') && MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING == 'true' && defined ('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER') && $_SESSION['cart']->show_total () < MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER) { zen_redirect (zen_href_link (FILENAME_CHECKOUT_SHIPPING, '', 'SSL')); } if (isset ($_POST['payment'])) $_SESSION['payment'] = $_POST['payment']; $_SESSION['comments'] = $_POST['comments']; if (DISPLAY_CONDITIONS_ON_CHECKOUT=='true') { $_SESSION['conditions'] = $_POST['conditions'] ?? NULL; } // load the selected payment module require (DIR_WS_CLASSES.'payment.php'); $payment_modules = new payment ($_POST['payment']); $payment_modules->update_status (); if (($_POST['payment']==''||!is_object ($payment_modules->paymentClass))&&$credit_covers===FALSE) { $messageStack->add_session ('checkout_payment', ERROR_NO_PAYMENT_MODULE_SELECTED, 'error'); } $GLOBALS[$_POST['payment']] = $payment_modules->paymentClass; require (DIR_WS_CLASSES.'order.php'); $order = new order (); // load the selected shipping module require (DIR_WS_CLASSES.'shipping.php'); $shipping_modules = new shipping ($_SESSION['shipping']); require (DIR_WS_CLASSES.'order_total.php'); $order_total_modules = new order_total (); $order_total_modules->collect_posts (); $order_total_modules->pre_confirmation_check (); if (!isset ($credit_covers)) $credit_covers = FALSE; if ($credit_covers) { unset ($_SESSION['payment']); $_SESSION['payment'] = ''; } if (is_array ($payment_modules->modules)) { $payment_modules->pre_confirmation_check (); } if ($messageStack->size ('checkout_payment')>0) { zen_redirect (zen_href_link (FILENAME_CHECKOUT_PAYMENT, '', 'SSL')); } // Stock Check $flagAnyOutOfStock = false; $stock_check = array(); if (STOCK_CHECK=='true') { for($i = 0, $n = sizeof ($order->products); $i<$n; $i++) { if ($stock_check[$i] = zen_check_stock ($order->products[$i]['id'], $order->products[$i]['qty'])) { $flagAnyOutOfStock = true; } } // Out of Stock if ((STOCK_ALLOW_CHECKOUT!='true')&&($flagAnyOutOfStock==true)) { zen_redirect (zen_href_link (FILENAME_SHOPPING_CART)); } } // update customers_referral with $_SESSION['gv_id'] if (!empty($_SESSION['cc_id'])) { $discount_coupon_query = "SELECT coupon_code FROM ".TABLE_COUPONS." WHERE coupon_id = :couponID"; $discount_coupon_query = $db->bindVars ($discount_coupon_query, ':couponID', $_SESSION['cc_id'], 'integer'); $discount_coupon = $db->Execute ($discount_coupon_query); $customers_referral_query = "SELECT customers_referral FROM ".TABLE_CUSTOMERS." WHERE customers_id = :customersID"; $customers_referral_query = $db->bindVars ($customers_referral_query, ':customersID', $_SESSION['customer_id'], 'integer'); $customers_referral = $db->Execute ($customers_referral_query); // only use discount coupon if set by coupon if ($customers_referral->fields['customers_referral']=='' and CUSTOMERS_REFERRAL_STATUS==1) { $sql = "UPDATE ".TABLE_CUSTOMERS." SET customers_referral = :customersReferral WHERE customers_id = :customersID"; $sql = $db->bindVars ($sql, ':customersID', $_SESSION['customer_id'], 'integer'); $sql = $db->bindVars ($sql, ':customersReferral', $discount_coupon->fields['coupon_code'], 'string'); $db->Execute ($sql); } else { // do not update referral was added before } } if (isset (${$_SESSION['payment']}->form_action_url)) { $form_action_url = ${$_SESSION['payment']}->form_action_url; } else { $form_action_url = zen_href_link (FILENAME_CHECKOUT_PROCESS, '', 'SSL'); } // if shipping-edit button should be overridden, do so $editShippingButtonLink = zen_href_link (FILENAME_CHECKOUT_SHIPPING, '', 'SSL'); if (!empty($_SESSION['payment']) && !empty(${$_SESSION['payment']}) && is_object(${$_SESSION['payment']}) && method_exists(${$_SESSION['payment']}, 'alterShippingEditButton')) { $theLink = ${$_SESSION['payment']}->alterShippingEditButton (); if ($theLink) $editShippingButtonLink = $theLink; } // deal with billing address edit button $flagDisablePaymentAddressChange = false; if (isset (${$_SESSION['payment']}->flagDisablePaymentAddressChange)) { $flagDisablePaymentAddressChange = ${$_SESSION['payment']}->flagDisablePaymentAddressChange; } $current_page_base = FILENAME_CHECKOUT_CONFIRMATION; $languageLoaderFactory = new LanguageLoaderFactory(); $languageLoader = $languageLoaderFactory->make('catalog', [], $current_page, $template_dir); $languageLoader->loadInitialLanguageDefines(); $languageLoader->finalizeLanguageDefines(); require_once (DIR_WS_MODULES.zen_get_module_directory ('require_languages.php')); require_once (DIR_WS_MODULES.zen_get_module_directory ('meta_tags.php')); $breadcrumb->add (NAVBAR_TITLE_1, zen_href_link (FILENAME_CHECKOUT_SHIPPING, '', 'SSL')); $breadcrumb->add (NAVBAR_TITLE_2); $breadCrumbHtml = $breadcrumb->trail (BREAD_CRUMBS_SEPARATOR); $body_code = DIR_FS_CATALOG.$template->get_template_dir ('tpl_ajax_checkout_confirmation_default.php', DIR_WS_TEMPLATE, $current_page_base, 'templates').'/tpl_ajax_checkout_confirmation_default.php'; ob_start (); require_once ($body_code); $confirmationHtml = ob_get_clean (); ob_flush (); return (array( 'breadCrumbHtml' => $breadCrumbHtml, 'confirmationHtml' => $confirmationHtml, 'pageTitle' => META_TAG_TITLE )); } }