การช้ PHP เรียกเว็บเซอร์วิสแบบ SOAP
ภาษา PHP
เป็นภาษาที่เหมาะสมในการพัฒนาเว็บแอปพลิเคชัน
เนื่องจากเป็นภาษาที่ง่าย
เรียนรู้ได้เร็ว และสามารถนำมาใช้ได้ฟรี
การเรียกใช้เว็บเซอร์วิสด้วยภาษา PHP จึงเป็นที่นิยม PHP
มีความสามารถในการสนับสนุนการเรียกใช้เว็บเซอร์วิสในตัวโดยไม่ต้องดาวน์โหลดเครื่องมืออะไรเพิ่มเติม
โดยผู้พัฒนาสามารถใช้ SOAP extension
ซึ่งสนับสนุนทั้งการสร้างเว็บเซอร์วิสและเรียกเว็บเซอร์วิส
ในการที่จะใช้ SOAP extension นั้นจะต้องแก้ไขไฟล์ php.ini
(ถ้าเป็นระบบปฏิบัติการ Windows มักอยู่ที่ c:/windows/php.ini)
โดยเพิ่มโค้ดบรรทัดนี้
extension=php_soap.dll
จากนั้นก็ทำการ restart apache server
หากเปิดเบราว์เซอร์ที่ phpinfo (ถ้าเป็นเครื่องตัวเองเปิดที่ http://localhost/phpinfo) ก็จะเห็นว่าตอนนี้มี SOAP extension ให้พร้อมใช้แล้วดังแสดงในรูปที่ 1
หากไม่สามารถเปิดสคริปต์ phpinfo ได้ก็ให้สร้างไฟล์ phpinfo.php ที่มีเนื้อหา
<?php phpinfo(); ?>
รูปที่ 1 เว็บ phpinfo ที่มีการ enable 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);
// เมธอดที่ต้องการเรียกใช้ 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;
?>
ซึ่งเราก็จะได้ผลลัพธ์ดังรูปที่แสดงต่อไปนี้
รูปที่ 2 ผลลัพธ์ของการเรียกเว็บเซอร์วิส ปตท เพื่อดูราคาน้ำมันในปัจจุบัน
แบบฝึกหัด
- ทดลองเรียกเว็บเซอร์วิส Global Weather ซึ่งมี WSDL อยู่ที่ http://webservicex.com/globalweather.asmx?WSDL จากนั้นให้ศึกษาเอกสาร WSDL ดังกล่าวเพื่อเรียกดูพยากรณ์อากาศของเมือง Khon Kaen ในประเทศ Thailand
รูปที่ 3 ผลลัพธ์ของการเรียกใช้เว็บเซอร์วิส Global Weather ในเมือง Khon Kaen ประเทศ Thailand
อ้างอิงจาก
PHP: SOAP - Manual http://th.php.net/soap
PHP: SoapClient->__soapCall Manual http://th.php.net/soap_soapclient_soapcall
ไม่มีความเห็น