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