重新封装zend_soap实现http连接安全认证的php代码

复制代码 代码如下:

  <?php

  class MyFramework_Soap_server extends Zend_Soap_Server {

  protected $_login = '';

  protected $_password = '';

  public function __construct($wsdl = null, array $options = null) {

  parent::__construct($wsdl,$options);

  if(isset($options['login'])){

  $this->_login=$options['login'];

  $this->_password=$options['password'];

  $this->_authenticate();

  }

  }

  private function _authenticate(){

  $this->setAuthenticate($this->_login,$this->_password);

  }

  public function setHttpLogin($login){

  $this->_login=$login;

  }

  public function setHttpPassword($password){

  $this->_password=$password;

  if(isset($this->_login)){

  $this->_authenticate();

  }

  }

  public function setAuthenticate($login,$password){

  if ($_SERVER['PHP_AUTH_USER']!=$login || $_SERVER['PHP_AUTH_PW']!=$password) {

  header('WWW-Authenticate: Basic realm="MyFramework Realm"');

  header('HTTP/1.0 401 Unauthorized');

  echo "You must enter a valid login ID and password to access this resource.\n";

  exit;

  }

  }

  }

  ?>

  

复制代码 代码如下:

  <?php

  class Soap_server_test {

  public $view = '';

  public $params = '';

  public $requestObj = '';

  public $dbObj = '';

  function __construct() {

  $this->view = $GLOBALS['view'];

  $this->params = $GLOBALS['params'];

  $this->requestObj = $GLOBALS['requestObj'];

  $this->dbObj = $GLOBALS['dbObj'];

  }

  function indexAction(){

  if(isset($_GET['wsdl'])) {

  $autodiscover = new MyFramework_Soap_AutoDiscover();

  $autodiscover->setClass('Model_Service_SoapClassSetTest');

  $autodiscover->handle();

  exit;

  } else {

  //$options= array('encoding' => 'UTF-8','login'=>'tangjian','password'=>'123456');

  $options= array('encoding' => 'UTF-8');

  $soap = new MyFramework_Soap_Server("http://tj.MyFramework.com/default/soap_server_test/index?wsdl",$options);

  $soap->setHttpLogin('tangjian');

  $soap->setHttpPassword('123456');

  $soap->setClass('Model_Service_SoapClassSetTest');

  $soap->handle();

  exit;

  }

  }

  function clientAction() {

  //$options= array('encoding' => 'UTF-8','login'=>'tangjian','password'=>'123456',

  // 'compression' =>SOAP_COMPRESSION_GZIP);

  $options= array('encoding' => 'UTF-8',

  'compression' =>SOAP_COMPRESSION_GZIP);

  $client = new MyFramework_Soap_Client('http://tj.MyFramework.com/default/soap_server_test/index?wsdl',$options);

  $client->setHttpLogin('tangjian');

  $client->setHttpPassword('123456');

  $result=$client->getPass('tang',"man");

  print_r($result);

  }

  }

  ?>