ผ่อนชำระ

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

บัตรที่รองรับการผ่อนชำระ

บัตรเครดิต Source type ระยะเวลาผ่อนชำระ (เดือน) installment_term ขั้นต่ำต่อเดือน (บาท)
ธนาคารกรุงศรี installment_bay 3, 4, 6, 9, 10 500
ธนาคารกรุงเทพ installment_bbl 4, 6, 8, 9, 10 500
กรุงศรีเฟิร์สช้อยส์ installment_first_choice 3, 4, 6, 9, 10, 12, 18, 24, 36 300
ธนาคารกสิกร installment_kbank 3, 4, 6, 10 300
ธนาคารกรุงไทย installment_ktc 3, 4, 5, 6, 7, 8, 9, 10 300

การเปิดรับชำระเงิน

  • ประเทศที่รองรับ: ประเทศไทย
  • API เวอร์ชันล่าสุดที่รองรับ: 2017-11-02

ร้านค้าที่ต้องการเปิดใช้ระบบ ผ่อนชำระ กรุณาส่งอีเมลมาที่ support@omise.co ทางทีมงานโอมิเซะจะส่งข้อกำหนดและเงื่อนไขการใช้บริการให้ร้านค้าได้พิจารณาและลงลายมือชื่อก่อนเปิดใช้งานจริง

ขั้นตอนการชำระเงินผ่านระบบผ่อนชำระ

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

installment 1

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

Installment 2

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

การตั้งค่าผู้รับภาระดอกเบี้ย

ฝ่ายใดฝ่ายหนึ่งระหว่างร้านค้ากับผู้ซื้อจะต้องเป็นผู้รับภาระดอกเบี้ยสำหรับรายการแบบผ่อนชำระ กรณีที่เป็นการผ่อนชำระแบบ 0% แปลว่าร้านค้าเป็นผู้รับภาระดอกเบี้ยแทนผู้ซื้อ

การตั้งค่าพื้นฐาน

ร้านค้าสามารถตั้งค่าให้ฝ่ายร้านค้าหรือฝ่ายผู้ซื้อเป็นผู้รับภาระดอกเบี้ยได้จากแดชบอร์ด และสามารถปรับเปลี่ยนได้ตามรายการ

Setting Zero Interest Installments

การตั้งค่าตามรายการ

ร้านค้าสามารถปรับแปลี่ยนการตั้งค่าของผู้รับภาระดอกเบี้ยในรายการผ่อนชำระได้โดยการส่ง boolean parameter zero_interest_installments ในทั้ง source และ การสร้าง charge

เมื่อตั้งค่าเป็น true ฝ่ายร้านค้าจะเป็นผู้รับภาระดอกเบี้ย ในทางกลับกัน ถ้าตั้งค่าเป็น false ผู้ซื้อจะเป็นผู้รับภาระดอกเบี้ย หากการตั้งค่าไม่ได้มีการปรับเปลี่ยนระบบจะใช้ผู้รับภาระดั้งเดิมในการรับภาระดอกเบี้ย ค่าของตัวแปรใน source และ การสร้าง charge จะต้องมีค่าตรงกัน

ในกรณีที่มีการ charge จาก source โดยตรง ให้ส่ง parameter นี้ตั้งแต่การสร้าง charge

การติดตั้งใช้งาน

การรับชำระเงินผ่าน ผ่อนชำระ ฝั่งร้านค้าจะต้องมีการสร้างรายการโดยใช้ API requests 3 อย่างด้วยกัน

  1. การสร้าง payment source (type: installment_bay, installment_bbl, installment_first_choice, installment_kbank, หรือ installment_ktc) โดยใช้ Omise.js, omise-ios หรือ omise-android
  2. การสร้าง charge โดยใช้ source จากขั้นตอนแรก
  3. เมื่อได้รับ webhook event กลับมาหลังจากทำรายการสำเร็จหรือ charge.complete แล้ว โอมิเซะแนะนำให้ตรวจสอบสถานะด้วยตนเองเพื่อความแม่นยำ

