如何在 php Zend 中向 soap 请求添加安全标头


How to add security headers to soap request in php Zend

我正在使用WS安全性调用基于JAVA的soap服务。 但是每当我尝试调用这些服务时,它们都会给出具有无效安全标头的错误。任何人都可以告诉我如何使用 php zend 框架构建安全标头并构建 Soap 请求。

如果您可以发布到目前为止拥有的代码以尝试为您进行故障排除,那将很有帮助。 否则,下面是一个没有任何代码的示例。

我们也使用 Zend 框架,并且需要将安全标头传递给 HTTPS 服务。Zend Framework SOAP 安全标头在 IMO 中相当欠发达,我们发现基本的 PHP CURL 工作得更好,也很容易实现。

在授权:基本(如下(中,您会注意到base64_encode...这是我们传递用户ID:密码的地方。

function makeRequest($requestData){     
        $str = "site_id=62621&service_name=TestService&fx_request=" . $reqeustData;
        $strLength = strlen($str);
        $headers = array(
                "Authorization: Basic " . base64_encode("12321:123456123456321654"),
                "Content-Type: application/x-www-form-urlencoded", 
                "Content-Length: $strLength",
            ); 
        $url = 'https://siteName.Here.com/WebServices/AccountingService';
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 80);
        curl_setopt($ch, CURLOPT_TIMEOUT, 80);
        $response = curl_exec($ch);
        if (curl_errno($ch)) { 
            return "Error: " . curl_error($ch);
        } else {
            curl_close($ch);  
            return $response; 
        }
    }

希望这有帮助。


-

-编辑到以前的答案,WSDL与WSSE安全性的RE评论--

对于WSSE安全性,有这个Zend Framework类

class Zend_Service_DeveloperGarden_Client_Soap extends Zend_Soap_Client

哪个有这个功能,我相信这就是你要找的

addWsseSecurityTokenHeader

有关详细说明,请参阅此链接Zend Framework 网站上的类描述

请参阅此链接以查看实际的代码文件Zend 框架网站上的代码文件