PHP kodu yazmaya alışkınım, ancak Nesneye Yönelik kodlamayı sıklıkla kullanmıyorum. Şimdi (bir istemci olarak) SOAP ile etkileşime girmem gerekiyor ve sözdizimini doğru yapamıyorum. SoapClient sınıfını kullanarak düzgün bir şekilde yeni bir bağlantı kurmama izin veren bir WSDL dosyam var. Ancak, aslında doğru aramayı yapıp verileri geri alamıyorum. Aşağıdaki (basitleştirilmiş) verileri göndermem gerekiyor:
- Kişi Kimliği
- Kişi Adı
- Genel açıklama
- Miktar
WSDL belgesinde tanımlanmış iki işlev vardır, ancak yalnızca birine ihtiyacım var (aşağıdaki "FirstFunction"). Kullanılabilir işlevler ve türler hakkında bilgi almak için çalıştırdığım komut dosyası şu şekildedir:
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
Ve işte ürettiği çıktı:
array(
[0] => "FirstFunction Function1(FirstFunction $parameters)",
[1] => "SecondFunction Function2(SecondFunction $parameters)",
);
array(
[0] => struct Contact {
id id;
name name;
}
[1] => string "string description"
[2] => string "int amount"
}
Veriyle FirstFunction'a bir çağrı yapmak istediğimi varsayalım:
- İletişim ID: 100
- Kişi Adı: John
- Genel Açıklama: Varil Petrol
- Miktar: 500
Doğru sözdizimi ne olurdu? Her türlü seçeneği deniyorum ama görünüşe göre sabun yapısı oldukça esnek, bu yüzden bunu yapmanın birçok yolu var. Kılavuzdan da anlayamadım ...
GÜNCELLEME 1: MMK'dan denenmiş örnek:
$client = new SoapClient("http://example.com/webservices?wsdl");
$params = array(
"id" => 100,
"name" => "John",
"description" => "Barrel of Oil",
"amount" => 500,
);
$response = $client->__soapCall("Function1", array($params));
Ama bu yanıt almak: Object has no 'Contact' property
. Çıktısında görebileceğiniz gibi getTypes()
, bir struct
çağrı varContact
, bu yüzden sanırım bir şekilde parametrelerimin İletişim verilerini içerdiğini netleştirmem gerekiyor, ancak soru şu: nasıl?
GÜNCELLEME 2: Bu yapıları da denedim, aynı hatayı.
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
Hem de:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
Her iki durumda da hata: Nesnede "İletişim" özelliği yok "