【发布时间】:2018-10-20 15:03:05
【问题描述】:
我有一个托管在 IIS 上的 WCF Web 服务。它可以通过.net 毫无问题地调用。但是当我尝试通过 PHP 调用它时,我得到了这个错误
object(SoapFault)#5 "无法处理消息,因为内容类型 'application/soap+xml; charset=utf-8; action="web service 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 和其他网站中的所有解决方案。但它没有用。
在此先感谢...
【问题讨论】:
-
我不知道 PHP,但从错误看来,客户端需要 SOAP 1.1 (
text/xml),而您的服务器正在发送 SOAP 1.2 (application/soap+xml)。您确定您已针对正确的 wsdl 生成客户端代码吗? -
谢谢你的回答,我发现Soapclient在php中不支持WCF @Hintham我通过发送Xml解决了这个问题