【发布时间】:2012-05-09 10:16:47
【问题描述】:
我正在使用 WS 安全性调用基于 JAVA 的肥皂服务。但是每当我尝试调用这些服务时,它们都会给出安全标头无效的错误。谁能告诉我如何使用 php zend 框架构建安全标头并构建 Soap 请求。
【问题讨论】:
标签: php zend-framework soap soap-client
我正在使用 WS 安全性调用基于 JAVA 的肥皂服务。但是每当我尝试调用这些服务时,它们都会给出安全标头无效的错误。谁能告诉我如何使用 php zend 框架构建安全标头并构建 Soap 请求。
【问题讨论】:
标签: php zend-framework soap soap-client
如果您可以发布到目前为止的代码以尝试为您排除故障,那将会很有帮助。否则,这是一个没有任何代码的示例。
我们也使用 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
详细说明请看此链接 Class Description on Zend Framework website
请查看此链接以查看实际的代码文件 Code File on Zend Framework website
【讨论】: