การใช้งาน SOAP Client โดยไม่ใช้ NuSOAP library เขียนเมื่อ 2009.07.13 โดย

เดิมทีผู้ที่ใช้ PHP 4 ต้องการทำงานกับ webservices ต้องมีการใช้งาน NuSOAP library เพื่อช่วยในการสร้าง Soap message เพื่อสื่อสารตามแต่ละ webservices ได้ระบุไว้

แต่หลังจาก PHP 5 ซึ่งมีการเพิ่ม Soap เข้าเป็นส่วนหนึงของการพัฒนาด้วยนั้น ทำให้ชื่อของ class/function ชนกันกับของ NuSOAP ดังนั้นผู้ใช้ต้องตรวจสอบว่าถ้ามีการ compile ให้มีการรองรับ SOAP แล้วจะไม่สามารถใช้ NuSOAP Library ได้

วันนี้เรามาดูในส่วนของการใช้ Soap library ที่มีมาให้ใน PHP 5 กัน โดย class เหล่านี้ถูกเพิ่มเข้ามาตั้งแต่ PHP 5.0.1 เราสามารถสร้าง SoapClient ได้ง่ายๆดังนี้
PHP
  1. <?
  2. $client = new SoapClient("http://www.ecubicle.net/iptocountry.asmx?wsdl");
  3. ?>


เราสามารถใช้ตัวแปร $client ในการสื่อสารต่างๆ ได้ทันที จากตัวอย่างเป็นการสร้าง SoapClient เพื่อเรียกใช้บริการของ ecubicle ซึ่งมีบริการหาชื่อประเทศจาก IP address ต่อไปเราก็เรียกใช้บริการที่เราต้องการ
PHP
  1. $result = $client->__soapCall("FindCountryAsString", array("FindCountryAsStringSoapIn"=>array("V4IPAddress"=>$_SERVER['REMOTE_ADDR'])));

เราเรียกใช้ __soapCall โดยระบุ operation ที่ต้องการพร้อม parameter เป็น array ของ parameter ที่ operation นั้นๆ ต้องการ ในที่นี้ operation FinCountryAsString ต้องการ parameter ชื่อ FindCountryAsStringSoapIn โดยมีโครงสร้างตัวแปรชื่อ V4IPAddress ที่เก็บค่า IP Address เอาไว้ ทั้งนี้เรายังสามารถเรียกใช้ operation ได้อีกแบบคือ
PHP
  1. $params = new SoapParam(array("V4IPAddress"=>$_SERVER['REMOTE_ADDR']), "FindCountryAsStringSoapIn");
  2. $result = $client->FindCountryAsString($params);

วิธีการนี้จะสามารถอ่านได้ง่ายกว่า แต่เราต้องสร้าง Object SoapParam ขึ้นมาตามโครงสร้างที่ operation นั้นๆ ระบุไว้ จากนั้นเราสามารถเรียกใช้ operation แบบเรียกใช้ method ของ object client ได้ทันทีโดยส่วน SoapParam ลงไปด้วย

ผลจากการเรียกใช้งาน operation จะถูกเก็บไว้ในตัวแปร $result ซึ่งในกรณีนี้คืนค่ามาเป็นโครงสร้างของ string แจ้งชื่อประเทศ

ส่วนเพื่อป้องกันการแสดงข้อผิดพลาด เราสามารถใช้ SoapFault ในการรับผลเมื่อมีการผิดพลาดคู่กับ try{...}catch{...} ได้ เช่น
PHP
  1. <?
  2. try {
  3.         $client = new SoapClient("http://www.ecubicle.net/iptocountry.asmx?wsdl");
  4.         $params = new SoapParam(array("V4IPAddress"=>$_SERVER['REMOTE_ADDR']), "FindCountryAsStringSoapIn");
  5.         $result = $client->__soapCall("FindCountryAsString", array("FindCountryAsStringSoapInss"=>array("V4IPAddress"=>$_SERVER['REMOTE_ADDR'])));
  6. }catch(SoapFault $ex){
  7.         echo $ex->faultstring;
  8. }
  9. ?>


การเรียกใช้ SoapClient Library ของ PHP จะสามารถทำได้รวดเร็วกว่าและไม่ต้องมีการ include NuSoap library ที่มีขนาดใหญ่ด้วย



คำเตือนคำเตือน เนื้อหาต่างๆ ในบทความ รวมถึงรูปภาพทั้งหมดในบทความนี้ เป็นความเห็นส่วนตัวของผู้เขียนแต่ละคน ซึ่งแต่ละคนได้ทำการลงทะเบียน และเขียนบทความลงใน Modoeye Articles นี้โดยไม่มีค่าธรรมเนียมใดๆ บทความเหล่านี้เป้าหมายเพื่อการศึกษา และความบันเทิงเท่านั้น การนำส่วนหนึ่งส่วนใดของบทความไปใช้งาน ควรทำการอ้างอิงถึงผู้เขียนและแหล่งที่มาด้วย