ทำไมผมจึงเลือก Omise มาใช้เป็น Payment Gateway

หลังจากที่ผมได้ลองหาข้อมูลเกี่ยวกับ Payment Gateway หรือช่องทางการรับชำระเงินออนไลน์ ผมคิดว่าผมเจอตัวที่ตอบโจทย์ความต้องการของผมได้แล้วนั่นคือ Omise ครับ แต่ก่อนที่จะพูดถึง Omise ผมขอพูดถึง Payment Gateway เจ้าอื่น ๆ ในตลาดที่มีข้อจำกัดทำให้ผมตัดสินใจเลือกใช้งานนะครับ

ทำไมต้องบัตรเครดิต

ในปัจจุบันการซื้อสินค้าหรือบริการบนอินเทอร์เน็ต เราสามารถชำระเงินได้หลายรูปแบบไม่ว่าจะเป็นการโอนเงิน ใช้บัตรเครดิต หรือจ่ายผ่าน Paypal (และ Counter Service) แต่ที่ผมเลือกใช้บัตรเครดิต (เท่านั้น) เพราะ 1) เราโฟกัสไปที่ช่องทางเดียวในการพัฒนา (ยิ่งทำให้จ่ายได้หลายช่องทาง ยิ่งต้อง implement เยอะใช้เวลามากขึ้น สตาร์ทอัพต้องเร็ว) 2) เราต้องการมอบประสบการณ์แบบไร้รอยต่อให้กับลูกค้า (Seamless Experience) ซึ่งมันเป็นเรื่องของ User Experience หรือ UX

ประสบการณ์แบบไร้รอยต่อมันเป็นอย่างไร ผมขอยกตัวอย่าง Uber เราเรียกรถ ตัดบัตรจ่ายเงินเสร็จสรรพ พอรถไปถึงที่หมายเราเปิดประตูเดินออกไปได้เลยทันที ถ้าเป็น Taxi ทั่วไป เราต้องมาเสียเวลานั่งนับตังค์ หรือรอตังค์ทอนจากคนขับ การเดินทางของเราจะไม่ถูกรบกวนหรือสะดุดจากกิจกรรมจุกจิกดังกล่าวเลย นี่ล่ะครับที่เค้าเรียกว่าประสบการณ์แบบไร้รอยต่อ

ตัวเลือก Payment Gateway ในปัจจุบัน

ขอออกตัวก่อนว่าผมไม่มีความรู้ทางด้าน Payment Gateway มาก่อน ผมจึงได้แต่เดาว่า ในเบื้องต้นเราต้องเปิดบัญชีธนาคารสักแห่ง แล้วไปทำเรื่องขอ API ธนาคารนั้นมาผูกกับเว็บไซต์หรือระบบของเรา เพื่อให้เงินจากบัตรของลูกค้าเข้ามาเก็บที่บัญชีเรา

ผมลองหาข้อมูลเพิ่มเติม และพบว่าระบบ Payment Gateway ในปัจจุบันหลัก ๆ มีให้เลือกใช้ 2 ช่องทาง คือ

เชื่อมต่อเว็บไซต์ของเราเข้ากับระบบของธนาคารนั้น ๆ

เชื่อมต่อเว็บไซต์กับผู้ให้บริการแบบ 3rd Party

ผมคิดว่าช่องทางแรกน่าจะง่าย เพียงแค่เราลองไปคุยกับธนาคารโดยตรง ผมเลยให้น้องในทีมไปขอข้อมูล และพบว่ามีข้อจำกัดหลายอย่างที่ทำให้ผมไม่สามารถใช้ช่องทางนี้ได้ เช่น ต้องเป็นนิติบุคคลที่มีทุนจดทะเบียนไม่ต่ำกว่า 2 ล้านบาท และต้องวางเงินฝากค้ำประกันข้างต้น 200,000 บาท และต่าง ๆ อีกมากมาย เรียกได้ว่าสตาร์ทอัพทุนน้อยแบบผมนี่เลิกคิดไปได้เลยที่จะมีระบบตัดบัตรเครดิตของตัวเองผูกกับธนาคาร

ในเมื่อช่องทางแรกมันเป็นไปไม่ได้ ผมจึงมองช่องทางที่สอง คือ ใช้บริการตัดบัตรของ 3rd Party อย่าง Paypal, Paysbuy, Omise, ChaiyoPay