การสร้าง source เพื่อรับชำระผ่าน ผ่อนชำระ จะเกิดขึ้นในฝั่งของผู้ซื้อ (Client-side) เช่น บนเว็บไซต์หรือโทรศัพท์มือถือของผู้ซื้อ โดยจะต้องใช้ public key

ส่วนการสร้างรายการหรือ charge เพื่อรับชำระผ่าน ผ่อนชำระ จะเกิดขึ้นในฝั่งของร้านค้า (Server-side) โดยจะต้องใช้ secret key ทางโอมิเซะแนะนำให้ใช้ Omise.js หรือ ไลบรารี่ เพื่อติดตั้ง source ในฝั่งผู้ซื้อ (Client-side)

หมายเหตุ: หากมีความจำเป็นที่ต้องสร้างทั้งรายการและ source ในฝั่งร้านค้า (Server-side) สามารถใช้ Charge API ในการสร้างทั้งรายการและ source ได้ภายใต้ single API request (ไม่แนะนำ)

การสร้าง Source

การรับชำระเงินผ่านระบบ ผ่อนชำระ ระจะต้องมีการสร้าง source ผ่าน source API เมื่อผู้ซื้อยืนยันรายการ ร้านค้าจะต้องสร้าง source โดยกำหนด type, amount, currency, และ installment_term

ตัวอย่างด้านล่างนี้เป็นการสร้าง source สำหรับรายการ ผ่อนชำระ ระจำนวน ฿4,000

ให้แทนค่าของ omise_public_key และ $OMISE_PUBLIC_KEY ด้วย test public key ของร้านค้าซึ่งสามารถคัดลอกได้จากแดชบอร์ด: https://dashboard.omise.co/test/keys

หากใช้ Omise.js parameter type เป็นตัวแปรที่จำเป็นของฟังก์ชัน createSource

Omise.setPublicKey(omise_public_key);

Omise.createSource('installment_kbank', {
  "amount": 400000,
  "currency": "THB",
  "installment_term": 4
}, function(statusCode, response) {
  console.log(response)
});

ถ้าร้านค้าต้องการทดสอบ ให้สร้าง request โดยใช้ curl

curl https://api.omise.co/sources \
  -u $OMISE_PUBLIC_KEY: \
  -d "amount=400000" \
  -d "currency=THB" \
  -d "type=installment_kbank" \
  -d "installment_term=4"
{
  "object": "source",
  "id": "src_test_5irts7143rvq9y8v2e1",
  "livemode": false,
  "location": "/sources/src_test_5irts7143rvq9y8v2e1",
  "created_at": "2020-02-03T03:59:21Z",
  "type": "installment_kbank",
  "flow": "redirect",
  "amount": 400000,
  "currency": "THB",
  "mobile_number": null,
  "phone_number": null,
  "references": null,
  "name": null,
  "email": null,
  "barcode": null,
  "store_id": null,
  "store_name": null,
  "terminal_id": null,
  "installment_term": 4,
  "zero_interest_installments": true,
  "scannable_code": null
}

การสร้างรายการรับชำระ

สร้างรายการรับชำระเงินโดยระบุ parameter return_uri, source, amount และ currency

  • return_uri จะเป็นตัวกำหนดตำแหน่งบนเว็บไซต์ของร้านค้าที่ผู้ซื้อจะถูกโอนกลับมาเมื่อได้ทำการยืนยันรายการสำเร็จ
  • source จะเป็นตัวกำหนด source identifier
  • amount และ currency จะต้องมีค่าตรงกับ amount และ currency ของ source

ตัวอย่างด้านล่างนี้จะแสดงการสร้างรายการโดยใช้ curl โดยให้แทน $OMISE_SECRET_KEY ด้วย test secret key ของร้านค้าซึ่งหาได้จากแดชบอร์ด และให้แทน $SOURCE_ID ด้วย id ของ source

