ฉันเคยเขียนโค้ด PHP แต่มักไม่ใช้การเขียนโปรแกรมเชิงวัตถุ ตอนนี้ฉันต้องโต้ตอบกับ SOAP (ในฐานะลูกค้า) และฉันไม่สามารถรับไวยากรณ์ได้ ฉันมีไฟล์ WSDL ซึ่งทำให้ฉันสามารถตั้งค่าการเชื่อมต่อใหม่โดยใช้คลาส SoapClient ได้อย่างถูกต้อง อย่างไรก็ตามฉันไม่สามารถโทรออกและรับข้อมูลคืนได้ ฉันต้องการส่งข้อมูล (ประยุกต์) ต่อไปนี้
- ID ผู้ติดต่อ
- ชื่อผู้ติดต่อ
- คำอธิบายทั่วไป
- จำนวน
มีสองฟังก์ชันที่กำหนดไว้ในเอกสาร WSDL แต่ฉันต้องการเพียงหนึ่ง ("FirstFunction" ด้านล่าง) นี่คือสคริปต์ที่ฉันเรียกใช้เพื่อรับข้อมูลเกี่ยวกับฟังก์ชันและประเภทที่มี:
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
และนี่คือผลลัพธ์ที่มันสร้าง:
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"
}
ว่าฉันต้องการโทร FirstFunction ด้วยข้อมูล:
- ID ผู้ติดต่อ: 100
- ชื่อผู้ติดต่อ: John
- รายละเอียดทั่วไป: ถังน้ำมัน
- จำนวน: 500
สิ่งที่จะเป็นไวยากรณ์ที่ถูกต้อง? ฉันได้ลองใช้ตัวเลือกทุกประเภท แต่ดูเหมือนว่าโครงสร้างสบู่ค่อนข้างยืดหยุ่นดังนั้นจึงมีหลายวิธีในการทำเช่นนี้ ไม่สามารถเข้าใจได้จากคู่มือ ...
อัปเดต 1: ลองตัวอย่างจาก MMK:
$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));
Object has no 'Contact' property
แต่ฉันได้รับการตอบสนองนี้: อย่างที่คุณเห็นในผลลัพธ์ของgetTypes()
มีการstruct
เรียกContact
ดังนั้นฉันคิดว่าฉันต้องการทำให้ชัดเจนพารามิเตอร์ของฉันรวมถึงข้อมูลการติดต่อ แต่คำถามคือ: อย่างไร
ปรับปรุง 2: ฉันได้ลองโครงสร้างเหล่านี้ด้วยข้อผิดพลาดเดียวกัน
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
เช่นเดียวกับ:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
ข้อผิดพลาดในทั้งสองกรณี: วัตถุไม่มีคุณสมบัติ 'ติดต่อ'