การจัดการข้อมูลบัตรเครดิต

ก่อนที่ผมจะพูดถึงพวกบริการ 3rd Party ผมขอพูดถึงการจัดการข้อมูลบัตรเครดิตกันก่อนนะครับ ในเบื้องต้น ผมไม่รู้ว่าโดยปกติระบบของเราเองนั้นจะเก็บข้อมูลบัตรเครดิตของลูกค้าไว้หรือไม่ แต่ผมคิดว่าน่าจะเก็บเพื่อนำมาใช้ยืนยันตัวตนเจ้าของบัตร เช่น ถ้าลูกค้ามีการสั่งซื้อสินค้าหรือบริการมา ทางร้านค้าจะต้องยืนยันอีกทีหนึ่งถึงจะตัดเงินจากบัตร

จากกรณีข้างต้นจะเห็นได้ว่า ถ้าเราไม่เก็บข้อมูลบัตรเครดิตของลูกค้าไว้ เราจะทำอย่างไรในตอนที่เรายืนยันคำสั่งซื้อ เพื่อตัดเงินจากบัตร

Photo credit: http://y-mesoftball.com/

ผมค้นหาข้อมูลเพิ่มเติม และไปเจอบทความหนึ่งใน Blognone ชื่อ “Hash: ไม่รู้ว่ามันคืออะไรแต่มันใช่” ในบทความดังกล่าวชี้แจงว่าถ้าจะเก็บข้อมูลบัตรในฐานข้อมูล ห้ามเก็บโดยตรงแต่ให้เข้ารหัสไว้ เผื่อกรณีถูกแฮ็กค์ พวก Hacker จะไม่สามารถนำไปใช้งานได้ แต่อย่างไรก็ตามเทคโนโลยีฮาร์ดแวร์ในปัจจุบันก็ทำให้เรื่องของการถอดรหัสนำข้อมูลไปใช้นั้นเป็นไปได้

โจทย์ของผม คือ เราจะไม่ตัดเงินจากบัตรของลูกค้าตั้งแต่การสั่งซื้อ (Step1) แต่จะตัดหลังจากที่ร้านค้าได้ยืนยันคำสั่งซื้อของลูกค้าแล้วเท่านั้น (Step2) ซึ่งหากเราเข้ารหัสข้อมูลบัตรเครดิตของลูกค้าตั้งแต่ Step 1 เราจะไปมีข้อมูลอะไรมาใช้ยืนยันการตัดบัตรใน Step ที่ 2 ในทางกลับกันถ้าไม่เราไม่เก็บข้อมูลแบบเข้ารหัสก็เสี่ยงที่จะถูกแฮคครับ

ในเมื่อวิธีการดังกล่าวไม่ตอบโจทย์และมีความเสี่ยงที่จะถูกแฮค ผมก็ได้แต่จินตนาการไปว่ามีจะ Solution ไหนบ้างที่ช่วยให้เราไม่จำเป็นต้องเก็บข้อมูลบัตรเครดิตไว้กับระบบเราเลย แต่สามารถใช้นำมาใช้ยืนยันในเวลาที่เราต้องการตัดเงินจากบัตรได้ ซึ่งผมมาเจอ Solution การใช้ Token ของ Omise นี่ล่ะที่ตอบโจทย์ดังกล่าวของผมได้ดีเลย ทำให้ผมไม่จำเป็นต้องเก็บข้อมูลบัตรเครดิตของลูกค้าไว้กับระบบ รายละเอียดของ Token เรามาว่ากันอีกทีช่วงท้าย ๆ ว่ามีข้อดีอย่างไร และทำไมมันถึงทำแบบนั้นได้

ทำธุรกรรมทางการเงินออนไลน์อย่าลืม HTTPS

นอกจากการจัดการข้อมูลบัตรเครดิตแล้ว การรับส่งข้อมูลธุรกรรมทางการเงินก็สำคัญเช่นเดียวกัน ไม่ว่าจะเป็นธนาคารหรือ 3rd Party จะบังคับเราว่าทางระบบหรือเว็บไซต์ของเราต้องรองรับ HTTPS ในการรับส่งข้อมูล เพื่อความปลอดภัยจากการถูกดักจับข้อมูล

อย่างไรก็ตามหากคุณต้องการทำให้เว็บไซต์รองรับ HTTPS คุณจำเป็นต้องซื้อ SSL Certificate ซึ่งมีค่าใช้จ่ายอยู่ที่ 1000 บาทต่อปี