curl https://api.omise.co/charges \
  -u $OMISE_SECRET_KEY: \
  -d "source=$SOURCE_ID" \
  -d "amount=400000" \
  -d "currency=THB" \
  -d "return_uri=https://example.com/orders/345678/complete"
{
  "object": "charge",
  "id": "chrg_test_5irts73hta41l15mljc",
  "livemode": false,
  "location": "/charges/chrg_test_5irts73hta41l15mljc",
  "created_at": "2020-02-03T03:59:21Z",
  "amount": 400000,
  "currency": "THB",
  "funding_amount": 400000,
  "funding_currency": "THB",
  "fee": 14600,
  "fee_vat": 1022,
  "interest": 10400,
  "interest_vat": 728,
  "net": 373250,
  "description": null,
  "metadata": {},
  "status": "pending",
  "capture": true,
  "authorized": false,
  "schedule": null,
  "reversed": false,
  "reversed_at": null,
  "expires_at": "2020-02-10T03:59:21Z",
  "expired": false,
  "expired_at": null,
  "voided": false,
  "paid": false,
  "paid_at": null,
  "transaction": null,
  "refunded_amount": 0,
  "refunds": {
    "object": "list",
    "from": "1970-01-01T00:00:00Z",
    "to": "2020-02-03T03:59:22Z",
    "offset": 0,
    "limit": 20,
    "total": 0,
    "order": "chronological",
    "location": "/charges/chrg_test_5irts73hta41l15mljc/refunds",
    "data": []
  },
  "link": null,
  "return_uri": "https://example.com/orders/345678/complete",
  "failure_code": null,
  "failure_message": null,
  "card": null,
  "customer": null,
  "ip": null,
  "dispute": null,
  "source": {
    "object": "source",
    "id": "src_test_5irts6u5e6zywlvqhky",
    "livemode": false,
    "location": "/sources/src_test_5irts6u5e6zywlvqhky",
    "created_at": "2020-02-03T03:59:20Z",
    "type": "installment_kbank",
    "flow": "redirect",
    "amount": 400000,
    "currency": "THB",
    "mobile_number": null,
    "phone_number": null,
    "references": null,
    "name": null,
    "email": null,
    "barcode": null,
    "store_id": null,
    "store_name": null,
    "terminal_id": null,
    "installment_term": 4,
    "zero_interest_installments": true,
    "scannable_code": null
  },
  "platform_fee": {
    "percentage": null,
    "fixed": null,
    "amount": null
  },
  "disputable": false,
  "capturable": false,
  "reversible": false,
  "refundable": false,
  "zero_interest_installments": true,
  "authorize_uri": "https://pay.omise.co/offsites/ofsp_test_5irts73mzyb4av7uwk6/pay"
}

การสร้าง source และ charge

ร้านค้าสามารถสร้างทั้ง source และ charge ผ่านการเรียกใช้ API เพียงครั้งเดียว

curl https://api.omise.co/charges \
  -u $OMISE_SECRET_KEY: \
  -d "amount=400000" \
  -d "currency=THB" \
  -d "return_uri=http://example.com/orders/345678/complete" \
  -d "source[type]=installment_kbank" \
  -d "source[installment_term]=4"

การสร้าง source และ charge โดยฝ่ายผู้ซื้อเป็นผู้รับภาระดอกเบี้ย

ร้านค้าสามารถปรับเปลี่ยนการตั้งค่าของผู้รับภาระดอกเบี้ยได้โดยการส่ง parameter zero_interest_installments สามารถดูว่าใครเป็นผู้รับภาระได้ดอกเบี้ยได้ที่การตั้งค่าผู้รับภาระดอกเบี้ย

curl https://api.omise.co/charges \
  -u $OMISE_SECRET_KEY: \
  -d "amount=400000" \
  -d "currency=THB" \
  -d "return_uri=http://example.com/orders/345678/complete" \
  -d "zero_interest_installments=false" \
  -d "source[type]=installment_kbank" \
  -d "source[installment_term]=4"

