连接真正的wsdl服务并将其方法与PHP一起使用

时间:2016-04-13 19:25:47

标签: php web-services soap wsdl

我有一个正在开发的电子商务网站。我买了一个网络软件。我想连接到网络服务并添加一些品牌。

这是我的网络服务 WSDL 网址:http://www.cantabu.com/Servis/UrunServis.svc?wsdl

添加新品牌的方法是" SaveMarka "。

这是我的初始代码:

ini_set("soap.wsdl_cache_enabled", "0");
$wsdl = "http://www.cantabu.com/Servis/UrunServis.svc?wsdl";
$authCode = "MY_WEBSERVICE_AUTHENTICATION_CODE";
$client = new SoapClient($wsdl);

当我print_r $ client-> __ getFunctions()结果是(与SaveMarka方法相关):

Array
(
    [4] => SaveMarkaResponse SaveMarka(SaveMarka $parameters)
)

当我print_r $ client-> __ getTypes()时,结果是(结果数组的第5个索引,因为其他与SaveMarka无关):

Array
(
    [0] => struct ArrayOfint {
 int int;
}
    [1] => struct ArrayOfstring {
 string string;
}
    [2] => struct ArrayOfKategori {
 Kategori Kategori;
}
    [3] => struct Kategori {
 boolean Aktif;
 int ID;
 string Icerik;
 string Kod;
 int PID;
 string SeoAnahtarKelime;
 string SeoSayfaAciklama;
 string SeoSayfaBaslik;
 int Sira;
 string Tanim;
}
    [4] => struct ArrayOfMarka {
 Marka Marka;
}
    [5] => struct Marka {
 boolean Aktif;
 int ID;
 string SeoAnahtarKelime;
 string SeoSayfaAciklama;
 string SeoSayfaBaslik;
 string Tanim;
}

他们在网络服务文档中说;如果要添加新品牌,ID应为0(零)。否则,webservice将更新与该ID相关的品牌。

我尝试过SaveMarka方法的不同变体。但他们都失败了,结果各不相同。

首先,我创建了一个Marka课程。

 class Marka{
      var $ID;
      var $SeoAnahtarKelime;
      var $SeoSayfaBaslik;
      var $SeoSayfaAciklama;
      var $Tanim;
      var $Aktif;


      function __construct($id, $seo, $seoAciklama, $seoBaslik, $ad){
          $this->ID = $id;
          $this->SeoAnahtarKelime = $seo;
          $this->SeoSayfaBaslik = $seoBaslik;
          $this->SeoSayfaAciklama = $seoAciklama;
          $this->Tanim = $ad;
          $this->Aktif = true;
      }
  }

然后我试图这样做:

$marka = new Marka(0, "pg", "P&G", "P&G", "P&G");
$newMarka = array(
      "UyeKodu" => $authCode",
      "Marka" => $marka
);
$client->__soapCall("SaveMarka", $newMarka);

结果是:

  

输入:SoapFault

     

消息:格式化程序在尝试反序列化时抛出了异常   消息:反序列化请求消息正文时出错   操作' SaveMarka'。结束元素'身体'从命名空间   ' http://schemas.xmlsoap.org/soap/envelope/'预期。找到元素   '参数1'来自命名空间''。第2行,第150位。

我也尝试过(我不知道为什么):

$marka = new Marka(0, "pg", "P&G", "P&G", "P&G");
$newMarka = array(array(
      "UyeKodu" => $authCode",
      "Marka" => $marka
));
$client->__soapCall("SaveMarka", $newMarka);

结果是:

  

输入:SoapFault

     

消息:对象引用未设置为对象的实例。

然后我摆脱了Marka课程,并尝试在不使用课程的情况下更简单:

 $newMarka = array(
      "UyeKodu" => $authCode,
      "ID" => 0,
      "Tanim" => "P&G",
      "Aktif" => true,
      "SeoAnahtarKelime" => "pg",
      "SeoSayfaBaslik" => "P&G",
      "SeoSayfaAciklama" => "P&G"
 );
 $client->__soapCall("SaveMarka", $newMarka);

结果是:

  

输入:SoapFault

     

消息:格式化程序在尝试反序列化时抛出了异常   消息:反序列化请求消息正文时出错   操作' SaveMarka'。结束元素'身体'从命名空间   ' http://schemas.xmlsoap.org/soap/envelope/'预期。找到元素   '参数1'来自命名空间''。第2行,第150位。

而且(再次,我不知道为什么)

 $newMarka = array(array(
      "UyeKodu" => $authCode,
      "ID" => 0,
      "Tanim" => "P&G",
      "Aktif" => true,
      "SeoAnahtarKelime" => "pg",
      "SeoSayfaBaslik" => "P&G",
      "SeoSayfaAciklama" => "P&G"
 ));
 $client->__soapCall("SaveMarka", $newMarka);

结果是:

  

输入:SoapFault

     

消息:对象引用未设置为对象的实例。

我做错了什么?

任何人都可以帮我添加一个新品牌吗?我提供了函数,类型,wsdl链接和我所有的尝试。

请帮助。

0 个答案:

没有答案