เมื่อปีที่แล้วมีบริการที่ชื่อว่า Let’s Encrypt ซึ่งคุณสามารถขอใช้งานได้ฟรี ในการทำให้เว็บรองรับ HTTPS ซึ่งผู้ให้บริการ Host ในไทยหลายเจ้าก็เริ่มให้บริการเจ้า Let’s Encrypt ตัวนี้บ้างแล้ว จะมีเจ้าไหนบ้างลองไปดูกันได้ที่ comment ในกระทู้ [Ask Blognone] ถามหาบริการโฮสติ้งที่รองรับ Let’s Encrypt

ตัวเลือก Payment Gateway 3rd Party

เกณฑ์ในการพิจารณาเลือกใช้บริการ Payment Gateway มีหลายด้าน สำคัญที่สุด คือ เลือกใช้ให้เหมาะสมกับธุรกิจและลูกค้ากลุ่มเป้าหมายครับ ข้อมูลเกณฑ์ในการพิจารณาต่อไปนี้เขียนจากมุมมองส่วนตัวของผมเอง

ช่องทางรับชำระเงินจากลูกค้า

ถ้าพิจารณาจากช่องทางรับชำระเงินจะเห็นว่า PaysBuy กินขาดไม่ว่าจะเป็น บัตรเครดิต, Internet Banking หรือเงินสด รองลงมาเป็น Taladpay, ChaiyoPay และ Omise

ส่วน Paypal ลูกค้าจะสมัครและเปิดบัญชี Paypal หรือไม่ก็ได้ ซึ่งถ้าไม่สมัคร Paypal ลูกค้าก็ยังสามารถใช้บัตรเครดิตหรือเดบิตชำระเงินค่าสินค้าหรือบริการได้ครับ ต่างกันที่การไม่สมัครจะต้องกรอกข้อมูล Billing Information และ Contact Information ถ้าเป็นคนที่ใช้งานบ่อย ๆ อาจจะไม่ชอบที่ต้องมากรอกข้อมูลเหล่านี้ทุกครั้งครับ

ค่าธรรมเนียมในการให้บริการ

ค่าธรรมเนียมพอรวม Vat 7% PaysBuy, ChaiyoPay, Omise แทบจะไม่แตกต่างกันครับ ค่าธรรมเนียมการชำระเงินจากบัตรเครดิตจะอยู่ที่ 4% เหลือมกันแค่หลักทศนิยม ส่วน Taladpay ค่าธรรมเนียมอยู่ตายตัวอยู่ที่ 300 บาทต่อเดือน

ส่วน Paypal ค่าธรรมเนียมในการขายอยู่ที่ 4.4% + $0.30 USD ต่อการขาย หรือต่ำกว่านั้น ดูข้อมูลเพิ่มเติมได้ที่ https://www.paypal.com/th/webapps/mpp/paypal-fees?locale.x=th_TH นอกจากค่าธรรมเนียมจากการขายแล้ว ตอนถอนเงินจาก Paypal มาเข้าบัญชีเราเองก็มีค่าธรรมเนียมดังนี้

ถ้ายอดเงินที่ถอนไม่ถึง 5,000 บาท มีค่าธรรมเนียมในการถอนเงิน 50 บาท ถ้าเกิน 5,000 ก็ไม่มีค่าธรรมเนียม

ถ้ารับเงินเป็นดอลล่าร์ แต่ตอนถอนเงินมาเข้าบัญชีไทย จะมีค่าธรรมเนียมในการแปลงค่าเงิน (Conversion fee) อยู่ที่ 2.5%

ระยะเวลาในการถอนเงินจาก 3rd Party

ประเด็นนี้สำคัญ หากธุรกิจต้องการนำเงินไปหมุนเร็ว ซึ่งผมแนะนำ PaysBuy (2 วันทำการ) กับ Omise (1 วัน) ส่วน Taladpay และ ChaiyoPay ใช้ระยะเวลา 15 วันเพื่อรวมยอด และโอนเงินให้กับเรา ส่วน PayPal ใช้เวลาประมาณ 5 วันทำการครับ

การสนับสนุนนักพัฒนา