สร้างรายการสำเร็จ

เมื่อมาถึงขั้นตอนนี้ร้านค้าได้สร้างรายการรับชำระเงินขึ้นแล้ว โดยสถานะจะแสดงเป็น pending หรือ status==pending

สถานะของรายการรับชำระเงินสามารถเป็นได้ทั้ง successful, failed และ expired

ส่วนต่อไปของคู่มือการใช้งานจะอธิบายวิธีอนุมัติรายการ, การรับ event แจ้งเตือนเมื่อรายการเสร็จสิ้น และการตรวจสอบสถานะรายการ

แผนภาพด้านล่างนี้แสดงให้เห็นถึงขั้นตอนทั้งหมดในการสร้างรายการ

sequenceDiagram participant customer participant omise.js participant merchant participant api.omise.co customer->>omise.js: Send payment details for purchase omise.js->>api.omise.co: Request source using payment details api.omise.co-->>omise.js: Return source omise.js->>merchant: Merchant gets returned source merchant->>api.omise.co: Request charge using source and purchase details api.omise.co-xmerchant: Send "charge.create" webhook api.omise.co-->>merchant: Return charge merchant->>customer: Redirect to "authorize_uri" for pending charge customer->>api.omise.co: Provide charge authorization details at "authorize_uri" api.omise.co-->>customer: Redirect to "return_uri" api.omise.co-xmerchant: Send "charge.complete" webhook merchant-xcustomer: Send charge result (e.g. via email)

ในโหมดทดสอบร้านค้าสามารถเข้า URL เพื่อปรับสถานะรายการให้สำเร็จหรือไม่สำเร็จได้ด้วยตนเอง

เมื่อผู้ซื้อยืนยันการทำรายการแล้วจะถูกส่งไปยังหน้าที่ร้านค้าระบุเป็น return_uri เอาไว้

การรับ 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 เพื่ออ่านคำอธิบายเพิ่มเติม

สาเหตุขัดข้องดูได้ที่ตารางด้านล่างนี้

รหัสข้อขัดข้อง รายละเอียด
insufficient_balance วงเงินคงเหลือไม่เพียงพอหรือวงเงินเต็ม
payment_cancelled ผู้ซื้อยกเลิกการชำระเงิน
timeout ผู้ซื้อไม่ยืนยันการทำรายการภายในเวลาที่กำหนด
failed_processing ระบบทำรายการไม่สำเร็จ

การคืนเงิน

สามารถตรวจสอบวิธีการคืนเงินรายการผ่อนชำระได้ที่ Refund API

หมายเหตุ: รายการผ่อนชำระสามารถทำการคืนเงินแบบเต็มจำนวนเท่านั้น ไม่สามารถคืนเงินบางส่วนได้

ข้อจำกัด

  • รายการชำระขั้นต่ำ: 300000 (THB3,000.00)
  • รายการชำระสูงสุด: 100000000 (THB1,000,000.00)

บัตรเครดิตแต่ละใบมียอดชำระขั้นต่ำ ต่อเดือนที่ไม่เท่ากัน โดยขึ้นอยู่กับบัตรเครดิตที่ใช้กับระยะเวลาที่เลือกผ่อนชำระ

ตัวอย่าง: ผู้ซื้อมียอดชำระทั้งหมด 3,300 บาท และต้องการจ่ายแบบผ่อนชำระเป็นเวลา 10 เดือน ผู้ซื้อจะมียอดผ่อนชำระ 330 บาทต่อเดือน ซึ่งต่ำกว่ายอดชำระขั้นต่ำของบัตรเครดิตธนาคารกรุงเทพ แต่สูงกว่ายอดชำระขั้นต่ำของบัตรธนาคารกสิกรเป็นต้น

ขั้นตอนต่อไป