ซี่รี่เว็บเซอวิสด้วย 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 ดีมากครับ ไว้สำหรับตรวจสอบตัวแปร อย่างละเอียด