เป็นสตาร์ทอัพต้องเร็ว ซึ่ง Omise กับ PayPal ทำได้ดีในจุดนี้ คือ การมี API ให้นักพัฒนาพร้อมนำไปทดสอบ แต่ถ้าจะให้เปรียบเทียบระหว่าง Omise กับ Paypal ผมก็ยังคงเลือก Omise ด้วยเหตุผลดังนี้

ค่าธรรมเนียมต่อการขาย และค่าธรรมเนียมในการถอนเงินนั้นถูกกว่า

ระยะเวลาที่ใช้ในการถอนเงินมาเข้าบัญชี Omise ทำได้เร็วกว่า Paypal

การกรอกข้อมูลบัตรเครดิต Omise จะใช้ข้อมูลแค่ 4 ตัว คือ หมายเลขบัตร 16 หลัก, ชื่อผู้ถือบัตร, เดือน และปีที่หมดอายุ และรหัส CVV ส่วน Paypal (กรณีที่ไม่ได้เป็นสมาชิก Paypal และใช้บัตรเครดิตชำระเงิน) นอกจากข้อมูลบัตรแล้ว ลูกค้ายังต้องกรอกข้อมูลชื่อและที่อยู่ (Billing Information) และข้อมูลการติดต่อ (อีเมล์ และเบอร์โทร)

ดังนั้นผมจึงมาโฟกัสที่ตัว Omise เจ้าเดียวซึ่งมีจุดเด่นที่ เพราะสามารถนำ API มาทดสอบได้เร็ว ซึ่งต่างกับ PaysBuy ChaiyoPay และธนาคาร เพราะเราต้องยื่นเรื่องส่งเอกสารไปให้ผู้ให้บริการพิจารณาอยู่หลายวัน จึงจะได้ชุดคำสั่ง API มาใช้ implement กับระบบ และก็ไม่รู้ว่า API ที่ได้มานั้นสามารถตอบสนองความต้องการของเราได้เพียงพอหรือไม่

Omise กับการ Support นักพัฒนาได้ตรงจุด

อย่างที่กล่าวไปข้อดีของ Omise คือ การสนับสนุนนักพัฒนาแบบเต็มรูปแบบ คือ มีการให้ข้อมูล API ต่าง ๆ ที่ครบถ้วน และเปิดโอกาสให้ทดสอบรับชำระเงินได้ทันที ทำให้เราเห็นยอดเงินที่ถูกตัดจากบัตรมาเข้าระบบของ Omise (ตรงนี้ตื่นเต้นมาก เพราะเราเห็นกระบวนการทำงาน และผลลัพธ์ที่เกิดขึ้นจริงจากการทดสอบ)

จุดเด่นอีกอย่างหนึ่งของ Omise คือมี Library รองรับหลายภาษาที่นิยมในปัจจุบัน เรียกได้ว่านักพัฒนาถนัดภาษาไหนสามารถนำไป implement เพื่อรับชำระเงินได้เลยดังนี้

PHP Supports PHP versions 5.3+

Ruby Omise RubyGem supports Ruby 2.0+

Python Supports Python 2.6 <-> 3.3

NodeJS Tested with Node version 0.10.32+

Java Supports Java 1.6 and up.

.Net Supports .Net framework 2.0, 3.5, 4.0 or 4.5

GO Supports Go version 1.4+.

Android SDK Supports 2.2 (API Level 8) or above

iOS SDK For iOS development with examples

iOS Swift Library for Swift 2.0

Photo credit: Omise

นอกจากทดสอบได้รวดเร็วและ implement ได้หลายภาษาแล้ว Omise ยังมีระบบการจัดการธุรกรรมการเงินที่เกิดขึ้นให้เบ็ดเสร็จ โดย Omise จะมี Dashboard ให้เราสามารถดูยอดเงินที่ถูกชาร์จเข้ามาได้ รวมถึงสามารถคืนเงิน (Refund) ให้กับลูกค้าได้ นอกจากนี้ยังรองรับการถอนเงินเข้าหลายบัญชีได้พร้อมกัน โดยมีค่าธรรมเนียมในการถอนต่อครั้งอยู่ที่ 30 บาท

Token ความปลอดภัยที่ถูกใจผม

อย่างที่ผมเกริ่นไปในหัวข้อ “การจัดการข้อมูลบัตรเครดิต” ทำไรอย่างไรที่ระบบเราจะไม่ต้องเก็บข้อมูลบัตรเครดิตของลูกค้าให้ตกเป็นเป้าหมายโจมตีจากพวก Hacker และสามารถนำข้อมูลที่สามารถยืนยันเจ้าของบัตรมาใช้ได้ในเวลาที่ต้องการ ข้อมูลบัตรเครดิตที่เกี่ยวข้องกับ API ของ Omise มีดังนี้

