PHP WebService客户端验证
博客专区 > skq 的博客 > 博客详情
PHP WebService客户端验证
skq 发表于3年前
PHP WebService客户端验证
  • 发表于 3年前
  • 阅读 877
  • 收藏 4
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: PHP WebService客户端验证,在网上查了好多,都没发现好的方法,终于在手册上看到一个示例,非常不错!先记录下来

Here's my solution to make SOAP-headers based authentication.

1). First of all we define the decorator class for our service class:

<?php

class SOAP_Service_Secure
{
    protected $class_name    = '';
    protected $authenticated = false;

    // -----

    public function __construct($class_name)
    {
        $this->class_name = $class_name;

    }

    public function AuthHeader($Header)
    {
        if($Header->username == 'foo' && $Header->password == 'bar')
            $this->authenticated = true;

    }

    public function __call($method_name, $arguments)
    {
        if(!method_exists($this->class_name, $method_name))
            throw new Exception('method not found');

        $this->checkAuth();

        return call_user_func_array(array($this->class_name, $method_name), $arguments);

    }

    // -----

    protected function checkAuth()
    {
        if(!$this->authenticated)
            HTML_Output::error(403);

    }

}
?>

 

2). Then we pass an instance of it to the SoapServer object.

<?php

    $Service = new SOAP_Service_Secure('My_Service');

    $Server = new SoapServer('my-service.wsdl');

    $Server->setObject($Service);

    $Server->handle();

?>

 

 

3). Implementing a client:

<?php

    $Client = new SoapClient('http://example.com/my-service.wsdl', array(
        'exceptions' => true
    ));
    
    // -----
    
    $AuthHeader = (object) array('username' => 'foo', 'password' => 'bar');
    
    $Headers[] = new SoapHeader('http://example.com', 'AuthHeader', $AuthHeader);
    
    $Client->__setSoapHeaders($Headers);
    
    // -----
    
    $Result = $Client->someMethod();

?>

 

非常不错!不过看的不是太明白,SOAP_Service_Secure->__call,好像跟 SosapClient->__call,有着关系?望高手指点

应该是在 SOAP_Service_Secure 中找不到 someMethod 方法时,就会调用 __call 方法.

共有 人打赏支持
粉丝 10
博文 70
码字总数 11816
×
skq
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: