แรบบิทไลน์เพย์
หัวข้อทั้งหมดในหน้านี้
ร้านค้าสามารถเพิ่มช่องทางรับชำระเงินผ่านแรบบิทไลน์เพย์ โดยเชื่อมต่อผ่าน API ที่โอมิเซะได้เตรียมไว้ ช่องทางรับชำระเงินนี้ช่วยเพิ่มทางเลือกในการชำระเงินแก่ผู้ซื้อ โดยสามารถเลือกชำระผ่านแรบบิทไลน์เพย์ที่ได้ลงทะเบียนใช้งานไว้แล้วได้เลย ลดขั้นตอนการกรอกข้อมูลบัตร ช่วยให้จบขั้นตอนการชำระเงินได้เร็วขึ้น
คู่มือฉบับนี้จะช่วยเป็นแนวทางการอธิบายขั้นตอนการรับชำระเงินผ่านแรบบิทไลน์เพย์
การเปิดรับชำระเงิน
- ประเทศที่รองรับ: ประเทศไทย
- API เวอร์ชันล่าสุดที่รองรับ:
2017-11-02
ร้านค้าที่ต้องการเปิดใช้ระบบ แรบบิทไลน์เพย์ กรุณาส่งอีเมลมาที่ support@omise.co ทางทีมงานโอมิเซะจะส่งข้อกำหนดและเงื่อนไขการใช้บริการให้ร้านค้าได้พิจารณาและลงลายมือชื่อก่อนเปิดใช้งานจริง
ขั้นตอนการชำระเงิน
แรบบิทไลน์เพย์สามารถเรียกชำระเงินได้ผ่านเว็ปไซต์และแอปพลิเคชันบนมือถือ การชำระเงินผ่านแรบบิทไลน์เพย์ เป็นขั้นตอนแบบ redirect คือระบบจะส่งผู้ซื้อไปยังหน้าชำระเงินของแรบบิทไลน์เพย์เพื่อยืนยันการทำรายการ สำหรับแอปพลิเคชันบนมือถือ ผู้ซื้อสามารถกรอก pass code เพื่อทำรายการชำระเงิน สำหรับเว็ปไซต์ ผู้ซื้อสามารถเข้าถึงแรบบิทไลน์เพย์ได้ 2 วิธี คือ สแกนคิวอาร์โค้ดผ่านแอปพลิเคชัน LINE บนมือถือ หรือ ลงชื่อเข้าใช้งานบัญชี LINE เพื่อทำรายการ ภาพข้างล่างแสดงให้เห็นขั้นตอนการชำระเงินทั้ง 2 วิธี
สแกนคิวอาร์โค้ดผ่านแอปพลิเคชัน LINE
ผู้ซื้อเปิดแอปพลิเคชัน LINE บนมือถือ ❶ สแกนคิวอาร์โค้ด ❷ หลังจากใส่รหัสผ่าน ให้เลือกวิธีการชำระเงิน ❸ ผู้ซื้อตรวจทานความถูกต้องของยอดชำระ ❹ ผู้ซื้อยืนยันการชำระเงินบนมือถือ ❺ จากนั้นระบบจะส่งผู้ซื้อกลับไปยังเว็บไซต์ของร้านค้าโดยอัตโนมัติ
ลงชื่อเข้าใช้งานผ่านบัญชี LINE
ผู้ซื้อลงชื่อเข้าใช้งานบัญชี LINE และเข้าสู่หน้าชำระเงิน ❶ จากนั้นผู้ซื้อจะต้องเปิดแอปพลิเคชัน LINE บนมือถือเพื่อยืนยันการทำรายการ โดยจะต้องทำการชำระเงินภายในเวลา 20 นาที ❷ ผู้ซื้อใส่รหัสผ่านและตรวจทานความถูกต้องของยอดชำระ ❸ ยืนยันการชำระเงินโดยกดปุ่ม Pay ❹ เมื่อทำรายการเสร็จสิ้นระบบจะส่งลูกค้ากลับไปที่เว็บไซต์ของร้านค้าโดยอัติโนมัติ ❺
การติดตั้งใช้งาน
ในการสร้างรายการรับชำระเงินผ่านแรบบิทไลน์เพย์ ให้ร้านค้าส่งคำสั่ง API ดังนี้
- สร้าง payment source (
type
:rabbit_linepay
) โดยใช้ Omise.js, omise-ios หรือ omise-android - สร้าง charge โดยใช้ source จากขั้นตอนแรก
- เมื่อผู้ซื้อทำรายการสำเร็จและร้านค้าได้รับ webhook event หรือ
charge.complete
แล้ว เราแนะนำให้ตรวจสอบสถานะรายการด้วยตนเองอีกครั้งเพื่อความแม่นยำ
การสร้าง source เพื่อรับชำระเงินผ่านแรบบิทไลน์เพย์ จะเกิดขึ้นในฝั่งของผู้ซื้อ (client-side) เช่นบนเว็บไซต์หรือโทรศัพท์มือถือของผู้ซื้อ ร้านค้าจะต้องใช้ public key
ส่วนการสร้างรายการ (charge) เพื่อรับชำระเงินผ่านแรบบิทไลน์เพย์ จะเกิดขึ้นในฝั่งของร้านค้า (server-side) ร้านค้าจะต้องใช้ secret key
หมายเหตุ: หากมีความจำต้องสร้างทั้งรายการและ source ในฝั่งร้านค้า (server-side) สามารถทำพร้อมกันได้เลยโดยการส่งคำสั่ง API เพียงครั้งเดียว และใช้งาน secret key
การสร้าง source
เมื่อผู้ซื้อเลือกชำระเงินผ่านช่องทางนี้ ให้ร้านค้าสร้าง source ผ่าน source API โดยกำหนด amount
, currency
, และ type
ตัวอย่างด้านล่างนี้เป็นการสร้าง source สำหรับรายการ แรบบิทไลน์เพย์ จำนวน ฿4,000
ให้แทนค่าของ omise_public_key
และ $OMISE_PUBLIC_KEY
ด้วย test public key ของร้านค้าซึ่งสามารถคัดลอกได้จาก แดชบอร์ด
หากใช้ Omise.js parameter
type
เป็นตัวแปรที่จำเป็นของฟังก์ชันcreateSource
Omise.setPublicKey(omise_public_key);
Omise.createSource('rabbit_linepay', {
"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=rabbit_linepay"
{
"object": "source",
"id": "src_test_5ncy6d0h0jucwce0awg",
"livemode": false,
"location": "/sources/src_test_5ncy6d0h0jucwce0awg",
"amount": 400000,
"barcode": null,
"bank": null,
"created_at": "2021-03-31T07:56:01Z",
"currency": "THB",
"email": null,
"flow": "redirect",
"installment_term": null,
"name": null,
"mobile_number": null,
"phone_number": null,
"scannable_code": null,
"references": null,
"store_id": null,
"store_name": null,
"terminal_id": null,
"type": "rabbit_linepay",
"zero_interest_installments": null,
"charge_status": "unknown",
"receipt_amount": null,
"discounts": []
}
ตัวแปรของ id
คือ source identifier (เริ่มต้นด้วย src
)
การสร้างรายการรับชำระเงิน
สร้างรายการรับชำระเงินโดยระบุ parameter return_uri
, source
, amount
และ currency
return_uri
จะเป็นตำแหน่งบนเว็บไซต์ของร้านค้าที่ผู้ซื้อจะถูกส่งไปเมื่อยืนยันรายการสำเร็จsource
จะเป็นตัวกำหนด source identifieramount
และ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_5ncy6d4lwu3c6nnaya0",
"location": "/charges/chrg_test_5ncy6d4lwu3c6nnaya0",
"amount": 400000,
"net": 384378,
"fee": 14600,
"fee_vat": 1022,
"interest": 0,
"interest_vat": 0,
"funding_amount": 400000,
"refunded_amount": 0,
"authorized": false,
"capturable": false,
"capture": true,
"disputable": false,
"livemode": false,
"refundable": false,
"reversed": false,
"reversible": false,
"voided": false,
"paid": false,
"expired": false,
"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_5ncy6d4lwu3c6nnaya0/refunds",
"order": "chronological",
"from": "1970-01-01T00:00:00Z",
"to": "2021-03-31T07:56:02Z"
},
"link": null,
"description": null,
"metadata": {},
"card": null,
"source": {
"object": "source",
"id": "src_test_5ncy6cqbaon4kqs0esn",
"livemode": false,
"location": "/sources/src_test_5ncy6cqbaon4kqs0esn",
"amount": 400000,
"barcode": null,
"bank": null,
"created_at": "2021-03-31T07:56:00Z",
"currency": "THB",
"email": null,
"flow": "redirect",
"installment_term": null,
"name": null,
"mobile_number": null,
"phone_number": null,
"scannable_code": null,
"references": null,
"store_id": null,
"store_name": null,
"terminal_id": null,
"type": "rabbit_linepay",
"zero_interest_installments": null,
"charge_status": "pending",
"receipt_amount": null,
"discounts": []
},
"schedule": null,
"customer": null,
"dispute": null,
"transaction": null,
"failure_code": null,
"failure_message": null,
"status": "pending",
"authorize_uri": "https://pay.omise.co/payments/pay2_test_5ncy6d4r48fzawd0z3q/authorize",
"return_uri": "https://example.com/orders/345678/complete",
"created_at": "2021-03-31T07:56:02Z",
"paid_at": null,
"expires_at": "2021-03-31T08:16:32Z",
"expired_at": null,
"reversed_at": null,
"zero_interest_installments": false,
"branch": null,
"terminal": null,
"device": null
}
การสร้าง source และรายการรับชำระเงิน
ร้านค้าสามารถสร้างทั้ง 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]=rabbit_linepay"
สร้างรายการสำเร็จ
เมื่อร้านค้าสร้างรายการรับชำระเงินขึ้นแล้ว จะพบว่าสถานะของรายการแสดงเป็น pending
หรือ status==pending
สถานะของรายการรับชำระเงินสามารถเป็นได้ทั้ง successful
, failed
และ expired
ในส่วนต่อไปเราจะอธิบายวิธีอนุมัติรายการ, การรับ event แจ้งเตือนเมื่อรายการเสร็จสิ้นผ่าน webhook และการตรวจสอบสถานะรายการ
ภาพด้านล่างนี้แสดงให้เห็นถึงขั้นตอนทั้งหมดในการรับชำระเงินแต่ละรายการ
ในโหมดทดสอบร้านค้าสามารถเข้า 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 |
ผู้ซื้อไม่ยืนยันการทำรายการภายในเวลาที่กำหนด |
การยกเลิกรายการและการคืนเงิน
สามารถทำการคืนเงินได้ทั้งการคืนแบบเต็มจำนวนและคืนบางส่วนโดยเรียกใช้ refund API หรือดำเนินการผ่านแดชบอร์ด dashboard หมายเหตุ: การคืนเงินผ่าน API สามารถทำได้ภายในระยะเวลา 60 วันนับจากวันทำรายการ
ข้อจำกัด
- จำนวนรับชำระขั้นต่ำ:
2000
(THB20.00) - จำนวนรับชำระสูงสุด:
15000000
(THB150,000.00)