หมายเลขบัตร 16 หลัก

ชื่อผู้ถือบัตร

เดือน และปีที่หมดอายุ

รหัส CVV

ข้อมูลทั้ง 4 จะถูกนำไปตรวจสอบ และเข้ารหัสด้วยอัลกอริทึมจาก API ดังกล่าวได้ผลลัพธ์เป็น Token ออกมา ซึ่ง API ของ Omise สามารถตรวจสอบและแจ้งเราได้ว่า ข้อมูลบัตรเครดิตที่ลูกค้ากรอกมาหมดอายุ หรือมีข้อมูลที่ไม่ตรงกับบัตรจริงหรือไม่ หมดห่วงเรื่องกรอกข้อมูลบัตรปลอมได้เลย

กลับมาที่ Token ครับ Token จะเป็นตัวแทนข้อมูลบัตรเครดิตของลูกค้า ซึ่งระบบเราจะเก็บเพียง Token เพื่อใช้ในกระบวนการตัดเงินจากบัตรครับ โดยการส่งจำนวนยอดเงิน และ Token ไปประมวลผลด้วย API ของ Omise ที่ถูกติดตั้งไว้ฝั่ง Server ของเราเอง เพื่อทำการตัดยอดเงินจากบัตรเครดิต นอกจากนี้ API ฝั่ง Server ของ Omise ยังมีข้อดีอีกอย่าง คือ สามารถเช็คได้ด้วยว่ายอดเงินในบัตรเพียงพอที่จะชำระค่าสินค้าและบริการหรือไม่

ข้อดีของการใช้ Token ก็คือแม้ Hacker จะแฮกระบบเรา แล้วได้ Token ไปแต่ก็ไม่สามารถนำไปใช้ทำอะไรได้ครับ ตรงนี้ถือเป็นอีกหนึ่งความปลอดภัยของการทำระบบที่เกี่ยวข้องกับการรับชำระเงินออนไลน์

เพิ่มเติม: Token ที่ถูกสร้างขึ้นมาจะมีอายุการใช้งานได้ถึง 7 วัน ประเด็นนี้ผมสอบถามไปยัง Omise โดยตรงเพราะกลัวว่า Token จะมีอายุเพียงไม่กี่ชั่วโมงเท่านั้น (เพราะมีโอกาสเกิดกรณีที่ลูกค้าสั่งซื้อสินค้าหรือบริการในช่วงที่ดึกมาก กว่าร้านค้าจะยืนยันก็อาจเป็นวันรุ่งขึ้นซึ่งกินเวลาไปหลายชั่วโมง)

สรุป

ในเมื่อการเชื่อมต่อระบบ Payment Gateway ระหว่างเรากับธนาคารเป็นเรื่องที่ไกลเกินเอื้อม (สำหรับสตาร์ทอัพทุนน้อย) ผมจึงพิจารณาเลือก Payment Gateway จากผู้ให้บริการ 3rd Party ซึ่งมีหลายเจ้าในไทย แต่ Omise ตอบโจทย์ผมได้มากที่สุด โดยเฉพาะการเปิดโอกาสให้นักพัฒนาได้ทดสอบระบบรับชำระเงินกับ API ของ Omise ได้อย่างรวดเร็ว และรองรับการนำไป implement ได้กับหลายภาษา

นอกจากนี้ Omise ยังมีเทคโนโลยีการตรวจสอบข้อมูลบัตรเครดิตที่แข็งแกร่ง และมี Token ซึ่งเป็นความปลอดภัยอีกขั้นหนึ่ง ทำให้ระบบที่เราพัฒนาไม่จำเป็นต้องเก็บข้อมูลบัตรเครดิตของลูกค้าไว้ เพราะ Token คือตัวแทนข้อมูลบัตรเครดิตที่ถูกเข้ารหัสไว้แล้วนั่นเอง

หมายเหตุ มีแก้ไขข้อมูลเพิ่มเติมเกี่ยวกับการชำระเงินของ Paypal ขอบพระคุณ คุณ Mike Sithiyavanich ที่ comment แจ้งเข้ามาด้วยครับผม