我有一个正在开发的电子商务网站。我买了一个网络软件。我想连接到网络服务并添加一些品牌。
这是我的网络服务 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链接和我所有的尝试。
请帮助。