通过PHP调用WCF SOAP web服务时出错
我有一个托管在IIS上的WCF web服务。可以通过.net毫无问题地调用它。但是当我试图通过PHP调用它时,我得到了这个错误 对象(SoapFault)#5“无法处理消息,因为内容类型“application/soap+xml;charset=utf-8;action=“web服务URL””不是预期的类型“text/xml;charset=utf-8” 这是我的密码通过PHP调用WCF SOAP web服务时出错,php,wcf,soap,Php,Wcf,Soap,我有一个托管在IIS上的WCF web服务。可以通过.net毫无问题地调用它。但是当我试图通过PHP调用它时,我得到了这个错误 对象(SoapFault)#5“无法处理消息,因为内容类型“application/soap+xml;charset=utf-8;action=“web服务URL””不是预期的类型“text/xml;charset=utf-8” 这是我的密码 <?php $X = new X ([ 'Card' => '53535', 'Termi
<?php
$X = new X ([
'Card' => '53535',
'Terminal' => '43534534',
'Amount' => '1000',
'OrderId' => '1',
'ReturnUrl' => 'test url',
'Password' => 'D414305754BE7625CA70D',
'MobileNo' => '03003030',
'AdditionalData' => 'test' ]);
$request_key = $X ->request(2, 1000, 'http://');
class WebServicePaymentRequest
{
public $Card = "53535";
public $Terminal = "43534534";
public $Amount = "1000";
public $OrderId = "1";
public $ReturnUrl = "test url";
public $Password = "D414305754BE7625CA70D";
public $MobileNo = "03003030";
}
class X {
private $Card;
private $Terminal;
private $Amount;
private $OrderId;
private $ReturnUrl;
private $Password;
private $MobileNo;
private $AdditionalData;
private $Token;
private $wsdl_url = 'https://XXX/WebServices/PaymentUtils.svc?wsdl';
public function __construct($params)
{
$this->Card = $params['Card'];
$this->Terminal = $params['Terminal'];
$this->Password = $params['Password'];
$this->Amount = $params['Amount'];
$this->OrderId = $params['OrderId'];
$this->ReturnUrl = $params['ReturnUrl'];
$this->MobileNo = $params['MobileNo'];
$this->AdditionalData = $params['AdditionalData'];
}
public function request($order_id, $amount, $callback)
{
$options = array(
"soap_version" => SOAP_1_2,
"cache_wsdl" => WSDL_CACHE_NONE,
"exceptions" => false,
"encoding"=> 'UTF-8'
);
$client = new SoapClient($this->wsdl_url, $options);
$obj = new WebServicePaymentRequest;
$obj->Amount = $amount; // Output the property
$obj->OrderId = $order_id;
$obj->ReturnUrl = $callback;
$result = $client->PaymentRequest($obj);
echo $result;
var_dump($result);
$result = json_decode($result, true);
$this->Token = $result['Token'];
}
}
?>
我在stackoverflow和其他网站上尝试了所有的解决方案,但都没有成功
提前感谢…我发现Soapclient不支持PHP中的WCF。我通过将带有SoapAction头的Xml作为正文发布到Url解决了这个问题。我使用SoapUi获取Xml,然后使用postman获取结果。我不知道PHP,但从错误中可以看出客户端需要SOAP 1.1(
text/Xml
),而您的服务器正在发送SOAP 1.2(application/SOAP+xml
)。您确定根据正确的wsdl生成了客户端代码吗?谢谢您的回答,我发现Soapclient不支持php@Hintham中的WCF。我通过发送xml解决了问题