通过PHP调用WCF SOAP web服务时出错

通过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

我有一个托管在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',
    '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解决了问题