ซี่รี่เว็บเซอวิสด้วย SOAP
บทที่ 1 SOAP อ่านว่าโซ้ป
ผมได้อธิบายความหมายของเว็บเซอวิสไว้แล้วในบทที่ 1 ด้านบน ไปอ่านเพื่อปูพื้นเสียครับ (สำหรับคนที่ยังไม่อ่าน) ในตอนนี้ผมจะเริ่มพาท่านท่องชม การเขียนโค้ดเรียกใช้บริการเว็บเซอวิส ย้ำอีกทีว่าเว็บเซอวิสนั้น เป็นการเรียกใช้ฟังก์ชั่น ข้ามโดเมน ซึ่งโดยปกติแล้วมันจะไม่สามารถทำได้ (ถ้าไม่ได้ทำให้เป็นเว็บเซอวิส เด้อ)
โค้ดด้านล่าง จะเป็นโค้ด ส่งหมายเลขบัตรประชาชน ไปตรวจสอบยังเว็บของกรมสรรพากร โดยเราจะส่ง username, password และ หมายเลขบัตรประชาชน ไป เว็บสรรพากร ก็จะเอาข้อมูลที่เราส่งไป ไปตรวจในฐานข้อมูลว่ามีอยู่หรือไม่ ถ้ามีก็จะตอบกลับมาว่า ถูกต้อง ถ้าไม่มีจะแจ้งเออเร่อกลับมา
การเช็กด้วยวิธีนี้ เป็นการเช็กที่แม่นยำที่สุด เพราะกรมสรรพากรเขามีเลขที่บัตรประชาชนของทุกคนที่เสียภาษี ในประเทศไทย
ลองดูโค้ด แล้วผมจะอธิบายทีหลัง โค้ดนี้ใช้งานได้ถูกต้องนะครับ นำเอาไปประยุกต์ใช้ต่อได้เลย
$client = new SoapClient('https://rdws.rd.go.th/serviceRD3/checktinpinservice.asmx?wsdl'); $params = array( 'sequence' => array( 'username' => 'anonymous', 'password' => 'anonymous', 'TIN' => '38412xxxxxxxx', ) ); $ret = $client->__call('ServiceTIN', $params); if( !isset( $ret->ServiceTINResult->vMessageErr->anyType ) ){ echo 'Right'; } else { echo 'Wrong'; } |
อธิบายโค้ด
$client = new SoapClient('https://rdws.rd.go.th/serviceRD3/checktinpinservice.asmx?wsdl'); |
ใช้คำสั่ง SoapClient (มีมาให้อยู่แล้วใน PHP แต่ต้องเปิด soap ก่อน อ่านได้จากบทที่ 1) เรียกใช้ SOAP เชื่อมต่อไปยังบริการของกรมสรรพากร
$params = array( 'sequence' => array( 'username' => 'anonymous', 'password' => 'anonymous', 'TIN' => '3841200369685', ) ); |
ผมสร้างตัวแปร $params ไว้เพื่อจะแนบส่งไปให้กรมสรรพากร ตอนผมขอเข้าใช้งานฟังก์ชั่นในเว็บของเขา
$ret = $client->__call('ServiceTIN', $params); |
เรียกใช้ฟังก์ชั่น ServiceTIN ในเว็บกรมสรรพากร พร้อมทั้งส่งพารามิเตอร์ไปให้ฟังก์ชั่นด้วย $params ถ้าถามว่า ผมรู้ได้ไงว่ามันมีฟังก์ชั่นในนี้ให้ใช้งาน ผมก็อ่านจากเอกสารเอาครับ http://www.rd.go.th/publish/42533.0.html ส่วนพารามิเตอร์นั้น ในเว็บเขาอธิบายไว้ไม่ชัดเจนนัก ผมต้องอ่านเอาจากเอกสาร WSDL เพิ่มเติม (พร้อมกับเดานิดหน่อย) มันเป็น XML
ถ้าจะให้ง่ายสุดในการดูว่า ฟังก์ชั่นที่เราขอเขาใช้งาน เขาต้องการพารามิเตอร์อะไรบ้าง ต้องใช้โปรแกรม soapUI ครับ ไว้ผมจะลองอธิบายให้ฟังในบทต่อไป
if( !isset( $ret->ServiceTINResult->vMessageErr->anyType ) ){ echo 'Right'; } else { echo 'Wrong'; } |
ผมตรวจสอบตัวแปรที่ทางกรมสรรพากรส่งมาให้ ว่ามีเออเร่อหรือเปล่า ถ้าไม่มีเออเร่อ แสดงว่าเลขบัตรประชาชนที่ส่งไปตรวจสอบ ถูกต้อง แต่ถ้ามีแสดงว่าเลขที่บัตรประชาชนที่ส่งไปตรวจสอบไม่ถูกต้อง
ในตัวอย่างนี้ ผมแค่ echo ออกมาทางหน้าจอว่าถูกหรือผิด เท่านั้น ถ้าท่านจะเอาโค้ดนี้ไปใช้งาน ก็ประยุกต์เอาครับ ง่ายๆ
ผมแนะเคล็ดให้อย่างหนึ่ง สำหรับคนที่ขี้เกียจอ่านเอกสาร ผมก็ขี้เกียจ ผมอยากรู้ว่า ถ้าผมส่งเลขบัตรประชาชนไปถูก สรรพากรจะส่งตอบกลับมาว่า อย่างไร ถ้าส่งไปผิด สรรพากรจะตอบกลับมาว่าอย่างไร ผมก็แค่ใช้คำสั่ง var_dump ดั๊มตัวแปรออกมาดู ก็จะเห็นโครงสร้างของสิ่งที่ส่งมาทั้งหมด
var_dump($ret); |
จากนั้นก็อ๋อ ถ้าส่งไปถูกมันมางี้นะ ถ้าส่งไปผิดมันมางี้นะ เราก็แค่ตรวจเช็กจาก $ret->ServiceTINResult->vMessageErr->anyType เราก็จะรู้ได้ว่าเลขบัตรประชาชนมันถูกหรือเปล่า
var_dump คำสั่งนี้ของ PHP ดีมากครับ ไว้สำหรับตรวจสอบตัวแปร อย่างละเอียด
คูน says:
18/10/2556 at 18/10/2556
ทำไมเลขบัตรผม มัน ‘Wrong’ หว่าาา???
วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย says:
20/10/2556 at 20/10/2556
ท่านเสียภาษีหรือเปล่า
l3east says:
05/11/2556 at 05/11/2556
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘https://rdws.rd.go.th/serviceRD3/checktinpinservice.asmx?wsdl’ : failed to load external entity “https://rdws.rd.go.th/serviceRD3/checktinpinservice.asmx?wsdl” in C:\wamp\www\soap\index.php:2 Stack trace: #0 C:\wamp\www\soap\index.php(2): SoapClient->SoapClient(‘https://rdws.rd…’) #1 {main} thrown in C:\wamp\www\soap\index.php on line 2
แบบนี้หมายความว่ายังไงเหรอครับ
Ausa Thuamthong says:
24/03/2557 at 24/03/2557
123456
iieszz says:
29/03/2557 at 29/03/2557
Your CommentsWarning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity “https://rdws.rd.go.th/serviceRD3/checktinpinservice.asmx?wsdl” in D:\AppServ\www\soapRDGOTH.php on line 2
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘https://rdws.rd.go.th/serviceRD3/checktinpinservice.asmx?wsdl’ in D:\AppServ\www\soapRDGOTH.php:2 Stack trace: #0 D:\AppServ\www\soapRDGOTH.php(2): SoapClient->SoapClient(‘https://rdws.rd…’) #1 {main} thrown in D:\AppServ\www\soapRDGOTH.php on line 2
มี error แบบนี้ เว็บเซอวิสของกรมสรรพากร ปิดให้บริการในการตรวจสอบเลขบัตรประจำตัวประชาชนไปแล้วหรือเปล่าครับ
March says:
06/05/2557 at 06/05/2557
ขอถามนิดนึงครับ ผมมือใหม่ครับ คือว่า สรุป webservice ก็คือ เว็บที่ให้บริการ การแลกเปลี่ยนข้อมูลระหว่างกันใช่ไหมครับ ซึ่งแต่ละเว็บถ้าจะใช้ ก็ต้องเขียนโปรแกรมขึ้นมาเองก่อน เพื่อให้ web service ของตัวเองทำงาน จากนั้นผู้มาใช้งานที่ต้องการใช้งาน ก็จะสามารถใช้คำสั่ง web service นั้นได้ใช้ไหมครับ โดยแต่ละคำสั่งหรือ ตัวแปรจะไม่เหมือนกันใช่ไหมครับ
ขอบคุณครับ ช่วยตอบแจ้งแถลงไขนิดนึงครับ ว่าผมเข้าใจถูกไหมครับ ^_^
วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย says:
07/05/2557 at 07/05/2557
อย่างนั้นแหละท่าน