Tôi đã quen viết mã PHP, nhưng không thường xuyên sử dụng mã hóa hướng đối tượng. Bây giờ tôi cần tương tác với SOAP (với tư cách là khách hàng) và không thể có được cú pháp đúng. Tôi đã có tệp WSDL cho phép tôi thiết lập đúng kết nối mới bằng lớp SoapClient. Tuy nhiên, tôi thực sự không thể thực hiện cuộc gọi đúng và nhận lại dữ liệu. Tôi cần gửi dữ liệu (đơn giản hóa) sau:
- ID liên hệ
- Tên Liên lạc
- Mô tả chung
- Số tiền
Có hai hàm được định nghĩa trong tài liệu WSDL, nhưng tôi chỉ cần một ("FirstFunction" bên dưới). Đây là kịch bản tôi chạy để lấy thông tin về các chức năng và loại có sẵn:
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
Và đây là đầu ra mà nó tạo ra:
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"
}
Nói rằng tôi muốn thực hiện cuộc gọi đến FirstFactor với dữ liệu:
- ID liên hệ: 100
- Tên liên hệ: John
- Mô tả chung: Thùng dầu
- Số tiền: 500
Điều gì sẽ là cú pháp đúng? Tôi đã thử tất cả các loại tùy chọn nhưng có vẻ như cấu trúc xà phòng khá linh hoạt nên có rất nhiều cách để làm điều này. Không thể tìm ra nó từ hướng dẫn ...
CẬP NHẬT 1: mẫu đã thử từ 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));
Nhưng tôi nhận được phản hồi này : Object has no 'Contact' property
. Như bạn có thể thấy trong đầu ra của getTypes()
, có một lệnh struct
được gọi Contact
, vì vậy tôi đoán rằng bằng cách nào đó tôi cần phải làm rõ các tham số của mình bao gồm dữ liệu Liên hệ, nhưng câu hỏi là: làm thế nào?
CẬP NHẬT 2: Tôi cũng đã thử các cấu trúc này, cùng một lỗi.
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
Cũng như:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
Lỗi trong cả hai trường hợp: Đối tượng không có thuộc tính 'Liên hệ'