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

การเรียกใช้เว็บเซอร์วิสด้วยภาษา PHP จึงเป็นที่นิยม

ภาษา 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;
?>
  

ซึ่งเราก็จะได้ผลลัพธ์ดังรูปที่แสดงต่อไปนี้

PTTWS_PHP5_SOAP_Result

อ้างอิงจาก

PHP: SOAP - Manual  http://th.php.net/soap

PHP: SoapClient->__soapCall Manual http://th.php.net/soap_soapclient_soapcall

 

ปล. สามารถดูบันทึกนี้และแสดงความคิดเห็นหรือคำถามได้ที่ http://thaixmlws.blogspot.com

บันทึกนี้เขียนที่ GotoKnow โดย  ใน XML Web Services Tips & Troubleshooting



ความเห็น (0)