0

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

4

1 回答 1

1

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

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

在 Authorization: Basic (below) 中,您会注意到 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; 
        }
    }

希望这可以帮助。


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

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

class Zend_Service_DeveloperGarden_Client_Soap extends Zend_Soap_Client

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

addWsseSecurityTokenHeader

请参阅此链接以获取 Zend Framework 网站上的详细描述类描述

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

于 2012-05-11T21:51:28.823 回答