【问题标题】:getting error calling WCF SOAP web service through PHP通过 PHP 调用 WCF SOAP Web 服务时出错
【发布时间】: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解决了这个问题

标签: php wcf soap


【解决方案1】:

我发现 Soapclient 不支持 PHP 中的 WCF。我通过将带有 SoapAction 标头的 Xml 作为正文发布到 Url 解决了这个问题。我使用 SoapUi 获取 Xml ,然后使用 postman 获取结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多