ภาษา PHP เป็นภาษาที่เหมาะสมในการพัฒนาเว็บแอปพลิเคชัน เนื่องจากเป็นภาษาที่ง่าย เรียนรู้ได้เร็ว และสามารถนำมาใช้ได้ฟรี การเรียกใช้เว็บเซอร์วิสด้วยภาษา PHP จึงเป็นที่นิยม ภาษา PHP เวอร์ชันปัจจุบันคือ PHP5 ซึ่งมีความสามารถในการสนับสนุนการเรียกใช้เว็บเซอร์วิสในตัวโดยไม่ต้องดาวน์โหลดเครื่องมืออะไรเพิ่มเติม ซึ่งจะทำให้ง่ายกว่าการที่ต้องไปดาวน์โหลดเครื่องมืออย่างเช่น NuSOAP ซึ่ง อัปเดตล่าสุดในปี ค.ศ. 2005 อีกทั้งไม่ได้มีกลุ่มผู้ใช้อย่างมากเหมือนกับ SOAP extension ของ PHP5
ใน PHP5 มี SOAP extension ที่ทำให้การเรียกใช้เว็บเซอร์วิสแบบ SOAP ง่ายขึ้นโดยการใช้คลาส SoapClient
ขั้นตอนวิธีการมีดังต่อไปนี้
1) หากเราต้องการเรียกใ้ช้เว็บเซอร์็วิสแบบ SOAP ใดเราก็ต้องรู้ที่อยู่ของเอกสาร WSDL ของเว็บเซอร์วิสนั้นก่อน เช่น
$client = new SoapClient($wsdl);
2) จากนั้นใช้ฟังก์ชัน _soapCall เพื่อเรียกใช้เมธอดที่เราต้องการโดยที่จะต้องระบุอินพุตพารามิเตอร์ในรูปแบบอาร์เรย์ เช่น
$result = $client->__soapCall($methodName, array($methodArguments));
3) ถ้าหากเราเรียกใช้เว็บเซอร์วิสที่พัฒนาโดยใช้ Microsoft .NET จะต้องมีการระบุ SOAP Action ในอาร์กิวเมนต์ของฟังก์ชัน __soapCall เช่น
$result = $client->__soapCall($methodName, array($methodArguments), array('soapaction' => $soapAction));
4) ถ้าหากเราเรียกใช้เว็บเซอร์วิสที่พัฒนาโดย Microsoft .NET จะได้ผลลัพธ์ที่อยู่ในรูปออปเจตก์ที่ประกอบด้วยอิลิเมนต์ที่มีชื่อตรงกับอิลิเมนต์เอาต์พุตตามที่ระบุในเอกสาร WSDL เช่น
echo $result->outputElemName;
เราลองมาดูตัวอย่างของการเรียกใช้เว็บเซอร์วิส ปตท ซึ่งพัฒนาเป็นเว็บเซอร์วิสแบบ SOAP ดังนี้
<?php
// ที่อยู่ของเอกสาร WSDL ของเว็บเซอร์วิส ปตท");
$wsdl = 'http://www.pttplc.com/pttinfo.asmx?WSDL';
// สร้างออปเจกต์ SoapClient เพื่อเรียกใช้เว็บเซอร์วิส
$client = new SoapClient($wsdl);
// เรียกเว็บเซอร์วิสผ่าน proxy ของมหาวิทยาลัยขอนแก่น
// $client = new SoapClient($wsdl,
// array('proxy_host' => "202.12.97.116",
// 'proxy_port' => 8088));
// เมธอดที่ต้องการเรียกใช้ CurrentOilPrice
$methodName = 'CurrentOilPrice';
// อินพุตพารามิเตอร์ของเมธอด CurrentOilPrice คือ
// Language ซึ่งเราตั้งค่าให้เป็น EN
$params = array('Language'=>'EN');
// ระบุค่าของ SOAP Action URI
$soapAction = 'http://www.pttplc.com/ptt_webservice/CurrentOilPrice';
// ใช้ฟังก์ชัน _soapCall ในการเรียกเมธอดที่ระบุ
// ต้องระบุพารามิเตอร์และ SOAP Action
$objectResult = $client->__soapCall($methodName, array('parameters' => $params), array('soapaction' => $soapAction));
// จะต้องดูค่าฟิลด์ที่ชื่อตรงกับชื่อของอิลิเมนต์ที่ระบุใน
// Output Message ซึ่งในที่นี้ก็คือ
// CurrentOilPriceResult
echo $objectResult->CurrentOilPriceResult;
?>
ซึ่งเราก็จะได้ผลลัพธ์ดังรูปที่แสดงต่อไปนี้
อ้างอิงจาก
PHP: SOAP - Manual http://th.php.net/soap
PHP: SoapClient->__soapCall Manual http://th.php.net/soap_soapclient_soapcall
ปล. สามารถดูบันทึกนี้และแสดงความคิดเห็นหรือคำถามได้ที่ http://thaixmlws.blogspot.com
ไม่มีความเห็น