สร้าง Payment Chatbot ด้วย SCB Open Banking API (Part 4 : ส่ง Push Message จาก Payment Confirmation)

Chanintorn Asavavichairoj
3 min readJul 16, 2019

หลังจากที่เราสร้าง Chatbot ที่สามารถ Generate Payment Deeplink เพื่อเข้าชำระเงินบน SCB EASY ได้แล้ว ในเบื้องต้นเราได้ Callback กลับมาจาก SCB EASY เพื่อกลับบ้านของเราได้ถูกต้องแล้ว แต่นั้นมันแค่ Client Side มันคงไม่ดีที่เราคงไม่เอาผลลัพท์จาก Client มาบอก Server เราหรอเน้อว่าผู้ใช้จ่ายเงินสำเร็จแล้ว เราต้องเชื่อจาก Source จริงๆจะดีกว่า ซึ่งนั่นก้อไม่ได้เป็นปัญหาเลยเพราะ SCB Open Banking API ได้เตรียมไว้ให้เหล่าพัฒนาทุกท่านแล้วตามไปดูกันเลยย ..

แอบส่องหน้าตาของ Payment Confirmation

ก่อนอื่นเลยเราต้องไปบอก Endpoint ของเราให้ SCB รับรู้กันก่อนว่า โดยเข้าไปที่ SCB Developer Portal ในส่วนของ Merchant Profile แล้วใส่ Endpoint ของเรา (API รับเป็น HTTP POST นะครับ) เข้าไปใน “Payment Confirmation Endpoint” ดังนี้

ทีนี้เวลาที่เราทำรายการไม่จำกัดว่าเฉพาะว่าจ่ายด้วย Payment Deeplink ผ่าน SCB EASY เท่านั้นนะครับ ตามเอกสารบอกว่าไม่ว่า QR Payment จากแอพของธนาคารเจ้าอื่นๆมาก้อตามเราก้อจะได้เจ้าสิ่งนี้ด้วย..คุณพระ! มา มา เรามาดูหน้าตาของ Payload กันต่อก่อนดีกว่าว่ามีความจิ้มลิ้มน่ารักน่าชังยังไง เมื่อผู้ใช้งานทำรายการชำระเงินให้ Merchant Profile ที่เราได้สร้างขึ้นผ่าน SCB Payment API แล้วเราจะได้เจ้าสิ่งนี้กลับมาบอกเรา (อันนี้เป็นการทำรายการชำระแบบ Payment Deeplink นะครับ ถ้าเป็น QR หลากหลายรูปแบบไม่ว่าจะเป็น Card Scheme หรือ E-Wallet จะได้หน้าตา Payload ที่อาจจะต่างจากนี้นิดหน่อย) ..

{
"payeeProxyId": "762342992129431",
"payeeProxyType": "BILLERID",
"payeeAccountNumber": "0987654321",
"payeeName": "Sandbox",
"payerProxyId": "0812345678",
"payerProxyType": "MSISDN",
"payerAccountNumber": "0123456789",
"payerName": "Susirinee Nucheck",
"sendingBankCode": "014",
"receivingBankCode": "014",
"amount": 100,
"transactionId": "201907169lbqgPbt1Bl3oiA",
"transactionDateandTime": "2019-07-16T11:30:58+07:00",
"billPaymentRef1": "53729086453",
"billPaymentRef3": "PTF",
"currencyCode": "764"
}

