gpt4 book ai didi

php - 在 php 中发送 SOAP 身份验证 header 的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:48 24 4
gpt4 key购买 nike

我对 SOAP 很陌生(即不知道!)

客户要求我与现有的 SOAP 服务进行交互,该服务需要通过我的 SOAP header (简单的用户名和密码)完成身份验证

我有3种方法可以使用,

还活着活着安全更改用户详细信息

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>

我的问题是如何在 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);

上面的输出如下:

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

如有任何帮助,我们将不胜感激。我不能失败!

谢谢

KV

最佳答案

好吧,如果我们能看到服务的 WSDL,那就容易多了。但请尝试以下步骤:

1.检查 isAliveSecure 方法的 WSDL,看看您是否必须向它传递一些东西。

2.查看您发送的请求的真实情况:

var_dump($soapClient->__getLastRequest());
var_dump($soapClient->__getLastRequestHeaders());

(确保为这些方法使用选项 'trace' => TRUE 实例化 $soapClient,否则它们将不起作用 -> 请参阅 PHP manual ).

3.尝试通过命令行以您确定应该正确的形式手动发送请求,例如:

curl -v -k -d @/path/to/the/file/with/the/request/xml http://service_url

关于php - 在 php 中发送 SOAP 身份验证 header 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4313390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com