การใช้ PHP เพื่อเรียกเว็บเซอร์วิสแบบ SOAP

PHP เรียกเว็บเซอร์วิสแบบ SOAP Web services

                                                      การช้ 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

 

บันทึกนี้เขียนที่ GotoKnow โดย  ใน เรียนรู้เทคโนโลยีคอมพิวเตอร์



ความเห็น (0)