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