มาแกะกันหน่อยว่ามีไรน่าสนใจให้ช๊อปปิ้งเอาไปใช้ได้บ้าง
- transactionId, transactionDateandTime เริ่มจาก Transaction Id ของรายการที่ทำและวันที่ทำรายการ
- payeeName, payeeAccountNumber ชื่อและเบอร์บัญชีของผู้รับเงิน
- payerName, payerAccountNumber ชื่อและเบอร์บัญชีของผู้จ่ายเงิน
- amount, currencyCode จำนวนเงินที่ชำระ และสกุลเงิน (CurrencyCode 764 คือ THB)
- billPaymentRef1, billPaymentRef3 มีส่ง Ref1 และ Ref3 กลับมาให้ ทำไมไม่เห็น Ref2 หว่าา ตอนทำรายการส่งไปนะ (ขอไป find out มาก่อนนะฮ่ะไม่รู้เหมือนกัล)
- sendingBankCode, receivingBankCode รหัสธนาคารที่ชำระเงินเข้ามาและรหัสธนาคารที่รับเงิน (BankCode 014 คือ ธนาคารไทยพาณิชย์)

สำหรับรหัสต่างๆไม่ว่าจะเป็น Currency Code และรหัสธนาคารสามารถอ้างอิงได้จากธนาคารแห่งประเทศไทย ตามลิงค์นี้เลยนะครัช https://www.bot.or.th/Thai/Statistics/DataManagementSystem/Standard/StandardCode/Pages/default.aspx

ส่ง Push Message ไปหาผู้ใช้งานผ่าน LINE Messaging API

เมื่อเราได้ Payment Confirmation จาก SCB กลับมาแล้วเราก้อส่งไปบอกผู้ใช้งานหน่อยผ่าน LINE Messaging API กันหน่อยดีไหมครับ มา!

app.post('/scb/payment/confirm', async (req, res) => {
const body = get(req, ['body']);
const transaction = getTransaction(body.billPaymentRef1);
if (transactionId != null) {
const destination = transaction.getLineDestination();
const responseMessage = paymentCompleteTemplate(body);
lineClient.pushMessage(destination, responseMessage);
}
res.send('');
});

เนื่องจากว่าตอนที่เราสร้าง Payment Deeplink มานั้นผมได้สร้าง Object Transaction เอาไว้โดย Generate Transaction Id (เป็นตัวเลขเพราะ Ref1 เป็นได้แค่ Number เท่านั้น) แล้วก้อเก็บ Transaction Info ต่างๆเอาไว้ใน Redis รวมไปถึง LINE UserId หรือถ้าเป็น Group ก้อ GroupId/RoomId เอาไว้ แล้วก้อเอา TransactionId นี่แหละเป็น Ref1 เพื่อไว้มา Reference กลับว่าจะส่ง Confirm ให้ใคร (function getLineDestination)

จากนั้นก้อสร้าง Flex Message เอาไว้เพื่อเอา Payload ของ Payment Confimation ไปหยอดลงตาม Fields ที่เตรียมไว้ต่างๆ และ Push Message ด้วย NodeJS SDK ของ LINE

เรียบร้อยแล้ววว จากนั้นเมื่อผู้ใช้งานทำรายการชำระเงินผมก้อจะได้ Flex Message ที่เตรียมไว้แบบเน่นั่นเองงงง

เป็นอย่างไรครับจะเห็นว่า SCB Payment API สามารถนำมาใช้งานได้ตอบโจทย์กับ Usecase ต่างๆมากมาย หนึ่งในนั้นที่ผมลองมาเล่นดูคือมาทำ Payment Chatbot ที่ถ้าเป็นแม่ค้าออนไลน์ หรือธุรกิจของท่านใดต้องใช้งานเรื่องการจ่ายเงินชำระเงินที่ต้องการช่องทางชำระเงินที่ง่ายและปลอดภัย การใช้ API จาก SCB จะเข้ามาช่วยและทำให้มี User Jouney ที่ครบถ้วนสมบูรณ์มากขึ้น เรียกได้ว่า SCB Open Banking API ออกไปน่าจะตอบโจทย์ให้ทุกๆท่านได้เป็นอย่างดี ไปลองเล่นกันดูครับ สวัสดี :)

หากใครมีข้อสงสัย อยากสอบถาม หรือมาแลกเปลี่ยนความคิดเห็นทักกันมาได้นะฮ่ะที่ https://m.me/chanintorn

Payment Chatbot with SCB Open Banking API Series

--

--