อินเทอร์เน็ตแบงก์กิ้ง

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

ในเบื้องต้นโอมิเซะรองรับการชำระเงินผ่านธนาคารชั้นนำ 4 แห่งดังนี้:

Bank Service Source type
Bank of Ayudhya (Krungsri) Krungsri Online internet_banking_bay
Bangkok Bank Bualuang iBanking internet_banking_bbl
Krungthai KTB Netbank internet_banking_ktb
SCB SCB Easy Net internet_banking_scb

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

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

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

หากต้องการติดตั้งใช้งานกับ API เวอร์ชัน 2017-11-02 หรือก่อนหน้า กรุณาอ่านคู่มือการติดตั้งของเวอร์ชันก่อนหน้านี้

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

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

internet banking 1

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

internet banking 2

จำนวนเงิน หมายเลข หมายเลขอ้างอิงต่างๆ ที่ปกติผู้ซื้อจะต้องกรอกเองนั้น ระบบของเราจะกรอกให้โดยอัตโนมัติทั้งหมด ผู้ซื้อเพียงตรวจทานข้อมูลก่อนยืนยันรายการเท่านั้น

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

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

  1. การสร้าง payment source (type: internet_banking_bay, internet_banking_bbl, internet_banking_ktb, หรือ internet_banking_scb) โดยใช้ 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

ตัวอย่างด้านล่างนี้เป็นการสร้าง 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('internet_banking_scb', {
  "amount": 400000,
  "currency": "THB"
}, 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=internet_banking_scb"
{
  "object": "source",
  "id": "src_test_5il9f59oskjwblpy7xw",
  "livemode": false,
  "location": "/sources/src_test_5il9f59oskjwblpy7xw",
  "created_at": "2020-01-17T09:07:13Z",
  "type": "internet_banking_scb",
  "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": null,
  "zero_interest_installments": null,
  "scannable_code": null
}

ตัวแปรของ id คือ source identifier

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

สร้างรายการรับชำระเงินโดยระบุ 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 "amount=400000" \
  -d "currency=THB" \
  -d "return_uri=https://example.com/orders/345678/complete" \
  -d "source=$SOURCE_ID"
{
  "object": "charge",
  "id": "chrg_test_5il9f5cm59hbsltu7ko",
  "livemode": false,
  "location": "/charges/chrg_test_5il9f5cm59hbsltu7ko",
  "created_at": "2020-01-17T09:07:13Z",
  "amount": 400000,
  "currency": "THB",
  "funding_amount": 400000,
  "funding_currency": "THB",
  "fee": 14600,
  "fee_vat": 1022,
  "interest": 0,
  "interest_vat": 0,
  "net": 384378,
  "description": null,
  "metadata": {},
  "status": "pending",
  "capture": true,
  "authorized": false,
  "schedule": null,
  "reversed": false,
  "reversed_at": null,
  "expires_at": "2020-01-24T09:07:13Z",
  "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-01-17T09:07:14Z",
    "offset": 0,
    "limit": 20,
    "total": 0,
    "order": "chronological",
    "location": "/charges/chrg_test_5il9f5cm59hbsltu7ko/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_5il9f521z1ra5vim8qj",
    "livemode": false,
    "location": "/sources/src_test_5il9f521z1ra5vim8qj",
    "created_at": "2020-01-17T09:07:12Z",
    "type": "internet_banking_scb",
    "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": null,
    "zero_interest_installments": null,
    "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_5il9f5crn76gtikslau/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]=internet_banking_scb"

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

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

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

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

ในโหมดทดสอบร้านค้าสามารถเข้า 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 เพื่ออ่านคำอธิบายเพิ่มเติม

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

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

Voids and refunds

Internet Banking charges cannot be voided or refunded through Omise.

ข้อจำกัด

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

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