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

时间:2012-05-09 10:16:47

标签: php zend-framework soap soap-client

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

1 个答案:

答案 0 :(得分:1)

如果您可以发布您已安装的代码,尝试为您排查问题会很有帮助。否则,这是一个没有任何代码的例子。

我们也使用Zend Framework,并且需要将安全头传递给HTTPS服务。 Zend Framework SOAP安全头文件正在开发中,我们发现基本的PHP CURL工作得更好,也很容易实现。

在Authorization:Basic(下面)中,您会注意到base64_encode ...这是我们传递userID:password的地方。

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

有关详细说明,请参阅此链接 Class Description on Zend Framework website

请看这个链接查看实际的代码文件 Code File on Zend Framework website