Go to the documentation of this file.00001 <?php
00002
00007 class Payment extends oxUBase
00008 {
00013 protected $_oPaymentList = null;
00014
00019 protected $_iPaymentCnt = null;
00020
00025 protected $_aAllSets = null;
00026
00031 protected $_iAllSetsCnt = null;
00032
00037 protected $_oEmptyPayment = null;
00038
00043 protected $_sPaymentError = null;
00044
00049 protected $_sPaymentErrorText = null;
00050
00055 protected $_aDynValue = null;
00056
00061 protected $_sCheckedId = null;
00062
00067 protected $_sCheckedPaymentId = null;
00068
00073 protected $_aCreditYears = null;
00074
00079 protected $_sThisTemplate = 'page/checkout/payment.tpl';
00080
00085 protected $_blIsOrderStep = true;
00086
00091 protected $_aTsProducts = null;
00092
00098 public function init()
00099 {
00100 $this->_filterDynData();
00101 parent::init();
00102 }
00103
00115 public function render()
00116 {
00117 $myConfig = $this->getConfig();
00118
00119 if ($myConfig->getConfigParam( 'blPsBasketReservationEnabled' )) {
00120 $this->getSession()->getBasketReservations()->renewExpiration();
00121 }
00122
00123 parent::render();
00124
00125
00126
00127
00128
00129 $blAlreadyRedirected = oxConfig::getParameter( 'sslredirect' ) == 'forced';
00130
00131 if ( $myConfig->getCurrentShopURL() != $myConfig->getSSLShopURL() && !$blAlreadyRedirected && !oxConfig::getParameter('fnc') ) {
00132 $sPayError = oxConfig::getParameter( 'payerror' )?'payerror='.oxConfig::getParameter( 'payerror' ):'';
00133 $sPayErrorText = oxConfig::getParameter('payerrortext')?'payerrortext='.oxConfig::getParameter( 'payerrortext' ):'';
00134 $sRedirectURL = $myConfig->getShopSecureHomeURL().'sslredirect=forced&cl=payment&'.$sPayError."&".$sPayErrorText;
00135 oxUtils::getInstance()->redirect( $sRedirectURL, true, 302 );
00136 }
00137
00138 if ( $this->getIsOrderStep() ) {
00139
00140
00141
00142 $oBasket = $this->getSession()->getBasket();
00143 if ( $myConfig->getConfigParam( 'blPsBasketReservationEnabled' ) && (!$oBasket || ( $oBasket && !$oBasket->getProductsCount() )) ) {
00144 oxUtils::getInstance()->redirect( $myConfig->getShopHomeURL() .'cl=basket', true, 302 );
00145 }
00146
00147 $oUser = $this->getUser();
00148 if ( !$oBasket || !$oUser || ( $oBasket && !$oBasket->getProductsCount() ) ) {
00149 oxUtils::getInstance()->redirect( $myConfig->getShopHomeURL() .'cl=start', true, 302 );
00150 }
00151 }
00152
00153 if ( !$this->getAllSetsCnt() ) {
00154
00155 $this->_setDefaultEmptyPayment();
00156 oxSession::setVar( 'sShipSet', null );
00157 }
00158
00159 $this->_unsetPaymentErrors();
00160
00161 return $this->_sThisTemplate;
00162 }
00163
00171 protected function _setDefaultEmptyPayment()
00172 {
00173
00174 if ( $this->getConfig()->getConfigParam( 'blOtherCountryOrder' ) ) {
00175 $oPayment = oxNew( 'oxpayment' );
00176 if ( $oPayment->load( 'oxempty' ) ) {
00177 $this->_oEmptyPayment = $oPayment;
00178 } else {
00179
00180 $this->_sPaymentError = -2;
00181 }
00182 } else {
00183 $this->_sPaymentError = -2;
00184 }
00185 }
00186
00192 protected function _unsetPaymentErrors()
00193 {
00194 $iPayError = oxConfig::getParameter( 'payerror' );
00195 $sPayErrorText = oxConfig::getParameter( 'payerrortext' );
00196
00197 if (!($iPayError || $sPayErrorText)) {
00198 $iPayError = oxSession::getVar( 'payerror' );
00199 $sPayErrorText = oxSession::getVar( 'payerrortext' );
00200 }
00201
00202 if ( $iPayError ) {
00203 oxSession::deleteVar( 'payerror' );
00204 $this->_sPaymentError = $iPayError;
00205 }
00206 if ( $sPayErrorText ) {
00207 oxSession::deleteVar( 'payerrortext' );
00208 $this->_sPaymentErrorText = $sPayErrorText;
00209 }
00210 }
00211
00218 public function changeshipping()
00219 {
00220 $mySession = $this->getSession();
00221
00222 $oBasket = $mySession->getBasket();
00223 $oBasket->setShipping( null );
00224 $oBasket->onUpdate();
00225 oxSession::setVar( 'sShipSet', oxConfig::getParameter( 'sShipSet' ) );
00226 }
00227
00239 public function validatePayment()
00240 {
00241 $myConfig = $this->getConfig();
00242 $mySession = $this->getSession();
00243
00244
00245
00246 $oUser = $this->getUser();
00247 if ( !$oUser ) {
00248 oxSession::setVar( 'payerror', 2 );
00249 return;
00250 }
00251
00252 if (! ($sShipSetId = oxConfig::getParameter( 'sShipSet' ))) {
00253 $sShipSetId = oxSession::getVar('sShipSet');
00254 }
00255 if (! ($sPaymentId = oxConfig::getParameter( 'paymentid' ))) {
00256 $sPaymentId = oxSession::getVar('paymentid');
00257 }
00258 if (! ($aDynvalue = oxConfig::getParameter( 'dynvalue' ))) {
00259 $aDynvalue = oxSession::getVar('dynvalue');
00260 }
00261
00262
00263 if ( !$myConfig->getConfigParam( 'blOtherCountryOrder' ) && $sPaymentId == 'oxempty' ) {
00264 $sPaymentId = '';
00265 }
00266
00267
00268 if ( !$sPaymentId ) {
00269 oxSession::setVar( 'payerror', 1 );
00270 return;
00271 }
00272
00273 $oBasket = $mySession->getBasket();
00274 $oBasket->setPayment(null);
00275 $oPayment = oxNew( 'oxpayment' );
00276 $oPayment->load( $sPaymentId );
00277
00278
00279 $dBasketPrice = $oBasket->getPriceForPayment();
00280
00281 $blOK = $oPayment->isValidPayment( $aDynvalue, $myConfig->getShopId(), $oUser, $dBasketPrice, $sShipSetId );
00282
00283 if ( $blOK ) {
00284 oxSession::setVar( 'paymentid', $sPaymentId );
00285 oxSession::setVar( 'dynvalue', $aDynvalue );
00286 if ( oxConfig::getParameter( 'bltsprotection' ) ) {
00287 $sTsProductId = oxConfig::getParameter( 'stsprotection' );
00288 $oBasket->setTsProductId($sTsProductId);
00289 oxSession::setVar( 'stsprotection', $sTsProductId );
00290 } else {
00291 oxSession::deleteVar( 'stsprotection' );
00292 $oBasket->setTsProductId(null);
00293 }
00294 $oBasket->setShipping($sShipSetId);
00295 oxSession::deleteVar( '_selected_paymentid' );
00296 return 'order';
00297 } else {
00298 oxSession::setVar( 'payerror', $oPayment->getPaymentErrorNumber() );
00299
00300
00301 oxSession::deleteVar( 'paymentid' );
00302 oxSession::setVar( '_selected_paymentid', $sPaymentId );
00303 oxSession::deleteVar( 'stsprotection' );
00304 $oBasket->setTsProductId(null);
00305 return;
00306 }
00307 }
00308
00314 public function getPaymentList()
00315 {
00316 if ( $this->_oPaymentList === null ) {
00317 $this->_oPaymentList = false;
00318
00319 $sActShipSet = oxConfig::getParameter( 'sShipSet' );
00320 if ( !$sActShipSet ) {
00321 $sActShipSet = oxSession::getVar( 'sShipSet' );
00322 }
00323
00324 $oBasket = $this->getSession()->getBasket();
00325
00326
00327 list( $aAllSets, $sActShipSet, $aPaymentList ) = oxDeliverySetList::getInstance()->getDeliverySetData( $sActShipSet, $this->getUser(), $oBasket );
00328
00329 $oBasket->setShipping( $sActShipSet );
00330
00331
00332 $this->_setDeprecatedValues( $aPaymentList, $oBasket );
00333 $this->_oPaymentList = $aPaymentList;
00334 $this->_aAllSets = $aAllSets;
00335
00336 }
00337 return $this->_oPaymentList;
00338 }
00339
00345 public function getAllSets()
00346 {
00347 if ( $this->_aAllSets === null ) {
00348 $this->_aAllSets = false;
00349
00350 if ($this->getPaymentList()) {
00351 return $this->_aAllSets;
00352 }
00353 }
00354 return $this->_aAllSets;
00355 }
00356
00362 public function getAllSetsCnt()
00363 {
00364 if ( $this->_iAllSetsCnt === null ) {
00365 $this->_iAllSetsCnt = 0;
00366
00367 if ($this->getPaymentList()) {
00368 $this->_iAllSetsCnt = count($this->_aAllSets);
00369 }
00370 }
00371 return $this->_iAllSetsCnt;
00372 }
00373
00382 protected function _setDeprecatedValues( & $aPaymentList, $oBasket = null )
00383 {
00384 if ( is_array($aPaymentList) ) {
00385 $oLang = oxLang::getInstance();
00386 foreach ( $aPaymentList as $oPayment ) {
00387 $oPrice = $oPayment->getPaymentPrice( $oBasket );
00388 $oPayment->dAddPaymentSum = $oPrice->getBruttoPrice();
00389 $oPayment->fAddPaymentSum = $oLang->formatCurrency( $oPayment->dAddPaymentSum, $oBasket->getBasketCurrency() );
00390 $oPayment->aDynValues = $oPayment->getDynValues();
00391 if ( $oPayment->oxpayments__oxchecked->value ) {
00392 $this->_sCheckedId = $oPayment->getId();
00393 }
00394 }
00395 }
00396 }
00397
00403 public function getEmptyPayment()
00404 {
00405 return $this->_oEmptyPayment;
00406 }
00407
00413 public function getPaymentError()
00414 {
00415 return $this->_sPaymentError;
00416 }
00417
00423 public function getPaymentErrorText()
00424 {
00425 return $this->_sPaymentErrorText;
00426 }
00427
00433 public function getDynValue()
00434 {
00435 if ( $this->_aDynValue === null ) {
00436 $this->_aDynValue = false;
00437
00438
00439 if ( ( $aDynValue = oxSession::getVar( 'dynvalue' ) ) ) {
00440 $this->_aDynValue = $aDynValue;
00441 } else {
00442 $this->_aDynValue = oxConfig::getParameter( "dynvalue");
00443 }
00444
00445
00446
00447 $aPaymentList = $this->getPaymentList();
00448 if ( isset( $aPaymentList['oxiddebitnote'] ) ) {
00449 $this->_assignDebitNoteParams();
00450 }
00451 }
00452 return $this->_aDynValue;
00453 }
00454
00461 protected function _assignDebitNoteParams()
00462 {
00463
00464 $oUserPayment = oxNew( 'oxuserpayment');
00465
00466 if ( $oUserPayment->getPaymentByPaymentType( $this->getUser(), 'oxiddebitnote' ) ) {
00467 $aAddPaymentData = oxUtils::getInstance()->assignValuesFromText( $oUserPayment->oxuserpayments__oxvalue->value );
00468
00469
00470 foreach ( $aAddPaymentData as $oData ) {
00471 if ( !isset( $this->_aDynValue[$oData->name] ) ||
00472 ( isset( $this->_aDynValue[$oData->name] ) && !$this->_aDynValue[$oData->name] ) ) {
00473 $this->_aDynValue[$oData->name] = $oData->value;
00474 }
00475 }
00476 }
00477 }
00478
00485 public function getCheckedPaymentId()
00486 {
00487 if ( $this->_sCheckedPaymentId === null ) {
00488 if (! ($sPaymentID = oxConfig::getParameter( 'paymentid' ))) {
00489 $sPaymentID = oxSession::getVar('paymentid');
00490 }
00491 if ( $sPaymentID ) {
00492 $sCheckedId = $sPaymentID;
00493 } elseif ( ( $sSelectedPaymentID = oxSession::getVar( '_selected_paymentid' ) ) ) {
00494 $sCheckedId = $sSelectedPaymentID;
00495 } else {
00496
00497 if ( $oUser = $this->getUser()) {
00498 $oOrder = oxNew('oxorder');
00499 if ( ( $sLastPaymentId = $oOrder->getLastUserPaymentType( $oUser->getId()) ) ) {
00500 $sCheckedId = $sLastPaymentId;
00501 }
00502 }
00503 }
00504
00505
00506 if ( !$sCheckedId && $this->_sCheckedId ) {
00507 $sCheckedId = $this->_sCheckedId;
00508 }
00509
00510
00511 $oPaymentList = $this->getPaymentList();
00512 if ( isset( $oPaymentList ) && $oPaymentList && !isset( $oPaymentList[$sCheckedId] ) ) {
00513 end($oPaymentList);
00514 $sCheckedId = key( $oPaymentList );
00515 }
00516 $this->_sCheckedPaymentId = $sCheckedId;
00517 }
00518
00519 return $this->_sCheckedPaymentId;
00520 }
00521
00527 public function getPaymentCnt()
00528 {
00529 if ( $this->_iPaymentCnt === null ) {
00530 $this->_iPaymentCnt = false;
00531
00532 if ($oPaymentList = $this->getPaymentList()) {
00533 $this->_iPaymentCnt = count($oPaymentList);
00534 }
00535 }
00536 return $this->_iPaymentCnt;
00537 }
00538
00544 public function getCreditYears()
00545 {
00546 if ( $this->_aCreditYears === null ) {
00547 $this->_aCreditYears = false;
00548
00549 $this->_aCreditYears = range( date('Y'), date('Y') + 10 );
00550 }
00551 return $this->_aCreditYears;
00552 }
00553
00564 protected function _filterDynData()
00565 {
00566
00567 if (oxConfig::getInstance()->getConfigParam("blStoreCreditCardInfo"))
00568
00569 return;
00570
00571 $aDynData = $this->getSession()->getVar("dynvalue");
00572
00573 if ($aDynData) {
00574 $aDynData["kktype"] = null;
00575 $aDynData["kknumber"] = null;
00576 $aDynData["kkname"] = null;
00577 $aDynData["kkmonth"] = null;
00578 $aDynData["kkyear"] = null;
00579 $aDynData["kkpruef"] = null;
00580 oxSession::setVar("dynvalue", $aDynData);
00581 }
00582
00583
00584 unset($_REQUEST["dynvalue"]["kktype"]);
00585 unset($_REQUEST["dynvalue"]["kknumber"]);
00586 unset($_REQUEST["dynvalue"]["kkname"]);
00587 unset($_REQUEST["dynvalue"]["kkmonth"]);
00588 unset($_REQUEST["dynvalue"]["kkyear"]);
00589 unset($_REQUEST["dynvalue"]["kkpruef"]);
00590
00591 unset($_POST["dynvalue"]["kktype"]);
00592 unset($_POST["dynvalue"]["kknumber"]);
00593 unset($_POST["dynvalue"]["kkname"]);
00594 unset($_POST["dynvalue"]["kkmonth"]);
00595 unset($_POST["dynvalue"]["kkyear"]);
00596 unset($_POST["dynvalue"]["kkpruef"]);
00597
00598 unset($_GET["dynvalue"]["kktype"]);
00599 unset($_GET["dynvalue"]["kknumber"]);
00600 unset($_GET["dynvalue"]["kkname"]);
00601 unset($_GET["dynvalue"]["kkmonth"]);
00602 unset($_GET["dynvalue"]["kkyear"]);
00603 unset($_GET["dynvalue"]["kkpruef"]);
00604
00605 }
00606
00612 public function getTsProtections()
00613 {
00614 if ( $this->_aTsProducts === null ) {
00615 $oBasket = $this->getSession()->getBasket();
00616 if ( $dPrice = $oBasket->getPrice()->getBruttoPrice() ) {
00617 $oTsProtection = oxNew('oxtsprotection');
00618 $this->_aTsProducts = $oTsProtection->getTsProducts($dPrice);
00619 }
00620 }
00621 return $this->_aTsProducts;
00622 }
00623
00629 public function getCheckedTsProductId()
00630 {
00631 if ( $this->_sCheckedProductId === null ) {
00632 $this->_sCheckedProductId = false;
00633 if ( $sId = oxConfig::getParameter( 'stsprotection' ) ) {
00634 $this->_sCheckedProductId = $sId;
00635 }
00636 }
00637 return $this->_sCheckedProductId;
00638 }
00639
00645 public function getBreadCrumb()
00646 {
00647 $aPaths = array();
00648 $aPath = array();
00649
00650
00651 $aPath['title'] = oxLang::getInstance()->translateString( 'PAGE_CHECKOUT_PAY', oxLang::getInstance()->getBaseLanguage(), false );
00652 $aPath['link'] = $this->getLink();
00653
00654 $aPaths[] = $aPath;
00655
00656 return $aPaths;
00657 }
00658
00659 }