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