Kev*_*haw 5 php authentication soap
我对SOAP很新(即没有线索!)
客户端要求我与现有的SOAP服务进行交互,该服务需要通过我的SOAP头进行身份验证(一个简单的用户名和密码)
我可以使用3种方法,
IsAlive IsAliveSecure ChangeUserDetails
IsAlive只返回true,我可以称之为没问题
IsAliveSecure通过适当的授权返回true,我无法让它返回true.
基本上我需要发送以下请求:
POST /ripplecomprovisioning.asmx HTTP/1.1
Host: provisioning.example.ie
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.blueface.ie/provisioning/IsAliveSecure"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<SoapAuthHeader xmlns="http://www.example.ie/provisioning/">
<Username>myusername</Username>
<Password>mypassword</Password>
</SoapAuthHeader>
</soap:Header>
<soap:Body>
<IsAliveSecure xmlns="http://www.example.ie/provisioning/" />
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在php中发送如上所述格式的请求?
这是我尝试但没有成功的:
$ soapClient = new SoapClient("https://provisioning.example.ie/ripplecomprovisioning.asmx?WSDL");
// Prepare SoapHeader parameters
$sh_param = array(
'Username' => 'myusername',
'Password' => 'mypassword');
$headers = new SoapHeader('ripplecomprovisioning', 'SoapAuthHeaders', $sh_param);
// Prepare Soap Client
$soapClient->__setSoapHeaders(array($headers));
$result = $soapClient->isAlive();
echo var_dump($result);
echo "<br /><br />";
$result = $soapClient->IsAliveSecure();
echo var_dump($result);
Run Code Online (Sandbox Code Playgroud)
以上输出如下:
object(stdClass)#3 (1) {
["IsAliveResult"]=>
bool(true)
}
<br /><br />
Fatal error: Uncaught SoapFault exception: [soap:Server] System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.
at example.VoIP.Provisioning.RipplecomProvisioningServices.IsAliveSecure()
--- End of inner exception stack trace --- in /var/www/ripplecomweb/authentication/soap.php:20
Stack trace:
#0 [internal function]: SoapClient->__call('IsAliveSecure', Array)
#1 /var/www/ripplecomweb/authentication/soap.php(20): SoapClient->IsAliveSecure()
#2 {main}
thrown in /var/www/ripplecomweb/authentication/soap.php on line 20
Run Code Online (Sandbox Code Playgroud)
任何有关这方面的帮助将不胜感激.我不能失败!
谢谢
千电子伏
如果我们能够看到服务的 WSDL,那就容易多了。但请尝试以下步骤:
1.检查 isAliveSecure 方法的 WSDL,看看是否必须向其传递某些内容。
2.查看您发送的请求的实际情况:
var_dump($soapClient->__getLastRequest());
var_dump($soapClient->__getLastRequestHeaders());
Run Code Online (Sandbox Code Playgroud)
(确保您使用这些方法的$soapClient选项进行实例化'trace' => TRUE,否则它们将无法工作 -> 请参阅PHP 手册)。
3.尝试通过命令行以您确定正确的形式手动发送请求,例如:
curl -v -k -d @/path/to/the/file/with/the/request/xml http://service_url
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4967 次 |
| 最近记录: |