Overview

Packages

  • currencysymbol
  • MAbout
  • Mage
    • Admin
    • Adminhtml
    • AdminNotification
    • Api
    • Api2
    • Authorizenet
    • Backup
    • Bundle
    • Captcha
    • Catalog
    • CatalogIndex
    • CatalogInventory
    • CatalogRule
    • CatalogSearch
    • Centinel
    • Checkout
    • Cms
    • Compiler
    • Connect
    • Contacts
    • Core
    • Cron
    • CurrencySymbol
    • Customer
    • Dataflow
    • Directory
    • DirtectPost
    • Downloadable
    • Eav
    • GiftMessage
    • GoogleAnalytics
    • GoogleBase
    • GoogleCheckout
    • ImportExport
    • Index
    • Install
    • Log
    • Media
    • Newsletter
    • Oauth
    • Page
    • PageCache
    • Paygate
    • Payment
    • Paypal
    • PaypalUk
    • Persistent
    • Poll
    • ProductAlert
    • Rating
    • Reports
    • Review
    • Rss
    • Rule
    • Sales
    • SalesRule
    • Sedfriend
    • Sendfriend
    • Shipping
    • Sitemap
    • Tag
    • Tax
    • Usa
    • Weee
    • Widget
    • Wishlist
    • XmlConnect
  • None
  • Phoenix
    • Moneybookers
  • PHP
  • Zend
    • Date
    • Mime
    • XmlRpc

Classes

  • Mage_Api_Controller_Action
  • Mage_Api_Helper_Data
  • Mage_Api_IndexController
  • Mage_Api_Model_Acl
  • Mage_Api_Model_Acl_Assert_Ip
  • Mage_Api_Model_Acl_Assert_Time
  • Mage_Api_Model_Acl_Resource
  • Mage_Api_Model_Acl_Role
  • Mage_Api_Model_Acl_Role_Generic
  • Mage_Api_Model_Acl_Role_Group
  • Mage_Api_Model_Acl_Role_Registry
  • Mage_Api_Model_Acl_Role_User
  • Mage_Api_Model_Config
  • Mage_Api_Model_Mysql4_Acl
  • Mage_Api_Model_Mysql4_Acl_Role
  • Mage_Api_Model_Mysql4_Acl_Role_Collection
  • Mage_Api_Model_Mysql4_Permissions_Collection
  • Mage_Api_Model_Mysql4_Role
  • Mage_Api_Model_Mysql4_Role_Collection
  • Mage_Api_Model_Mysql4_Roles
  • Mage_Api_Model_Mysql4_Roles_Collection
  • Mage_Api_Model_Mysql4_Roles_User_Collection
  • Mage_Api_Model_Mysql4_Rules
  • Mage_Api_Model_Mysql4_Rules_Collection
  • Mage_Api_Model_Mysql4_User
  • Mage_Api_Model_Mysql4_User_Collection
  • Mage_Api_Model_Resource_Abstract
  • Mage_Api_Model_Resource_Acl
  • Mage_Api_Model_Resource_Acl_Role
  • Mage_Api_Model_Resource_Acl_Role_Collection
  • Mage_Api_Model_Resource_Permissions_Collection
  • Mage_Api_Model_Resource_Role
  • Mage_Api_Model_Resource_Role_Collection
  • Mage_Api_Model_Resource_Roles
  • Mage_Api_Model_Resource_Roles_Collection
  • Mage_Api_Model_Resource_Roles_User_Collection
  • Mage_Api_Model_Resource_Rules
  • Mage_Api_Model_Resource_Rules_Collection
  • Mage_Api_Model_Resource_User
  • Mage_Api_Model_Resource_User_Collection
  • Mage_Api_Model_Role
  • Mage_Api_Model_Roles
  • Mage_Api_Model_Rules
  • Mage_Api_Model_Server
  • Mage_Api_Model_Server_Adapter_Soap
  • Mage_Api_Model_Server_Adapter_Xmlrpc
  • Mage_Api_Model_Server_Handler
  • Mage_Api_Model_Server_Handler_Abstract
  • Mage_Api_Model_Server_V2_Adapter_Soap
  • Mage_Api_Model_Server_V2_Handler
  • Mage_Api_Model_Server_WSI_Adapter_Soap
  • Mage_Api_Model_Server_WSI_Handler
  • Mage_Api_Model_Session
  • Mage_Api_Model_User
  • Mage_Api_Model_Wsdl_Config
  • Mage_Api_Model_Wsdl_Config_Base
  • Mage_Api_SoapController
  • Mage_Api_V2_SoapController
  • Mage_Api_XmlrpcController

Interfaces

  • Mage_Api_Model_Server_Adapter_Interface

Exceptions

  • Mage_Api_Exception
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Magento
  4:  *
  5:  * NOTICE OF LICENSE
  6:  *
  7:  * This source file is subject to the Open Software License (OSL 3.0)
  8:  * that is bundled with this package in the file LICENSE.txt.
  9:  * It is also available through the world-wide-web at this URL:
 10:  * http://opensource.org/licenses/osl-3.0.php
 11:  * If you did not receive a copy of the license and are unable to
 12:  * obtain it through the world-wide-web, please send an email
 13:  * to license@magentocommerce.com so we can send you a copy immediately.
 14:  *
 15:  * DISCLAIMER
 16:  *
 17:  * Do not edit or add to this file if you wish to upgrade Magento to newer
 18:  * versions in the future. If you wish to customize Magento for your
 19:  * needs please refer to http://www.magentocommerce.com for more information.
 20:  *
 21:  * @category    Mage
 22:  * @package     Mage_Api
 23:  * @copyright   Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
 24:  * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 25:  */
 26: 
 27: /**
 28:  * Webservice soap adapter
 29:  *
 30:  * @category   Mage
 31:  * @package    Mage_Api
 32:  * @author     Magento Core Team <core@magentocommerce.com>
 33:  */
 34: class Mage_Api_Model_Server_Adapter_Soap
 35:     extends Varien_Object
 36:     implements Mage_Api_Model_Server_Adapter_Interface
 37: {
 38:     /**
 39:      * Soap server
 40:      *
 41:      * @var SoapServer
 42:      */
 43:     protected $_soap = null;
 44: 
 45:     /**
 46:      * Set handler class name for webservice
 47:      *
 48:      * @param string $handler
 49:      * @return Mage_Api_Model_Server_Adapter_Soap
 50:      */
 51:     public function setHandler($handler)
 52:     {
 53:         $this->setData('handler', $handler);
 54:         return $this;
 55:     }
 56: 
 57:     /**
 58:      * Retrive handler class name for webservice
 59:      *
 60:      * @return string
 61:      */
 62:     public function getHandler()
 63:     {
 64:         return $this->getData('handler');
 65:     }
 66: 
 67:     /**
 68:      * Set webservice api controller
 69:      *
 70:      * @param Mage_Api_Controller_Action $controller
 71:      * @return Mage_Api_Model_Server_Adapter_Soap
 72:      */
 73:     public function setController(Mage_Api_Controller_Action $controller)
 74:     {
 75:          $this->setData('controller', $controller);
 76:          return $this;
 77:     }
 78: 
 79:     /**
 80:      * Retrive webservice api controller. If no controller have been set - emulate it by the use of Varien_Object
 81:      *
 82:      * @return Mage_Api_Controller_Action|Varien_Object
 83:      */
 84:     public function getController()
 85:     {
 86:         $controller = $this->getData('controller');
 87: 
 88:         if (null === $controller) {
 89:             $controller = new Varien_Object(
 90:                 array('request' => Mage::app()->getRequest(), 'response' => Mage::app()->getResponse())
 91:             );
 92: 
 93:             $this->setData('controller', $controller);
 94:         }
 95:         return $controller;
 96:     }
 97: 
 98:     /**
 99:      * Run webservice
100:      *
101:      * @param Mage_Api_Controller_Action $controller
102:      * @return Mage_Api_Model_Server_Adapter_Soap
103:      */
104:     public function run()
105:     {
106:         $apiConfigCharset = Mage::getStoreConfig("api/config/charset");
107: 
108:         if ($this->getController()->getRequest()->getParam('wsdl') !== null) {
109:             // Generating wsdl content from template
110:             $io = new Varien_Io_File();
111:             $io->open(array('path'=>Mage::getModuleDir('etc', 'Mage_Api')));
112: 
113:             $wsdlContent = $io->read('wsdl.xml');
114: 
115:             $template = Mage::getModel('core/email_template_filter');
116: 
117:             $wsdlConfig = new Varien_Object();
118:             $queryParams = $this->getController()->getRequest()->getQuery();
119:             if (isset($queryParams['wsdl'])) {
120:                 unset($queryParams['wsdl']);
121:             }
122: 
123:             $wsdlConfig->setUrl(htmlspecialchars(Mage::getUrl('*/*/*', array('_query'=>$queryParams))));
124:             $wsdlConfig->setName('Magento');
125:             $wsdlConfig->setHandler($this->getHandler());
126: 
127:             $template->setVariables(array('wsdl' => $wsdlConfig));
128: 
129:             $this->getController()->getResponse()
130:                 ->clearHeaders()
131:                 ->setHeader('Content-Type','text/xml; charset='.$apiConfigCharset)
132:                 ->setBody(
133:                     preg_replace(
134:                         '/<\?xml version="([^\"]+)"([^\>]+)>/i',
135:                         '<?xml version="$1" encoding="'.$apiConfigCharset.'"?>',
136:                         $template->filter($wsdlContent)
137:                     )
138:                 );
139:         } else {
140:             try {
141:                 $this->_instantiateServer();
142: 
143:                 $this->getController()->getResponse()
144:                     ->clearHeaders()
145:                     ->setHeader('Content-Type','text/xml; charset='.$apiConfigCharset)
146:                     ->setBody(
147:                             preg_replace(
148:                                 '/<\?xml version="([^\"]+)"([^\>]+)>/i',
149:                                 '<?xml version="$1" encoding="'.$apiConfigCharset.'"?>',
150:                                 $this->_soap->handle()
151:                             )
152:                     );
153:             } catch( Zend_Soap_Server_Exception $e ) {
154:                 $this->fault( $e->getCode(), $e->getMessage() );
155:             } catch( Exception $e ) {
156:                 $this->fault( $e->getCode(), $e->getMessage() );
157:             }
158:         }
159: 
160:         return $this;
161:     }
162: 
163:     /**
164:      * Dispatch webservice fault
165:      *
166:      * @param int $code
167:      * @param string $message
168:      */
169:     public function fault($code, $message)
170:     {
171:         if ($this->_extensionLoaded()) {
172:             throw new SoapFault($code, $message);
173:         } else {
174:             die('<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
175:                 <SOAP-ENV:Body>
176:                 <SOAP-ENV:Fault>
177:                 <faultcode>' . $code . '</faultcode>
178:                 <faultstring>' . $message . '</faultstring>
179:                 </SOAP-ENV:Fault>
180:                 </SOAP-ENV:Body>
181:                 </SOAP-ENV:Envelope>');
182:         }
183: 
184:     }
185: 
186:     /**
187:      * Check whether Soap extension is loaded
188:      *
189:      * @return boolean
190:      */
191:     protected function _extensionLoaded()
192:     {
193:         return class_exists('SoapServer', false);
194:     }
195: 
196:     /**
197:      * Transform wsdl url if $_SERVER["PHP_AUTH_USER"] is set
198:      *
199:      * @param array
200:      * @return String
201:      */
202:     protected function getWsdlUrl($params = null, $withAuth = true)
203:     {
204:         $urlModel = Mage::getModel('core/url')
205:             ->setUseSession(false);
206: 
207:         $wsdlUrl = $params !== null
208:             ? $urlModel->getUrl('*/*/*', array('_current' => true, '_query' => $params))
209:             : $urlModel->getUrl('*/*/*');
210: 
211:         if( $withAuth ) {
212:             $phpAuthUser = $this->getController()->getRequest()->getServer('PHP_AUTH_USER', false);
213:             $phpAuthPw = $this->getController()->getRequest()->getServer('PHP_AUTH_PW', false);
214: 
215:             if ($phpAuthUser && $phpAuthPw) {
216:                 $wsdlUrl = sprintf("http://%s:%s@%s", $phpAuthUser, $phpAuthPw, str_replace('http://', '', $wsdlUrl ));
217:             }
218:         }
219: 
220:         return $wsdlUrl;
221:     }
222: 
223:     /**
224:      * Try to instantiate Zend_Soap_Server
225:      * If schema import error is caught, it will retry in 1 second.
226:      *
227:      * @throws Zend_Soap_Server_Exception
228:      */
229:     protected function _instantiateServer()
230:     {
231:         $apiConfigCharset = Mage::getStoreConfig('api/config/charset');
232:         $wsdlCacheEnabled = (bool) Mage::getStoreConfig('api/config/wsdl_cache_enabled');
233: 
234:         if ($wsdlCacheEnabled) {
235:             ini_set('soap.wsdl_cache_enabled', '1');
236:         } else {
237:             ini_set('soap.wsdl_cache_enabled', '0');
238:         }
239: 
240:         $tries = 0;
241:         do {
242:             $retry = false;
243:             try {
244:                 $this->_soap = new Zend_Soap_Server($this->getWsdlUrl(array("wsdl" => 1)),
245:                     array('encoding' => $apiConfigCharset));
246:             } catch (SoapFault $e) {
247:                 if (false !== strpos($e->getMessage(),
248:                     "can't import schema from 'http://schemas.xmlsoap.org/soap/encoding/'")
249:                 ) {
250:                     $retry = true;
251:                     sleep(1);
252:                 } else {
253:                     throw $e;
254:                 }
255:                 $tries++;
256:             }
257:         } while ($retry && $tries < 5);
258:         use_soap_error_handler(false);
259:         $this->_soap
260:             ->setReturnResponse(true)
261:             ->setClass($this->getHandler());
262:     }
263: }
264: 
Magento 1.7.0.2 API documentation generated by ApiGen 2.8.0