สร้าง Payment Chatbot ด้วย SCB Open Banking API (Part 1 : มาส่อง API ของธนาคารไทยพาณิชย์ไปพร้อมกัน)
หลังจากที่ธนาคารไทยพาณิชย์ได้เปิดตัว Open API ให้เหล่านักพัฒนาได้มีโอกาสทดลองเขียนโปรแกรมเพื่อสร้าง Usecase ต่างๆนั้น นับเป็นนิมิตรหมายอันดี ที่วันนี้เราจะสามารถสร้างแอพลิเคชั่นต่างๆโดยมี Ecosystem ของธนาคารให้ Integrate กันได้อย่างง่ายดาย ซึ่งทาง SCB ก้อได้เตรียม Sandbox ไว้ให้เราได้ไปทดลองเล่นกันอีกด้วยยย .. วันนี้เรามาเริ่มต้นกันด้วยการพากันไปรู้จัก SCB Open Banking API กันก่อนดีกว่าครับว่ามันมีอะไรให้เราได้เล่นกันบ้าง ..
Authentication
เริ่มแรกเลย เราสามารถที่จะ Verify ว่าลูกค้าธนาคารไทยพาณิชย์ผ่านแอพลิเคชั่น SCB EASY ผ่านมาตราฐาน OAuth 2.0 แบบ Authorization Code Grant Type (3-Legged) อีกด้วย หรือพูดง่ายๆเหมือน Facebook API เลยจร้า
Customer Information
เป็น API ที่ช่วยแชร์ข้อมูลของลูกค้าไม่ว่าจะเป็นชื่อ-นามสกุล หรืออื่นๆจากฐานข้อมูลของธนาคาร ซึ่งหากระบบที่ต้องการข้อมูลจากธนาคารอยู่แล้วจะทำให้การ On-Board ลูกค้าง่ายขึ้นไปอีกเพราะเป็นข้อมูลที่มาจากธนาคารโดยตรง
Payment
ในส่วนของ Payment สามารถทำได้หลายหลายรูปแบบเลยทีเดียว ไปดูกัลล ..
- Thai QR Code Standard เราสามารถสร้าง QR Code มาตราฐานที่สามารถใช้แอพธนาคารต่างๆเพื่อชำระเงินได้ตามปกติ ซึ่งรองรับทั้ง Thai QR30 และ Creditcard Scheme อีกด้วยนะฮ่ะ
- E-Wallet QR Code ที่รองรับทั้ง Alipay และ WeChat
- Payment Deeplink ผ่าน SCB EASY เรายังสามารถขอ Deeplink Schema จาก Open API นี้เพื่อทำการชำระเงินผ่านแอพลิเคชั่น SCB EASY อีกด้วย แบบสร้าง Link จากแอพลิเคชั่นเราแล้ว Seamless ไปยังแอพของธนาคารไทยพาณิชย์กันเลยทีเดียว
นอกจากนี้ในส่วนของ Payment API ยังมีขา Comfirmation ที่พวกเราจะได้รับ Event เมื่อลูกค้ามีการจ่ายผ่านช่องทางทั้งสามอย่างข้างบนอีกด้วยยย เท่ห์ป่ะหล่าา :)
Slip Verification
ปัญหาของ Slip ปลอมจะหมดไปเพราะเราสามารถนำ Slip ที่ได้มาจากผู้ชำระเงินตรวจสอบผ่าน API นี้กันได้เลยจร้าา
Loan Origination
เราสามารถที่จะสร้างแอพลิเคชั่นเพื่อคำนวนดอกเบี้ยผ่านการกู้เงินต่างๆผ่าน API จากธนาคาร ทำให้มีความถูกต้องแม่นยำไปอีก รวมไปถึงส่งขอกู้/ส่งเอกสารไปได้กันเลยทีเดียว
รู้จักกันไปเบื้องต้นแล้วเราไปลองเล่นกันเลยดีกว่า
ว่าแล้ววว .. ไปเล่นกัลลลล อันดับแรกเข้าไปที่ https://developer.scb เลยครัช (โดเมนเท่ห์มากกก ใช้ Top Level Domain ไม่ธรรมดาจริมๆ) เข้าแล้ว Signup ไปโดยพลัน ฟรีจร้า ไม่คิดมาก
โดยที่หลังจากที่เราสมัครกันไปแล้วเราจะสามารถสร้างแอพลิเคชั่นเพื่อทดลองเล่นบน Sandbox Environment โดยที่เราสามารถสร้างได้สองอันขาดตัว เมื่อสร้างขึ้นมาแล้วเราจะได้ API Key และ API Secret ตามนี้ เก็บให้ดีนะอย่าแบ่งให้ใครของใครของมันนะจ๊ะ
ในส่วนของ Tools เราขี้เกียจก้อสามารถจิ้มทดลองขอ Token เล่นๆได้จากที่นี่เลยฮ่ะ
นอกไปจากนี้สิ่งที่สำคัญเลยที่เราขาดไม่ได้คือแอพ SCB EASY ที่ไม่ใช่ SCB EASY ธรรมดา แต่มันคือ SCB EASY เวอร์ชั่น Sandbox ซึ่งในเวบบอกให้ไปโหลดตามลิงค์ด้านล่างนี้เลยจ๊าา
- สำหรับ iOS ทางนี้ .. https://appdistribution.firebase.dev/i/f3a1ac16e87ff84c
- ชาว Android เชิญทางนี้ .. https://appdistribution.firebase.dev/i/SLfgUXxW
(Update link as of 29 March 2023)
ไม่ต้องตกใจกลัวว่าแอพปลอมนะครัช ของแท้แน่นอนอันนี้ Distribute ผ่าน Firebase เท่านั้นเองครับ
ไปต่อกัลลล .. หลังจากที่เราได้แอพมาแล้วอย่ารอช้าฮ่ะ เค้า Login บนแอพ Sandbox กันแบบ QR เพียงแค่เราเข้าไปที่ SCB Developer Portal แล้วเข้าเลือก ‘Simulator login with QR code’ ซึ่งจะมีปุ่มให้เรา Generate QR ขึ้นมา จากนั้นเราใช้แอพส่องได้เบยย
SCB ยังได้เตรียม Mock data สำหรับในส่วนของ Customer Profile ไว้ให้ด้วย ซึ่งหากเราใช้ SCB EASY (Sandbox) นี้ทำการชำระเงิน เราสามารถที่จะเป็นใครก้อได้ที่อยู่ใน Customer Profile ที่ Mock ไว้ — จำ PIN ไว้ซักคนนึงแล้วเตรียมเอาไว้ไปใช้เล่นกันได้เลย
มาถึงจุดนี้เรียกว่าเราน่าจะได้ของครบแล้วหล่ะครัช เตรียมตัวไปเล่น API กันต่อเลย ..
สร้าง Deeplink ไว้ชำระเงินเล่นๆกันดีกว่า
หนึ่งใน API คูลๆจาก SCB อันนึงเลยคือ การสร้างลิงค์สำหรับชำระเงินผ่าน SCB EASY หรือที่เราเรียกกันว่า Deeplink สำหรับ API นี้ที่ทาง SCB เตรียมไว้ให้เราลองเล่นจะเป็นการชำระผ่านผู้ขาย (Merchant) ซึ่งทาง SCB Sandbox ก้อได้เตรียมข้อมูลในส่วนของ Merchant ไว้ให้เราเรียบร้อยแล้ว เพียงแค่เราบอกปลายทางว่าให้โอนเงินมาที่ Merchant Biller ID อะไร ยอดเท่าไร เท่านั้นเราก้อจะได้ Deeplink เก๋ๆมาให้วืบๆไปมาระหว่างแอพกันหล่ะ ไปดูกัลลล ..
ในการเรียก API นี้เราจำเป็นที่จะต้องขอ Access Token จากทาง SCB ก่อนเพื่อนำ Token ที่ได้ไปเรียก API สำหรับการ Generate Payment Deeplink โดยที่ประเภทของ Token ที่ต้องการคือ Token แบบ OAuth Client Credentials Grant Type (2-Legged) นั่นเอง สำหรับใครที่งงๆว่าอ่าววแล้วเราจะรู้ได้ไงว่าต้องใช้ Token แบบไหน อันดับแรกเลยให้อ่าน Document ของ SCB เป็นหลักครับ หรือถ้าใช้ Common Sense เลยคือถ้าเป็น API ที่ไม่ได้ผูกเฉพาะเจาะจงลูกค้าแบบขอข้อมูลลูกค้าคนนั้นๆอ่า ใช้แบบ Client Credentials Grant Type (2-Legged) ก้อพอ เพราะ OAuth แบบนี้ถูก Design มาเพื่อ Server-to-Server แต่ทางที่ดีอ่านด๊อกดีกว่าฮ่ะ
ส่วนใครที่ยังขี้เกียดดู API การขอ Access Token ก้อสามารถกด Generate จาก Tools มาใช้กันก่อนได้นะฮ่ะ มาดู Flow (Sequence Diagram) ตามที่ SCB ให้ไว้กันเถอะครับ ก้อจะประมาณนี้เน้อ
เมื่อเรามีข้อมูลทุกอย่างครบถ้วน ก้อยิงกันเถอะครัช ร่ายมายาวมากละ
สำหรับตัว API นี้นะครับก้อจะมี Endpoint ตามนี้ครับ
POST /partners/sandbox/v2/deeplink/transactionsHeaders
- Content-type : application/json
- Authorization : <อันนี้ใส่ Bearer ตามด้วย Token ที่ได้มาตอนขอ Access Token>
- ResourceOwnerId : <อันนี้ให้เราใส่ API KEY ที่ได้มาครับ>
- RequestUId : <Generate UUID ซักตัวส่งไปครับ>
- Channel : scbeasy (อันนี้ Fixed ไปเลย)Payload
{
"paymentAmount": <ยอดที่ต้องชำระ>,
"transactionType": "PAYMENT",
"transactionSubType": "BPA",
"ref1": "<Field เพื่อ Reference เป็นตัวเลขเท่านั้น>",
"ref2": "<Field เพื่อ Reference เป็นตัวเลขเท่านั้น>",
"ref3": "<Field เพื่อ Reference ใส่ว่า SCB ก้อได้>",
"accountTo": "<ใส่ Merchant Biller ID>"
}
หลังจากที่เรายิงแล้วก้อจะได้ Deeplink หน้าตาออกมาประมานนี้นาจาาา
มีอัพเดตมานิดนึงครับ (ข้อมูลเดืิอนกันยายน 2562) เส้น Payment Deeplink ของ SCB Open API ได้เพิ่ม Version ใหม่เป็นเส้น V3 ครับ ซึ่งรายละเอียดตามนี้
POST /partners/sandbox/v3/deeplink/transactionsHeaders
- Content-type : application/json
- Authorization : <อันนี้ใส่ Bearer ตามด้วย Token ที่ได้มาตอนขอ Access Token>
- ResourceOwnerId : <อันนี้ให้เราใส่ API KEY ที่ได้มาครับ>
- RequestUId : <Generate UUID ซักตัวส่งไปครับ>
- Channel : scbeasy (อันนี้ Fixed ไปเลย)Payload
{
"transactionType": "PURCHASE",
"transactionSubType": ["BP", "CCFA"], (รองรับพร้อมกัน)
"billPayment": {
"paymentAmount": <ยอดที่ต้องชำระ>,
"accountTo": "<ใส่ Merchant Biller ID>",
"ref1": "<Field เพื่อ Reference เป็นตัวเลขเท่านั้น>",
"ref2": "<Field เพื่อ Reference เป็นตัวเลขเท่านั้น>",
"ref3": "<Field เพื่อ Reference ใส่ว่า SCB ก้อได้>"
},
"creditCardFullAmount": {
"merchantId": "<ใส่ Merchant ID ที่ได้จาก ในหน้า Merchant>",
"terminalId": "<ใส่ Terminal ID ที่ได้จาก ในหน้า Merchant>",
"orderReference": "<Field เพื่อ Reference Order นั้นๆ>",
"paymentAmount": <ยอดที่ต้องชำระ>
}
}
จะเห็นว่าเหมือนเดิมเลยครับ แค่ตัว Payload เพิ่มความสามารถจากแต่เดิมที่เป็นแค่ชำระแบบ Bill Pay (BP) ตอนนี้รองรับการชำระด้วยบัตรเครดิต (CCFA) และอาจมีการรองรับการผ่อนจ่ายผ่านบัตรเครดิตในอนาคตได้อีกด้วยยย
ทีนี้เราก้อสามารถที่จะนำ Deeplink นี้ไปเปิดให้ลูกค้าเข้า SCB EASY เพื่อจ่ายตังค์ได้แว้วววว (คำเตือน Deeplink ที่ได้มานี้สามารถเปิดได้ก้อต่อเมื่อลูกค้ามีแอพติดตั้งในเครื่องนะครัช ถ้าไม่มีก้อจะแป๊กนะครัช ดังนั้นทางที่ดีเราควรที่จะสร้างเพจตัวนึงที่ใช้ Javascript ในการตรวจสอบว่าลูกค้ามีแอพหรือเปล่าถ้าไม่มีก้อพาไป Download ที่ AppStore/PlayStore กันไรประมาณนี้อ่าา)
นอกจากนี้เมื่อไรได้ Payment Deeplink จาก API มาแล้วเรายังสามารถที่จะใส่ Parameter ‘callback_url’ เพิ่มเติมเพื่อให้หลังจากชำระเงินจาก SCB EASY เสร็จก้อกลับบ้านกลับช่องได้ถูกต้องได้อีกด้วย อาทิเช่น
scbeasysim://billpayment-anonymous/d98d50df-a69f-4ba9–8fd8-bac0514565cc?callback_url=partnerapp://payment-result
เมื่อมีการ Deeplink กลับมาแล้วเราจะได้ Query String status ด้วยค่า success หรือ failed ต่อท้ายเพื่อบอกว่าสำเร็จหรือไม่สำเร็จอีกด้วย เช่น
partnerapp://payment-result?status=success
ซึ่งจริงๆแล้ว Callback นี้เป็น Callback ระหว่าง Client เท่านั้น ทาง SCB ยังไม่ API สำหรับ Notify กลับไปบอก Server เราอีกด้วยโดยไม่ผ่าน Client ซึ่งตอนต่อๆไปเราจะพาไปรู้จักกันอีกที ..
ทั้งหมดนี้เป็น Environment Sandbox ที่ทาง SCB ได้เตรียมไว้ให้ ซึ่งหากนักพัฒนาคนไหนสนใจใช้จริงขึ้นมาก้อสามารถติดต่อทาง SCB ได้เลยครับ โดย API ทั้งหมดนี้เป็น API เดียวกัน สามารถนำโปรแกรมที่เราเขียนต่อกับ Sandbox ขึ้นพร้อมใช้งานทั้นทีเลยทีเดียว
สำหรับ Part นี้เราก้อได้เรียนรู้ไปถึงการสร้าง Payment Deeplink จาก SCB Open API กันไปแล้ว ตอนต่อไปเราจะเอาสิ่งที่ได้ทั้งหมดนี้ไปประกอบกันใน Chatbot ของเรากันดูครับ ติดตามตอนต่อไปกันเลยยยย ..