00001 <?php
00002
00006 class oxtsprotection extends oxSuperCfg
00007 {
00013 protected $_aProducts = null;
00014
00020 protected $_aProductIds = null;
00021
00027 protected $_aProductNettPrices = null;
00028
00034 protected $_aProductAmounts = null;
00035
00041 protected $_sTsProtectProducts = array( "TS080501_500_30_EUR" => array( "netto" => "0.82", "amount" => "500" ),
00042 "TS080501_1500_30_EUR" => array( "netto" => "2.47", "amount" => "1500" ),
00043 "TS080501_2500_30_EUR" => array( "netto" => "4.12", "amount" => "2500" ),
00044 "TS080501_5000_30_EUR" => array( "netto" => "8.24", "amount" => "5000" ),
00045 "TS080501_10000_30_EUR" => array( "netto" => "16.47", "amount" => "10000" ),
00046 "TS080501_20000_30_EUR" => array( "netto" => "32.94", "amount" => "20000" )
00047 );
00048
00054 protected $_sTsCurrencyProducts = array( "TS080501_500_30_EUR" => array( "GBP" => "TS100629_500_30_GBP", "CHF" => "TS100629_1500_30_GBP", "USD" => "TS080501_500_30_USD" ),
00055 "TS080501_1500_30_EUR" => array( "GBP" => "TS100629_1500_30_GBP", "CHF" => "TS100629_1500_30_CHF", "USD" => "TS100629_1500_30_USD" ),
00056 "TS080501_2500_30_EUR" => array( "GBP" => "TS100629_2500_30_GBP", "CHF" => "TS100629_2500_30_CHF", "USD" => "TS100629_2500_30_USD" ),
00057 "TS080501_5000_30_EUR" => array( "GBP" => "TS100629_5000_30_GBP", "CHF" => "TS100629_5000_30_CHF", "USD" => "TS100629_5000_30_USD" ),
00058 "TS080501_10000_30_EUR" => array( "GBP" => "TS100629_1000_30_GBP", "CHF" => "TS100629_10000_30_CHF", "USD" => "TS100629_10000_30_USD" ),
00059 "TS080501_20000_30_EUR" => array( "GBP" => "TS100629_2000_30_GBP", "CHF" => "TS100629_20000_30_CHF", "USD" => "TS100629_20000_30_USD" )
00060 );
00061
00067 public function __construct()
00068 {
00069 $this->_aProductIds = $this->_getTsProductIds();
00070 $this->_aProductNettPrices = $this->_getProductNettPrices();
00071 $this->_aProductAmounts = $this->_getProductAmounts();
00072 }
00073
00081 public function getTsProducts( $dPrice )
00082 {
00083 $oProduct = $this->getProduct( 0 );
00084 $aTsProducts = array($oProduct);
00085 for ($i=0; $i<count($this->_aProductIds); $i++ ) {
00086 if ( $this->_aProductAmounts[$i] < $dPrice ) {
00087 $oProduct = $this->getProduct( $i+1 );
00088 $aTsProducts[] = $oProduct;
00089 } else {
00090 $i = count($this->_aProductIds);
00091 }
00092 }
00093 return $aTsProducts;
00094 }
00095
00103 public function getTsProduct( $sTsId )
00104 {
00105 $sKey = array_search( $sTsId, $this->_aProductIds );
00106 $oProduct = $this->getProduct( $sKey );
00107 return $oProduct;
00108 }
00109
00117 public function getProduct( $sKey )
00118 {
00119 $oConfig = $this->getConfig();
00120 $dVat = $oConfig->getConfigParam( 'dDefaultVAT' );
00121 $dPrice = oxPrice::netto2Brutto($this->_aProductNettPrices[$sKey], $dVat);
00122 $oProduct = new oxStdClass();
00123 $oProduct->oPrice = oxNew( 'oxPrice' );
00124 $oProduct->oPrice->setPrice( $dPrice );
00125 if ( $oConfig->getConfigParam( 'blCalcVATForPayCharge' ) ) {
00126 $oProduct->oPrice->setVat( $dVat );
00127 }
00128 $oProduct->sTsId = $this->_aProductIds[$sKey];
00129 $oProduct->iAmount = $this->_aProductAmounts[$sKey];
00130 $oProduct->fPrice = $oProduct->oPrice->getBruttoPrice();
00131 return $oProduct;
00132 }
00133
00142 public function requestForTsProtection( $aValues, $sPaymentId )
00143 {
00144 $oConfig = $this->getConfig();
00145 $iLangId = (int) oxLang::getInstance()->getBaseLanguage();
00146 $blTsTestMode = $oConfig->getConfigParam( 'tsTestMode' );
00147 $aTsUser = $oConfig->getConfigParam( 'aTsUser' );
00148 $aTsPassword = $oConfig->getConfigParam( 'aTsPassword' );
00149 $aTrustedShopIds = $oConfig->getConfigParam( 'iShopID_TrustedShops' );
00150 if ( $aTrustedShopIds && $aTrustedShopIds[$iLangId] ) {
00151 try {
00152 if ( $blTsTestMode ) {
00153 $sSoapUrl = $oConfig->getConfigParam( 'sTsTestProtectionUrl' );
00154 } else {
00155 $sSoapUrl = $oConfig->getConfigParam( 'sTsProtectionUrl' );
00156 }
00157 $sFunction = 'requestForProtectionV2';
00158 $sVersion = $this->getConfig()->getVersion();
00159 $sEdition = $this->getConfig()->getFullEdition();
00160 $sTsPaymentId = $this->_getTsPaymentId($sPaymentId);
00161 $tsProductId = $this->_getTsProductCurrId($aValues['tsProductId'], $aValues['currency']);
00162 $aValues['tsId'] = $aTrustedShopIds[$iLangId];
00163 $aValues['paymentType'] = $sTsPaymentId;
00164 $aValues['shopSystemVersion'] = $sEdition . " " . $sVersion;
00165 $aValues['wsUser'] = $aTsUser[$iLangId];
00166 $aValues['wsPassword'] = $aTsPassword[$iLangId];
00167 $aValues['orderDate'] = str_replace(" ", "T", $aValues['orderDate']);
00168 $oSoap = new SoapClient($sSoapUrl);
00169 $aResults = $oSoap->{$sFunction}($aValues['tsId'],$tsProductId,$aValues['amount'],$aValues['currency'],$aValues['paymentType'],
00170 $aValues['buyerEmail'],$aValues['shopCustomerID'],$aValues['shopOrderID'],$aValues['orderDate'],$aValues['shopSystemVersion'],
00171 $aValues['wsUser'],$aValues['wsPassword']);
00172
00173 if ( isset($aResults) && "" != $aResults ) {
00174 if ( $aResults == "-10001" ) {
00175 oxUtils::getInstance()->logger( "NO_VALID_SHOP" );
00176 return false;
00177 }
00178 if ( $aResults == "-11111" ) {
00179 oxUtils::getInstance()->logger( "SYSTEM_ERROR" );
00180 return false;
00181 }
00182 return $aResults;
00183 }
00184 } catch( Exception $eException ) {
00185 oxUtils::getInstance()->logger( "Soap-Error: " . $eException->faultstring );
00186 return false;
00187 }
00188 }
00189 return null;
00190
00191 }
00192
00201 public function checkCertificate( $iTrustedShopId, $blTsTestMode )
00202 {
00203 if ( $iTrustedShopId ) {
00204 try {
00205 if ( $blTsTestMode ) {
00206 $sSoapUrl = 'https://qa.trustedshops.de/ts/services/TsProtection?wsdl';
00207 } else {
00208 $sSoapUrl = 'https://www.trustedshops.de/ts/services/TsProtection?wsdl';
00209 }
00210 $sFunction = 'checkCertificate';
00211 $aValues['tsId'] = $iTrustedShopId;
00212 $oSoap = new SoapClient($sSoapUrl);
00213 $aResults = $oSoap->{$sFunction}($aValues['tsId']);
00214 if ( isset($aResults) ) {
00215 return $aResults;
00216 }
00217 } catch( Exception $eException ) {
00218 oxUtils::getInstance()->logger( "Soap-Error: " . $eException->faultstring );
00219 return false;
00220 }
00221 }
00222 return null;
00223
00224 }
00225
00233 protected function _getTsPaymentId( $sPaymentId )
00234 {
00235 $aPayment = oxNew("oxpayment");
00236 if ( $aPayment->load($sPaymentId) ) {
00237 $sTsPaymentId = $aPayment->oxpayments__oxtspaymentid->value;
00238 }
00239 return $sTsPaymentId;
00240 }
00241
00247 protected function _getTsProductIds()
00248 {
00249 if ($this->_aProductIds == null) {
00250 $this->_aProductIds = false;
00251 if ( $aTsProducts = $this->_getTsProducts()) {
00252 $this->_aProductIds = array_keys($aTsProducts);
00253 }
00254 }
00255 return $this->_aProductIds;
00256 }
00257
00263 protected function _getProductNettPrices()
00264 {
00265 if ($this->_aProductNettPrices == null) {
00266 $this->_aProductNettPrices = false;
00267 if ( $aTsProducts = $this->_getTsProducts()) {
00268 $this->_aProductNettPrices = array();
00269 foreach ( $aTsProducts as $aTsProduct ) {
00270 $this->_aProductNettPrices[] = $aTsProduct['netto'];
00271 }
00272 }
00273 }
00274 return $this->_aProductNettPrices;
00275 }
00276
00282 protected function _getProductAmounts()
00283 {
00284 if ($this->_aProductAmounts == null) {
00285 $this->_aProductAmounts = false;
00286 if ( $aTsProducts = $this->_getTsProducts()) {
00287 $this->_aProductAmounts = array();
00288 foreach ( $aTsProducts as $aTsProduct ) {
00289 $this->_aProductAmounts[] = $aTsProduct['amount'];
00290 }
00291 }
00292 }
00293 return $this->_aProductAmounts;
00294 }
00295
00301 protected function _getTsProducts()
00302 {
00303 if ($this->_aProducts == null) {
00304 $this->_aProducts = false;
00305 if ( $aTsProducts = $this->_sTsProtectProducts) {
00306 $this->_aProducts = $aTsProducts;
00307 }
00308 }
00309 return $this->_aProducts;
00310 }
00311
00320 protected function _getTsProductCurrId( $sTsId, $sCurr )
00321 {
00322 $sTsCurrId = $sTsId;
00323 if ($sCurr != 'EUR') {
00324 $aTsCurrId = $this->_sTsCurrencyProducts[$sTsId];
00325 $sTsCurrId = $aTsCurrId[$sCurr];
00326 }
00327 return $sTsCurrId;
00328 }
00329
00330 }