การตัดวงเงิน
หัวข้อทั้งหมดในหน้านี้
เอกสารนี้อธิบายเกี่ยวกับ Authorization และ Capture ซึ่งเป็นสองขั้นตอนของการประมวลผลการชำระเงินด้วยบัตร และอธิบายประเภทของ Capture ที่ Omise รองรับ ได้แก่ Automatic Capture, Full Manual Capture และ Single Partial Capture (ใช้งานได้เฉพาะร้านค้าที่ทำสัญญากับ Omise Thailand เท่านั้น)
📖 ทำความเข้าใจ Authorization และ Capture
Authorization และ Capture เป็นสองขั้นตอนในการทำรายการชำระเงินด้วยบัตรให้เสร็จสมบูรณ์
Authorization เกิดขึ้นเมื่อร้านค้าเริ่มทำ charge กับบัตรของลูกค้าตอนชำระเงิน ในขั้นตอนนี้ ผู้ให้บริการประมวลผลการชำระเงินจะตรวจสอบกับธนาคารผู้ออกบัตรของลูกค้า เพื่อยืนยันว่าบัญชีมีวงเงินเพียงพอและอยู่ในสถานะปกติ หากบัญชีผ่านเกณฑ์ ยอดเงินของรายการจะถูกกันไว้จนกว่าการทำรายการจะเสร็จสมบูรณ์ การทำ Authorization ล่วงหน้ากับบัตรช่วยยืนยันว่าช่องทางการชำระเงินนั้นใช้งานได้จริงและผู้ถือบัตรเป็นตัวจริง โดยไม่มีการเรียกเก็บเงินจากบัญชี และยังช่วยป้องกัน chargeback ได้อีกด้วย
ระยะเวลาของ Authorization คือช่วงเวลาที่ Authorization ยังคงมีผล ซึ่งเป็นตัวกำหนดกรอบเวลาที่ต้องทำ Capture ยอดเงินนั้น ระยะเวลานี้แตกต่างกันไปตามประเทศ แต่โดยทั่วไปคือ 7 วัน หากไม่ทำ Capture ยอดเงินภายในระยะเวลาของ Authorization ยอดเงินนั้นจะถูกปลดล็อกโดยอัตโนมัติ และสถานะของ charge จะเปลี่ยนเป็น reversed
Capture คือขั้นตอนที่ทำให้รายการเสร็จสมบูรณ์ โดยเงินจะถูกหักออกจากบัญชีของลูกค้าและโอนเข้าบัญชีของร้านค้า ทำให้สถานะของรายการเปลี่ยนจาก pending เป็น complete
🧾 ประเภทของ Capture
กระบวนการ Capture สามารถทำได้ทั้งแบบอัตโนมัติและแบบแมนวล
Automatic Capture
ใน Automatic Capture การชำระเงินจะถูก Capture โดยอัตโนมัติหลังจากระยะเวลาหน่วงที่กำหนดได้ เรียกว่า capture delay ซึ่งคือช่วงเวลาระหว่าง Authorization กับ Capture โดยค่าเริ่มต้นระยะเวลาหน่วงนี้คือ 0 ทำให้การชำระเงินถูก Capture ทันทีหลังจาก Authorization
Manual Capture
ใน Manual Capture ร้านค้าต้องร้องขอการ Capture อย่างชัดเจนสำหรับการชำระเงินแต่ละรายการ ก่อนที่ Authorization จะหมดอายุ
Manual Capture รองรับประเภทต่อไปนี้:
- Full Manual Capture
- Single Partial Capture (ใช้งานได้เฉพาะร้านค้าที่ทำสัญญากับ Omise Thailand เท่านั้น — ดูหมายเหตุด้านล่าง)
- Multiple Partial Capture (ยังไม่รองรับในขณะนี้ — ดู Multiple Partial Capture ด้านล่าง)
การเลือก authorization type
charge ที่ทำ Manual Capture จะใช้พารามิเตอร์ authorization_type เพื่อระบุความสัมพันธ์ระหว่างยอดเงินที่ Authorization ไว้กับยอดเงินที่ต้องการ Capture:
authorization_type=final_auth(ค่าเริ่มต้น) — ยอดเงินที่ Authorization ไว้เป็นยอดสุดท้าย ใช้สำหรับ Manual Capture ทั่วไป โดย charge จะสามารถ Capture ได้เพียงครั้งเดียวและเต็มจำนวนauthorization_type=pre_auth— ยอดเงินที่ Authorization ไว้เป็นยอดประมาณการ ซึ่งอาจมากกว่ายอดที่ต้องการ Capture จริง ใช้เมื่อคาดว่าจะ Capture น้อยกว่ายอดเต็มที่ Authorization ไว้ เช่น กรณี Single Partial Capture
⚠️ คำเตือน: หากร้านค้าไม่ได้จัดส่งสินค้าหรือให้บริการสำหรับ charge นั้น ไม่ควรทำการ Capture — ระบบไม่รองรับคำขอ Capture ด้วยยอดเงิน THB 0 หากส่ง capture_amount=0 ระบบจะ Capture ยอดเงินที่ Authorization ไว้ทั้งหมดแทนที่จะเป็น 0 บาท เพื่อหลีกเลี่ยงการ Capture ยอด Authorization ที่ไม่ต้องการเรียกเก็บแล้ว ให้ปล่อยให้ Authorization หมดอายุและถูกปลดล็อกโดยอัตโนมัติ แทนการส่งคำขอ Capture ด้วยยอดเงิน 0 บาท
Full Manual Capture
ใน Full Manual Capture ยอดเงินที่ Authorization ไว้จะถูก Capture เต็มจำนวน
ขั้นตอนตัวอย่างมีดังนี้
Full Manual Capture: การทำ Authorization ให้ charge
ตัวอย่างต่อไปนี้แสดงการทำ Authorization ให้ charge จำนวน THB 70 โดยใช้ card token เนื่องจาก Full Manual Capture จะ Capture เต็มจำนวนเสมอ ตัวอย่างนี้จึงระบุ authorization_type=final_auth (ค่าเริ่มต้น) ไว้อย่างชัดเจน
curl https://api.omise.co/charges \
-u $OMISE_SECRET_KEY: \
-d "amount=7000" \
-d "currency=THB" \
-d "capture=false" \
-d "card=$TOKEN_ID" \
-d "authorization_type=final_auth"
Full Manual Capture: การ Capture ยอดเงินที่ Authorization ไว้ทั้งหมด
ตัวอย่างต่อไปนี้แสดงการ Capture เต็มจำนวน THB 70
curl https://api.omise.co/charges/$FULL_UNCAPTURED_CHARGE_ID/capture \
-u $OMISE_SECRET_KEY: \
-d "capture_amount=7000"
Single Partial Capture
🔒 สำคัญ: Single Partial Capture ใช้งานได้เฉพาะร้านค้าที่ทำสัญญากับ Omise Thailand เท่านั้น
ตัวอย่างต่อไปนี้แสดงการทำงานของ Single Partial Capture
สมมติว่าลูกค้าซื้อสินค้ามูลค่า THB 70 บัตรจะถูก Authorization ไว้ที่ THB 70 แต่ร้านค้าสามารถจัดส่งสินค้าได้เพียง THB 40 ยอดเรียกเก็บสุดท้ายคือ THB 40 ซึ่งเป็นจำนวนที่เรียกเก็บจากบัตรของลูกค้า ส่วนต่างอีก THB 30 ที่ Authorization ไว้แต่ไม่ได้เรียกเก็บ จะถูกปลดล็อกและคืนกลับ
ℹ️ หมายเหตุ: รายการที่เรียกเก็บ THB 40 จากบัตรของลูกค้านี้ คือ Single Partial Capture
ขั้นตอนตัวอย่างมีดังนี้
Single Partial Capture: การเปิดใช้งาน
Single Partial Capture เปิดใช้งานเป็นค่าเริ่มต้นสำหรับร้านค้าที่มีสิทธิ์ใช้งาน โดยไม่ต้องตั้งค่าใด ๆ เพิ่มเติม ใช้งานได้เฉพาะร้านค้าที่ทำสัญญากับ Omise Thailand เท่านั้น หากไม่แน่ใจว่าบัญชีของคุณมีสิทธิ์ใช้งานหรือไม่ โปรดติดต่อทีมดูแลบัญชีของ Omise
Single Partial Capture: การทำ Authorization ให้ charge
ตัวอย่างต่อไปนี้แสดงการทำ Authorization ให้ charge จำนวน THB 70 โดยใช้ card token เนื่องจากร้านค้าคาดว่าจะ Capture เพียงบางส่วนของยอดนี้ ตัวอย่างนี้จึงระบุ authorization_type=pre_auth
curl https://api.omise.co/charges \
-u $OMISE_SECRET_KEY: \
-d "amount=7000" \
-d "currency=THB" \
-d "capture=false" \
-d "card=$TOKEN_ID" \
-d "authorization_type=pre_auth"
Single Partial Capture: การ Capture บางส่วนของยอดเงินที่ Authorization ไว้
ตัวอย่างต่อไปนี้แสดงการทำ Single Partial Capture จำนวน THB 40
curl https://api.omise.co/charges/$PARTIAL_UNCAPTURED_CHARGE_ID/capture \
-u $OMISE_SECRET_KEY: \
-d "capture_amount=4000"
Multiple Partial Capture
ในขณะนี้ Omise ยังไม่รองรับ Multiple Partial Capture
❓ คำถามที่พบบ่อย
Single Partial Capture เปิดใช้งานเป็นค่าเริ่มต้นหรือไม่ หรือต้องร้องขอก่อน สำหรับร้านค้าที่มีสิทธิ์ใช้งาน จะเปิดใช้งานเป็นค่าเริ่มต้นโดยไม่ต้องตั้งค่าใด ๆ เพิ่มเติม อย่างไรก็ตาม ใช้งานได้เฉพาะร้านค้าที่ทำสัญญากับ Omise Thailand เท่านั้น หากไม่แน่ใจว่าบัญชีของคุณมีสิทธิ์ใช้งานหรือไม่ โปรดติดต่อทีมดูแลบัญชีของ Omise
สามารถ Capture charge เดียวกันได้มากกว่าหนึ่งครั้งหรือไม่ (ทำ partial capture หลายครั้งในภายหลัง) ไม่สามารถทำได้ในขณะนี้ Omise ยังไม่รองรับ Multiple Partial Capture ดังนั้น charge แต่ละรายการที่ทำ Authorization ไว้จะสามารถ Capture ได้เพียงครั้งเดียว ไม่ว่าจะเป็นการ Capture เต็มจำนวนหรือบางส่วน
หลังจากทำ Single Partial Capture แล้ว ต้องปลดล็อกยอดเงินที่ไม่ได้ Capture ด้วยตนเองหรือไม่ ไม่ต้อง เมื่อคุณ Capture ยอดเงินน้อยกว่ายอดที่ Authorization ไว้ทั้งหมด Omise จะปลดล็อกและคืนยอดเงินส่วนที่เหลือให้โดยอัตโนมัติ ไม่ต้องดำเนินการเพิ่มเติมใด ๆ
หากไม่ทำ Capture charge ภายในระยะเวลาของ Authorization จะเกิดอะไรขึ้น
ยอดเงินที่ไม่ได้ Capture จะถูกปลดล็อกโดยอัตโนมัติ และสถานะของ charge จะเปลี่ยนเป็น reversed
authorization_type=pre_auth กับ authorization_type=final_auth ต่างกันอย่างไร
ใช้ pre_auth เมื่อยอดเงินที่ Authorization ไว้เป็นยอดประมาณการซึ่งอาจมากกว่ายอดที่ต้องการ Capture จริง ซึ่งมักใช้กับ Single Partial Capture ส่วน final_auth (ค่าเริ่มต้น) ใช้สำหรับ Manual Capture ทั่วไป โดยยอดเงินที่ Authorization ไว้เป็นยอดสุดท้ายและ Capture ได้เพียงครั้งเดียวเต็มจำนวน
หากพยายาม Capture ด้วยยอดเงิน THB 0 เช่น กรณีที่ร้านค้าไม่ได้จัดส่งสินค้าเลย จะเกิดอะไรขึ้น
ผลลัพธ์อาจไม่เป็นไปตามที่คาดไว้ — ระบบไม่รองรับการ Capture ด้วยยอดเงิน THB 0 หากส่ง capture_amount=0 ระบบจะ Capture ยอดเงินที่ Authorization ไว้ทั้งหมดแทนที่จะเป็น 0 บาท หากร้านค้าไม่ต้องการเรียกเก็บเงิน ไม่ควรพยายาม Capture แต่ควรปล่อยให้ Authorization หมดอายุและถูกปลดล็อกโดยอัตโนมัติแทน