payment.php
来自「this the oscommerce 3.0 aplha 4」· PHP 代码 · 共 360 行
PHP
360 行
<?php/* $Id: payment.php 1498 2007-03-29 14:04:50Z hpdl $ osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2006 osCommerce This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License v2 (1991) as published by the Free Software Foundation.*/ include(dirname(__FILE__) . '/credit_card.php'); class osC_Payment { var $selected_module; var $_modules = array(), $_group = 'payment';// class constructor function osC_Payment($module = '') { global $osC_Database, $osC_Language; $Qmodules = $osC_Database->query('select code from :table_templates_boxes where modules_group = "payment"'); $Qmodules->bindTable(':table_templates_boxes', TABLE_TEMPLATES_BOXES); $Qmodules->setCache('modules-payment'); $Qmodules->execute(); while ($Qmodules->next()) { $this->_modules[] = $Qmodules->value('code'); } $Qmodules->freeResult(); if (empty($this->_modules) === false) { if ((empty($module) === false) && in_array($module, $this->_modules)) { $this->_modules = array($module); $this->selected_module = 'osC_Payment_' . $module; } $osC_Language->load('modules-payment'); foreach ($this->_modules as $modules) { include('includes/modules/payment/' . $modules . '.' . substr(basename(__FILE__), (strrpos(basename(__FILE__), '.')+1))); $module_class = 'osC_Payment_' . $modules; $GLOBALS[$module_class] = new $module_class(); } usort($this->_modules, array('osC_Payment', '_usortModules')); if ( (!empty($module)) && (in_array($module, $this->_modules)) && (isset($GLOBALS['osC_Payment_' . $module]->form_action_url)) ) { $this->form_action_url = $GLOBALS['osC_Payment_' . $module]->form_action_url; } } }// class methods function sendTransactionToGateway($url, $parameters, $header = '', $method = 'post', $certificate = '') { if (empty($header) || !is_array($header)) { $header = array(); } $server = parse_url($url); if (isset($server['port']) === false) { $server['port'] = ($server['scheme'] == 'https') ? 443 : 80; } if (isset($server['path']) === false) { $server['path'] = '/'; } if (isset($server['user']) && isset($server['pass'])) { $header[] = 'Authorization: Basic ' . base64_encode($server['user'] . ':' . $server['pass']); } $connection_method = 0; if (function_exists('curl_init')) { $connection_method = 1; } elseif ( ($server['scheme'] == 'http') || (($server['scheme'] == 'https') && extension_loaded('openssl')) ) { if (function_exists('stream_context_create')) { $connection_method = 3; } else { $connection_method = 2; } } $result = ''; switch ($connection_method) { case 1: $curl = curl_init($server['scheme'] . '://' . $server['host'] . $server['path'] . (isset($server['query']) ? '?' . $server['query'] : '')); curl_setopt($curl, CURLOPT_PORT, $server['port']); if (!empty($header)) { curl_setopt($curl, CURLOPT_HTTPHEADER, $header); } if (!empty($certificate)) { curl_setopt($curl, CURLOPT_SSLCERT, $certificate); } curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FORBID_REUSE, 1); curl_setopt($curl, CURLOPT_FRESH_CONNECT, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $parameters); $result = curl_exec($curl); curl_close($curl); break; case 2: if ($fp = @fsockopen(($server['scheme'] == 'https' ? 'ssl' : $server['scheme']) . '://' . $server['host'], $server['port'])) { @fputs($fp, 'POST ' . $server['path'] . (isset($server['query']) ? '?' . $server['query'] : '') . ' HTTP/1.1' . "\r\n" . 'Host: ' . $server['host'] . "\r\n" . 'Content-type: application/x-www-form-urlencoded' . "\r\n" . 'Content-length: ' . strlen($parameters) . "\r\n" . (!empty($header) ? implode("\r\n", $header) . "\r\n" : '') . 'Connection: close' . "\r\n\r\n" . $parameters . "\r\n\r\n"); $result = @stream_get_contents($fp); @fclose($fp); $result = trim(substr($result, strpos($result, "\r\n\r\n", strpos(strtolower($result), 'content-length:')))); } break; case 3: $options = array('http' => array('method' => 'POST', 'header' => 'Host: ' . $server['host'] . "\r\n" . 'Content-type: application/x-www-form-urlencoded' . "\r\n" . 'Content-length: ' . strlen($parameters) . "\r\n" . (!empty($header) ? implode("\r\n", $header) . "\r\n" : '') . 'Connection: close', 'content' => $parameters)); if (!empty($certificate)) { $options['ssl'] = array('local_cert' => $certificate); } $context = stream_context_create($options); if ($fp = fopen($url, 'r', false, $context)) { $result = ''; while (!feof($fp)) { $result .= fgets($fp, 4096); } fclose($fp); } break; default: exec(escapeshellarg(CFG_APP_CURL) . ' -d ' . escapeshellarg($parameters) . ' "' . $server['scheme'] . '://' . $server['host'] . $server['path'] . (isset($server['query']) ? '?' . $server['query'] : '') . '" -P ' . $server['port'] . ' -k' . (!empty($header) ? ' -H ' . escapeshellarg(implode("\r\n", $header)) : '') . (!empty($certificate) ? ' -E ' . escapeshellarg($certificate) : ''), $result); $result = implode("\n", $result); } return $result; } function getCode() { return $this->_code; } function getTitle() { return $this->_title; } function getDescription() { return $this->_description; } function getMethodTitle() { return $this->_method_title; } function isEnabled() { return $this->_status; } function getSortOrder() { return $this->_sort_order; } function getJavascriptBlock() { } function getJavascriptBlocks() { global $osC_Language; $js = ''; if (is_array($this->_modules)) { $js = '<script type="text/javascript"><!-- ' . "\n" . 'function check_form() {' . "\n" . ' var error = 0;' . "\n" . ' var error_message = "' . $osC_Language->get('js_error') . '";' . "\n" . ' var payment_value = null;' . "\n" . ' if (document.checkout_payment.payment_method.length) {' . "\n" . ' for (var i=0; i<document.checkout_payment.payment_method.length; i++) {' . "\n" . ' if (document.checkout_payment.payment_method[i].checked) {' . "\n" . ' payment_value = document.checkout_payment.payment_method[i].value;' . "\n" . ' }' . "\n" . ' }' . "\n" . ' } else if (document.checkout_payment.payment_method.checked) {' . "\n" . ' payment_value = document.checkout_payment.payment_method.value;' . "\n" . ' } else if (document.checkout_payment.payment_method.value) {' . "\n" . ' payment_value = document.checkout_payment.payment_method.value;' . "\n" . ' }' . "\n\n"; foreach ($this->_modules as $module) { if ($GLOBALS['osC_Payment_' . $module]->isEnabled()) { $js .= $GLOBALS['osC_Payment_' . $module]->getJavascriptBlock(); } } $js .= "\n" . ' if (payment_value == null) {' . "\n" . ' error_message = error_message + "' . $osC_Language->get('js_no_payment_module_selected') . '\n";' . "\n" . ' error = 1;' . "\n" . ' }' . "\n\n" . ' if (error == 1) {' . "\n" . ' alert(error_message);' . "\n" . ' return false;' . "\n" . ' } else {' . "\n" . ' return true;' . "\n" . ' }' . "\n" . '}' . "\n" . '//--></script>' . "\n"; } return $js; } function selection() { $selection_array = array(); foreach ($this->_modules as $module) { if ($GLOBALS['osC_Payment_' . $module]->isEnabled()) { $selection = $GLOBALS['osC_Payment_' . $module]->selection(); if (is_array($selection)) $selection_array[] = $selection; } } return $selection_array; } function pre_confirmation_check() { if (is_array($this->_modules)) { if (isset($GLOBALS[$this->selected_module]) && is_object($GLOBALS[$this->selected_module]) && $GLOBALS[$this->selected_module]->isEnabled()) { $GLOBALS[$this->selected_module]->pre_confirmation_check(); } } } function confirmation() { if (is_array($this->_modules)) { if (isset($GLOBALS[$this->selected_module]) && is_object($GLOBALS[$this->selected_module]) && $GLOBALS[$this->selected_module]->isEnabled()) { return $GLOBALS[$this->selected_module]->confirmation(); } } } function process_button() { if (is_array($this->_modules)) { if (isset($GLOBALS[$this->selected_module]) && is_object($GLOBALS[$this->selected_module]) && $GLOBALS[$this->selected_module]->isEnabled()) { return $GLOBALS[$this->selected_module]->process_button(); } } } function process() { if (is_array($this->_modules)) { if (isset($GLOBALS[$this->selected_module]) && is_object($GLOBALS[$this->selected_module]) && $GLOBALS[$this->selected_module]->isEnabled()) { return $GLOBALS[$this->selected_module]->process(); } } } function get_error() { if (is_array($this->_modules)) { if (isset($GLOBALS[$this->selected_module]) && is_object($GLOBALS[$this->selected_module]) && $GLOBALS[$this->selected_module]->isEnabled()) { return $GLOBALS[$this->selected_module]->get_error(); } } } function hasActionURL() { if (is_array($this->_modules)) { if (isset($GLOBALS[$this->selected_module]) && is_object($GLOBALS[$this->selected_module]) && $GLOBALS[$this->selected_module]->isEnabled()) { if (isset($GLOBALS[$this->selected_module]->form_action_url) && (empty($GLOBALS[$this->selected_module]->form_action_url) === false)) { return true; } } } return false; } function getActionURL() { return $GLOBALS[$this->selected_module]->form_action_url; } function hasActive() { static $has_active; if (isset($has_active) === false) { $has_active = false; foreach ($this->_modules as $module) { if ($GLOBALS['osC_Payment_' . $module]->isEnabled()) { $has_active = true; break; } } } return $has_active; } function numberOfActive() { static $active; if (isset($active) === false) { $active = 0; foreach ($this->_modules as $module) { if ($GLOBALS['osC_Payment_' . $module]->isEnabled()) { $active++; } } } return $active; } function _usortModules($a, $b) { if ($GLOBALS['osC_Payment_' . $a]->getSortOrder() == $GLOBALS['osC_Payment_' . $b]->getSortOrder()) { return strnatcasecmp($GLOBALS['osC_Payment_' . $a]->getTitle(), $GLOBALS['osC_Payment_' . $a]->getTitle()); } return ($GLOBALS['osC_Payment_' . $a]->getSortOrder() < $GLOBALS['osC_Payment_' . $b]->getSortOrder()) ? -1 : 1; } }?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?