Online Direct Debit ใหม่
หัวข้อทั้งหมดในหน้านี้
เพิ่มช่องทางการรับชำระเงินผ่าน Direct Debit อำนวยความสะดวกให้ผู้ซื้อสามารถทำรายการผ่านบัญชีธนาคารชั้นนำทั่วประเทศ บริการ Direct Debit ช่วยให้ผู้ซื้อเชื่อมต่อบัญชีธนาคารเข้ากับเว็บไซต์หรือแอปพลิเคชันของคุณได้อย่างราบรื่น ผู้ซื้อสามารถทำรายการได้ง่ายเพียงเลือกบัญชีธนาคารที่ผูกไว้ก็สามารถชำระเงินได้ทันที
การเปิดรับชำระเงิน
- ประเทศที่รองรับ: ประเทศไทย
- API เวอร์ชันล่าสุดที่รองรับ:
2017-11-02
ร้านค้าที่ต้องการเปิดใช้ระบบ Online Direct Debit กรุณาส่งอีเมลมาที่ support@opn.ooo ทางทีมงานโอเพ่นจะส่งข้อกำหนดและเงื่อนไขการใช้บริการให้ร้านค้าได้พิจารณาและลงลายมือชื่อก่อนเปิดใช้งานจริง
ธนาคารที่รองรับ
ธนาคาร | Linked account type |
---|---|
ธนาคารกรุงศรี | direct_debit_bay |
ธนาคารกสิกรไทย | direct_debit_kbank |
ธนาคารกรุงไทย | direct_debit_ktb |
ธนาคารไทยพาณิชย์ | direct_debit_scb |
วงเงินการรับชำระ
ประเทศ | สกุลเงิน | จำนวนรับชำระขั้นต่ำ | จำนวนรับชำระสูงสุด |
---|---|---|---|
ไทย | THB |
2000 (THB 20) |
15000000 (THB 150,000) |
รายการรับชำระเงินผ่าน Direct Debit ไม่สามารถขอคืนเงินได้
ขั้นตอนการรับชำระเงิน
ในขั้นตอนแรก ผู้ซื้อจำเป็นต้องผูกบัญชีธนาคารเข้ากับระบบของร้านค้า โดยมีขั้นตอนต่อไปนี้
ลูกค้าเลือกธนาคารที่ต้องการผูกบัญชี
ระบบจะส่งลูกค้าไปยังเว็บไซต์หรือแอปพลิเคชันของธนาคารเพื่อยืนยันตัวตน
ลูกค้าเลือกบัญชีธนาคารที่ต้องการผูกกับแพลตฟอร์ม
ระบบแสดงรายละเอียดบัญชีธนาคารให้ลูกค้าตรวจสอบ
ลูกค้าให้ความยินยอม
ระบบจะส่งลูกค้ากลับไปยังเว็บไซต์หลังจากผูกบัญชีสำเร็จ
หลังจากนั้น ผู้ซื้อที่ต้องการชำระเงินสามารถเลือกบัญชีที่ผูกไว้ได้เลยโดยไม่ต้องยืนยันตัวตนซ้ำอีก
ลูกค้าเลือกชำระเงินด้วยการหักบัญชี
ลูกค้าเลือกธนาคารที่ต้องการ
ลูกค้าเลือกบัญชีธนาคารที่ผูกไว้กับแพลตฟอร์ม
ระบบแสดงหน้ายืนยันการชำระเงิน
การติดตั้งใช้งาน
ในการสร้างรายการรับชำระเงินผ่าน Direct Debit ให้ร้านค้าส่งคำสั่ง API ดังนี้
สร้าง linked account
ส่งผู้ซื้อไปยังตำแหน่งที่ระบุไว้ใน
registration_uri
รอรับ webhook event จาก linked account ที่สร้างไว้ หรือตรวจสอบสถานะรายการด้วยตนเอง
นำ linked account มาผูกกับ customer ที่สร้างใหม่ (หรือหากมี customer แล้วก็นำมาผูกได้เช่นกัน)
หลังจากนั้น ร้านค้าสามารถสร้าง charge ได้โดยใช้ customer ID และ linked account ID จากขั้นตอนก่อนหน้า
การสร้าง linked account
เมื่อผู้ซื้อเลือกผูกบัญชีธนาคารผ่านช่องทางนี้ ให้ร้านค้าสร้าง linked account โดยกำหนด type
และ return_uri
ชื่อ | ประเภท | คำอธิบาย |
---|---|---|
type |
string | (จำเป็น) ประเภท linked account (direct_debit_bay , direct_debit_kbank , direct_debit_ktb , direct_debit_scb ) |
return_uri |
string | (จำเป็น) ตำแหน่งบนเว็บไซต์ของร้านค้าที่ผู้ซื้อจะถูกส่งไปเมื่อลงทะเบียนสำเร็จ |
citizen_id |
string | (ไม่จำเป็น) บัตรประชาชนของผู้ซื้อ ธนาคารจะตรวจสอบข้อมูลนี้ก่อนการลงทะเบียนหากมีการระบุ สำหรับ direct_debit_ktb ร้านค้าจำเป็นต้องระบุค่านี้เข้ามาหากต้องการให้ผู้ซื้อลงทะเบียนผ่านแอปพลิเคชัน KTB NEXT |
ตัวอย่างด้านล่างนี้เป็นการสร้าง linked account สำหรับ direct_debit_kbank
ให้แทนค่า $OMISE_SECRET_KEY
ด้วย test secret key ของร้านค้าซึ่งสามารถคัดลอกได้จากแดชบอร์ด
curl https://api.omise.co/linked_accounts \
-u $OMISE_SECRET_KEY: \
-d "type=direct_debit_kbank" \
-d "return_uri=https://example.com/accounts/345678/complete"
{
"object": "linked_account",
"id": "lnac_test_5zr9wnoskjk6g0vpjd3",
"livemode": false,
"location": "/linked_accounts/lnac_test_5zr9wnoskjk6g0vpjd3",
"registration_uri": "http://test.omise.co/register?ref=lnac_test_5zr9wnoskjk6g0vpjd3",
"return_uri": "https://example.com/accounts/345678/complete",
"type": "direct_debit_kbank",
"status": "pending",
"last_digits": null,
"metadata": {},
"failure_code": null,
"failure_message": null,
"registered_at": null,
"expires_at": "2024-05-16T10:38:20Z",
"created_at": "2024-05-15T10:38:20Z"
}
ตัวแปร id
คือ linked account ID (เริ่มต้นด้วย lnac
)
การลงทะเบียนผ่าน linked account
เมื่อร้านค้าสร้าง linked account ขึ้นมาแล้ว จะพบว่าสถานะของรายการ (status
) จะแสดงเป็น pending
โดยสถานะของ linked account สามารถเป็นได้ทั้ง successful
, failed
, expired
และ deleted
ในขั้นตอนนี้ให้ร้านค้าส่งผู้ซื้อไปยังตำแหน่งที่ระบุไว้ใน registration_uri
เพื่อให้ผู้ซื้อสามารถดำเนินการลงทะเบียนได้
ร้านค้าสามารถจำลองขั้นตอนการลงทะเบียนในโหมดทดสอบ โดยเข้าไปที่ registration_uri
เพื่อปรับสถานะรายการเป็น สำเร็จ
(successful
) หรือ ไม่สำเร็จ
(failed
) ได้ด้วยตนเอง
หลังจากผู้ซื้อทำการลงทะเบียนเสร็จสิ้น ผู้ซื้อจะถูกส่งไปยังหน้าที่ร้านค้าระบุเป็น return_uri
เอาไว้
การรับ event แจ้งเตือนการลงทะเบียนสำเร็จ
ร้านค้าสามารถรับการแจ้งเตือนเมื่อผู้ซื้อลงทะเบียนเสร็จสิ้นโดยใช้งาน webhook events
ในการติดตั้งให้ร้านค้ากำหนดตำแหน่งบนเซิร์ฟเวอร์เพื่อรับ webhook events และเพิ่มตำแหน่งเดียวกันนี้เป็น webhook endpoint บนแดชบอร์ด
เมื่อผู้ซื้อลงทะเบียนเสร็จสิ้น ระบบจะส่ง POST request ไปยัง endpoint นี้ พร้อมทั้งแนบสถานะการตอบกลับของ linked account นั้นๆ ไปด้วย
ตัวแปรหลักหรือ key
สำหรับ event object ประกอบไปด้วย linked_account.complete
และตัวแปร data
ที่มี linked account object
อ่านเพิ่มเติมได้ที่ Events API
การตรวจสอบสถานะ linked account
เมื่อได้รับ event ของ linked account ที่เสร็จสิ้นแล้ว ร้านค้าสามารถตรวจสอบสถานะ linked account ผ่าน Linked Account API ผ่านตัวแปร id
โดยตรวจสอบว่า status
ของ linked account ดังกล่าวตรงกับ status
ที่ได้รับมาใน event หรือไม่
หากค่าของ status
เป็น successful
หมายความว่าการลงทะเบียนสำเร็จ
หากค่าของ status
เป็น failed
หมายความว่าการลงทะเบียนนั้นไม่สำเร็จ ร้านค้าสามารถตรวจสอบ failure_code
และ failure_message
ได้ใน linked account object เพื่ออ่านคำอธิบายเพิ่มเติม
สาเหตุขัดข้องที่อาจเกิดขึ้นได้มีดังนี้
รหัสข้อขัดข้อง | รายละเอียด |
---|---|
failed_processing |
ระบบทำรายการไม่สำเร็จ |
invalid_account |
ข้อมูลบัญชีของลูกค้าไม่ถูกต้องหรือไม่มีอยู่ในระบบธนาคาร |
registration_rejected |
รายการถูกปฏิเสธโดยธนาคาร |
rate_limit_exceeded |
มีการส่งคำขอมากเกินไปในช่วงเวลาที่กำหนด กรุณาลองอีกครั้ง |
การสร้าง customer
หลังจากได้รับ linked account ที่มีสถานะ (status
) เป็น successful
เรียบร้อยแล้ว ให้ร้านค้านำมาผูกกับ customer ก่อนที่จะใช้สร้างรายการรับชำระ โดยสามารถสร้าง customer ใหม่ หรือ แก้ไข customer เดิม ผ่านตัวแปร linked_account
โดยใช้ค่า linked account ID
customer หนึ่งรายการสามารถมี linked account ที่ผูกได้พร้อมกันหลายรายการ แต่ linked account หนึ่งรายการสามารถมี customer แค่หนึ่งรายการเท่านั้น
ตัวอย่างด้านล่างนี้เป็นการสร้าง customer ใหม่ ให้แทนค่า $OMISE_SECRET_KEY
ด้วย test secret key ของร้านค้าซึ่งสามารถคัดลอกได้จากแดชบอร์ด
curl https://api.omise.co/customers \
-u $OMISE_SECRET_KEY: \
-d "linked_account=$LINKED_ACCOUNT_ID"
{
"object": "customer",
"id": "cust_test_5zr9wnsj8za8bn31rur",
"livemode": false,
"location": "/customers/cust_test_5zr9wnsj8za8bn31rur",
"deleted": false,
"metadata": {},
"cards": {
"object": "list",
"data": [],
"limit": 20,
"offset": 0,
"total": 0,
"location": "/customers/cust_test_5zr9wnsj8za8bn31rur/cards",
"order": "chronological",
"from": "1970-01-01T00:00:00Z",
"to": "2024-05-15T10:38:20Z"
},
"default_card": null,
"linked_accounts": {
"object": "list",
"data": [
{
"object": "linked_account",
"id": "lnac_test_5zr9527qwb44ad4s9lw",
"livemode": false,
"location": "/linked_accounts/lnac_test_5zr9527qwb44ad4s9lw",
"registration_uri": "http://test.omise.co/register?ref=lnac_test_5zr9527qwb44ad4s9lw",
"return_uri": "https://omise.co",
"type": "direct_debit_kbank",
"status": "successful",
"last_digits": "7890",
"metadata": {},
"failure_code": null,
"failure_message": null,
"registered_at": "2024-05-15T09:20:00Z",
"expires_at": "2024-05-16T09:19:56Z",
"created_at": "2024-05-15T09:19:56Z"
}
],
"limit": 20,
"offset": 0,
"total": 1,
"location": "/customers/cust_test_5zr9wnsj8za8bn31rur/linked_accounts",
"order": "chronological",
"from": "1970-01-01T00:00:00Z",
"to": "2024-05-15T10:38:20Z"
},
"description": null,
"email": null,
"created_at": "2024-05-15T10:38:20Z"
}
ตัวแปร id
คือ customer ID (เริ่มต้นด้วย cust
)
การสร้างรายการรับชำระเงิน
สร้างรายการรับชำระเงินโดยระบุ amount
, currency
, customer
และ linked_account
ชื่อ | ประเภท | คำอธิบาย |
---|---|---|
amount |
integer | (จำเป็น) จำนวนเงิน (ดู วงเงินการรับชำระ) |
currency |
string | (จำเป็น) สกุลเงินตามมาตรฐาน ISO 4217 (THB ) |
customer |
string | (จำเป็น) customer ID ที่มี linked account ที่ลงทะเบียนสำเร็จแล้ว |
linked_account |
string | (จำเป็น) linked account ID ที่ลงทะเบียนสำเร็จแล้ว |
ตัวอย่างด้านล่างนี้เป็นการสร้างรายการรับชำระเงิน ให้แทนค่า $OMISE_SECRET_KEY
ด้วย test secret key ของร้านค้าซึ่งสามารถคัดลอกได้จากแดชบอร์ด
curl https://api.omise.co/charges \
-u $OMISE_SECRET_KEY: \
-d "amount=5000" \
-d "currency=THB" \
-d "customer=$CUSTOMER_ID" \
-d "linked_account=$LINKED_ACCOUNT_ID"
{
"object": "charge",
"id": "chrg_test_5zr9wnvxw05szpqkh9k",
"location": "/charges/chrg_test_5zr9wnvxw05szpqkh9k",
"amount": 5000,
"acquirer_reference_number": null,
"net": 4973,
"fee": 25,
"fee_vat": 2,
"interest": 0,
"interest_vat": 0,
"funding_amount": 5000,
"refunded_amount": 0,
"transaction_fees": {
"fee_flat": "0.0",
"fee_rate": "0.5",
"vat_rate": "7.0"
},
"platform_fee": {
"fixed": null,
"amount": null,
"percentage": null
},
"currency": "THB",
"funding_currency": "THB",
"ip": null,
"refunds": {
"object": "list",
"data": [],
"limit": 20,
"offset": 0,
"total": 0,
"location": "/charges/chrg_test_5zr9wnvxw05szpqkh9k/refunds",
"order": "chronological",
"from": "1970-01-01T00:00:00Z",
"to": "2024-05-15T10:38:22Z"
},
"link": null,
"description": null,
"metadata": {},
"card": null,
"source": null,
"schedule": null,
"linked_account": {
"object": "linked_account",
"id": "lnac_test_5zr9527qwb44ad4s9lw",
"livemode": false,
"location": "/linked_accounts/lnac_test_5zr9527qwb44ad4s9lw",
"registration_uri": "http://test.omise.co/register?ref=lnac_test_5zr9527qwb44ad4s9lw",
"return_uri": "https://omise.co",
"type": "direct_debit_kbank",
"status": "successful",
"last_digits": "7890",
"metadata": {},
"failure_code": null,
"failure_message": null,
"registered_at": "2024-05-15T09:20:00Z",
"expires_at": "2024-05-16T09:19:56Z",
"created_at": "2024-05-15T09:19:56Z"
},
"customer": "cust_test_5zr9nrqgambvlg9bn5y",
"dispute": null,
"transaction": "trxn_test_5zr9wo1aw1wrn49d346",
"failure_code": null,
"failure_message": null,
"status": "successful",
"authorize_uri": null,
"return_uri": null,
"created_at": "2024-05-15T10:38:21Z",
"paid_at": "2024-05-15T10:38:21Z",
"expires_at": "2024-05-22T10:38:21Z",
"expired_at": null,
"reversed_at": null,
"zero_interest_installments": false,
"branch": null,
"terminal": null,
"device": null,
"authorized": true,
"capturable": false,
"capture": true,
"disputable": false,
"livemode": false,
"refundable": false,
"partially_refundable": false,
"reversed": false,
"reversible": false,
"voided": false,
"paid": true,
"expired": false,
"can_perform_void": false,
"approval_code": null
}
สร้างรายการสำเร็จ
เมื่อร้านค้าสร้างรายการรับชำระเงินขึ้นมาแล้ว จะพบว่าสถานะของรายการแสดงเป็น successful
หากรายการสำเร็จ ทั้งนี้สถานะอื่นที่อาจเป็นได้ประกอบด้วย failed
และ pending
ในบางกรณีสถานะอาจเป็น pending
เนื่องจากความล่าช้าในการดำเนินการของธนาคาร โดยสถานะนี้จะเปลี่ยนเป็นสถานะที่ถูกต้องโดยอัตโนมัติในภายหลัง และระบบจะส่ง charge.complete
webhook ไปแจ้งร้านค้าในกรณีดังกล่าว
การรับ event แจ้งเตือนรายการสำเร็จ
ร้านค้าสามารถรับการแจ้งเตือนเมื่อมีการทำรายการเสร็จสิ้นโดยใช้งาน webhook events
ในการติดตั้งให้ร้านค้ากำหนดตำแหน่งบนเซิร์ฟเวอร์เพื่อรับ webhook events และเพิ่มตำแหน่งเดียวกันนี้เป็น webhook endpoint บนแดชบอร์ด
เมื่อมีรายการเสร็จสิ้น ระบบจะส่ง POST request ไปยัง endpoint นี้ พร้อมทั้งแนบสถานะการตอบกลับของรายการนั้นๆ ไปด้วย
ตัวแปรหลักหรือ key
สำหรับ event object ประกอบไปด้วย charge.complete
และตัวแปร data
ที่มี charge object
อ่านเพิ่มเติมได้ที่ Events API
การตรวจสอบสถานะรายการ
เมื่อได้รับ event ของรายการที่เสร็จสิ้นแล้ว ร้านค้าสามารถตรวจสอบสถานะรายการหรือ status
โดยใช้ Charge API
หากค่าของ charge.status
เป็น successful
หมายถึงว่ารายการรับชำระเงินสำเร็จ หากค่าของ charge.status
เป็น failed
รายการรับชำระเงินนั้นไม่สำเร็จ ร้านค้าสามารถตรวจสอบ failure_code
และ failure_message
ได้ใน charge object เพื่ออ่านคำอธิบายเพิ่มเติม
สาเหตุขัดข้องที่อาจเกิดขึ้นได้มีดังนี้
รหัสข้อขัดข้อง | รายละเอียด |
---|---|
failed_processing |
ระบบทำรายการไม่สำเร็จ |
invalid_account |
ไม่พบบัญชีที่สามารถชำระเงินผ่านช่องทางที่เลือก |
insufficient_fund |
วงเงินคงเหลือไม่เพียงพอหรือวงเงินเต็ม |
rate_limit_exceeded |
มีการสร้างรายการถี่เกินไป กรุณาลองอีกครั้ง |
การสร้างรายการรับชำระอัตโนมัติ
โดยส่วนใหญ่แล้วร้านค้าที่ใช้การรับชำระเงินผ่าน Direct Debit มักจะต้องการเรียกเก็บเงินจากบัญชีของลูกค้าที่ผูกไว้ตามระยะเวลาที่กำหนดด้วย โดยร้านค้าสามารถเรียกเก็บเงินตามระยะเวลาที่กำหนดได้โดยการสร้างรายการรับชำระเงินขึ้นมาใหม่ตามวันที่ที่กำหนดเอง หรือใช้ Charge Schedule API เพื่อสร้างรายการรับชำระอัตโนมัติ
อ่านคู่มือเกี่ยวกับ Charge Schedule API เพื่อดูตัวอย่างการสร้างรายการรับชำระอัตโนมัติ หรือดูตัวอย่างด้านล่างซึ่งเป็นวิธีการสร้างรายการรับชำระอัตโนมัติผ่าน Direct Debit ในวันที่ 1 ของทุกเดือน
curl https://api.omise.co/schedules \
-u $OMISE_SECRET_KEY: \
-d "every=1" \
-d "period=month" \
-d "on[days_of_month][]=1" \
-d "start_date=2025-01-01" \
-d "end_date=2025-12-31" \
-d "charge[amount]=5000" \
-d "charge[currency]=THB" \
-d "charge[customer]=$CUSTOMER_ID" \
-d "charge[linked_account]=$LINKED_ACCOUNT_ID"
{
"object": "schedule",
"id": "schd_test_60rjgvu1gnr8loh44l0",
"deleted": false,
"livemode": false,
"location": "/schedules/schd_test_60rjgvu1gnr8loh44l0",
"every": 1,
"occurrences": {
"object": "list",
"data": [],
"limit": 20,
"offset": 0,
"total": 0,
"location": "/schedules/schd_test_60rjgvu1gnr8loh44l0/occurrences",
"order": "chronological",
"from": "1970-01-01T00:00:00Z",
"to": "2024-08-16T03:54:32Z"
},
"on": {
"days_of_month": [
1
]
},
"in_words": "Every 1 month(s) on the 1st",
"period": "month",
"status": "running",
"active": true,
"state": "Active",
"charge": {
"object": "scheduled_charge",
"id": "rchg_test_60rjgvu0wxzapqjgvop",
"livemode": false,
"currency": "THB",
"amount": 5000,
"default_card": false,
"card": null,
"customer": "cust_test_60rjevagkj6dqq7zqz4",
"linked_account": "lnac_test_60rjesjp1hjn0hux6re",
"description": null,
"metadata": {},
"created_at": "2024-08-16T03:54:31Z"
},
"next_occurrences_on": [
"2025-01-01",
"2025-02-01",
"2025-03-01",
"2025-04-01",
"2025-05-01",
"2025-06-01",
"2025-07-01",
"2025-08-01",
"2025-09-01",
"2025-10-01",
"2025-11-01",
"2025-12-01"
],
"ended_at": null,
"start_on": "2025-01-01",
"end_on": "2025-12-31",
"created_at": "2024-08-16T03:54:31Z",
"deleted_by": null
}
การยกเลิกการใช้งาน linked account
เมื่อลูกค้าประสงค์จะยกเลิกการผูกบัญชีธนาคารออกจากร้านค้า ให้ร้านค้าทำการส่งคำขอลบ linked account มาที่ระบบ
โดยหลังจากที่ linked account ถูกลบแล้ว สถานะจะเปลี่ยนเป็น deleted
และร้านค้าจะไม่สามารถนำ linked account นั้นมาใช้สร้างรายการรับชำระเงินได้อีก
หมายเหตุ: การลบ customer จะไม่ทำให้ linked account ที่ผูกไว้ถูกลบไปด้วย
สำหรับธนาคารกรุงไทย ลูกค้าจำเป็นต้องติดต่อธนาคารหลังจากลบการผูกบัญชีออกจากแพลตฟอร์มของคุณแล้ว เพื่อยกเลิกการผูกบัญชีธนาคารให้เสร็จสมบูรณ์
curl https://api.omise.co/linked_accounts/$LINKED_ACCOUNT_ID \
-X DELETE \
-u $OMISE_SECRET_KEY:
{
"object": "linked_account",
"id": "lnac_test_5zrb4qbkn11ogwc221x",
"livemode": false,
"location": "/linked_accounts/lnac_test_5zrb4qbkn11ogwc221x",
"registration_uri": "http://test.omise.co/register?ref=lnac_test_5zrb4qbkn11ogwc221x",
"return_uri": "https://omise.co",
"type": "direct_debit_kbank",
"status": "deleted",
"last_digits": "7890",
"metadata": {},
"failure_code": null,
"failure_message": null,
"registered_at": "2024-05-15T12:43:37Z",
"expires_at": "2024-05-16T12:43:32Z",
"created_at": "2024-05-15T12:43:32Z"
}
API ที่เกี่ยวข้อง
วิธีการเข้าถึง public key และ secret key
สามารถอ่านการสร้างและเข้าถึง public key และ secret key ได้ที่นี่