พร้อมเพย์
หัวข้อทั้งหมดในหน้านี้
เพิ่มช่องทางการรับชำระเงินผ่านพร้อมเพย์ อำนวยความสะดวกให้ผู้ซื้อสามารถทำรายการผ่านบัญชีธนาคารชั้นนำทั่วประเทศ บริการพร้อมเพย์ช่วยให้ร้านค้ารับชำระเงินจากผู้ซื้อทั่วประเทศไทยได้อย่างรวดเร็วและปลอดภัย ผู้ซื้อสามารถทำรายการได้ง่ายเพียงสแกนคิวอาร์โค้ดก็สามารถชำระเงินได้ทันที
คู่มือฉบับนี้จะช่วยแนะนำการติดตั้งรวมถึงอธิบายขั้นตอนการรับชำระเงินผ่านพร้อมเพย์
การเปิดรับชำระเงิน
- ประเทศที่รองรับ: ประเทศไทย
- API เวอร์ชันล่าสุดที่รองรับ:
2017-11-02
ร้านค้าที่ต้องการเปิดใช้ระบบ พร้อมเพย์ กรุณาส่งอีเมลมาที่ support@opn.ooo ทางทีมงาน Opn Payments จะส่งข้อกำหนดและเงื่อนไขการใช้บริการให้ร้านค้าได้พิจารณาและลงลายมือชื่อก่อนเปิดใช้งานจริง
ขั้นตอนการรับชำระเงินผ่านพร้อมเพย์
ผู้ซื้อที่ต้องการชำระเงินผ่านพร้อมเพย์จะต้องผ่านขั้นตอนการชำระเงินและทำการยืนยันรายการแบบ ออฟไลน์
โดยผู้ซื้อจะต้องทำการสแกนคิวอาร์โค้ดโดยใช้แอปพลิเคชันอินเทอร์เน็ตแบงก์กิ้งของตนเองเพื่อยืนยันรายการ
เมื่อผู้ซื้อเลือกพร้อมเพย์เป็นช่องทางการชำระเงินแล้ว เว็บไซต์ของร้านค้าจะมีการแสดงคิวอาร์โค้ดเพื่อให้ผู้ซื้อสแกน ภาพด้านล่างนี้แสดงขั้นตอนการรับชำระเงิน 2 ประเภทคือ การชำระเงินผ่านเบราว์เซอร์บนคอมพิวเตอร์และการชำระเงินผ่านเบราว์เซอร์บนมือถือ เมื่อร้านค้าได้แสดงคิวอาร์โค้ดขึ้นมาแล้ว ผู้ซื้อจะต้องสแกนเพื่อชำระเงิน
การชำระเงินผ่านเบราว์เซอร์บนคอมพิวเตอร์
ผู้ซื้อลงชื่อเข้าใช้งานแอปอินเทอร์เน็ตแบงก์กิ้งของตนเองเพื่อสแกนคิวอาร์โค้ด ❷ ผู้ซื้อสแกนคิวอาร์โค้ดผ่านแอป ❸ ผู้ซื้อยืนยันรายการผ่านแอป ❹ เมื่อร้านค้าได้รับการแจ้งเตือนรายการสำเร็จผ่าน webhook ให้ยืนยันรายการกับผู้ซื้ออีกครั้ง ❺
การชำระเงินผ่านเบราว์เซอร์บนมือถือ
ผู้ซื้อทำการถ่ายภาพหน้าจอที่แสดงคิวอาร์โค้ด ❶ จากนั้นลงชื่อเข้าใช้งานแอปอินเทอร์เน็ตแบงก์กิ้งของตนเอง ❷ ผู้ซื้ออัปโหลดภาพถ่ายหน้าจอคิวอาร์โค้ดลงในแอป ❸ ผู้ซื้อยืนยันรายการผ่านแอป ❹ เมื่อร้านค้าได้รับการแจ้งเตือนรายการสำเร็จผ่าน webhook ให้ยืนยันรายการกับผู้ซื้ออีกครั้ง ❺
การติดตั้งใช้งาน
ในการสร้างรายการรับชำระเงินผ่านพร้อมเพย์ ให้ร้านค้าส่งคำสั่ง API ดังนี้
- สร้าง payment source (
type
:promptpay
) โดยใช้ 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('promptpay', {
"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=promptpay"
{
"object": "source",
"id": "src_5vcd3j4hmt50uaimb94",
"livemode": true,
"location": "/sources/src_5vcd3j4hmt50uaimb94",
"amount": 400000,
"barcode": null,
"bank": null,
"created_at": "2023-04-05T03:47:01Z",
"currency": "THB",
"email": null,
"flow": "offline",
"installment_term": null,
"absorption_type": null,
"name": null,
"mobile_number": null,
"phone_number": null,
"platform_type": null,
"scannable_code": null,
"billing": null,
"shipping": null,
"items": [],
"references": null,
"store_id": null,
"store_name": null,
"terminal_id": null,
"type": "promptpay",
"zero_interest_installments": null,
"charge_status": "unknown",
"receipt_amount": null,
"discounts": []
}
ตัวแปรของ id
คือ source identifier (เริ่มต้นด้วย src
)
การสร้างรายการรับชำระเงิน
สร้างรายการรับชำระเงินโดยระบุ parameter source
, amount
และ currency
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 "source=$SOURCE_ID"
{
"object": "charge",
"id": "chrg_5vcd3j9c9r0p4ayml0d",
"location": "/charges/chrg_5vcd3j9c9r0p4ayml0d",
"amount": 400000,
"net": 392938,
"fee": 6600,
"fee_vat": 462,
"interest": 0,
"interest_vat": 0,
"funding_amount": 400000,
"refunded_amount": 0,
"transaction_fees": {
"fee_flat": "0.0",
"fee_rate": "1.65",
"vat_rate": "7.0"
},
"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_5vcd3j9c9r0p4ayml0d/refunds",
"order": "chronological",
"from": "1970-01-01T00:00:00Z",
"to": "2023-04-05T03:47:03Z"
},
"link": null,
"description": null,
"metadata": {},
"card": null,
"source": {
"object": "source",
"id": "src_5vcd3isr8i4ydk0jo9y",
"livemode": true,
"location": "/sources/src_5vcd3isr8i4ydk0jo9y",
"amount": 400000,
"barcode": null,
"bank": null,
"created_at": "2023-04-05T03:47:00Z",
"currency": "THB",
"email": null,
"flow": "offline",
"installment_term": null,
"absorption_type": null,
"name": null,
"mobile_number": null,
"phone_number": null,
"platform_type": null,
"scannable_code": {
"object": "barcode",
"type": "qr",
"image": {
"object": "document",
"livemode": true,
"id": "docu_5vcd3jbub41hdpc9vxb",
"deleted": false,
"filename": "qrcode.svg",
"location": "/charges/chrg_5vcd3j9c9r0p4ayml0d/documents/docu_5vcd3jbub41hdpc9vxb",
"kind": "qr",
"download_uri": "https://api.omise.co/charges/chrg_5vcd3j9c9r0p4ayml0d/documents/docu_5vcd3jbub41hdpc9vxb/downloads/252FAA89B00F75B6",
"created_at": "2023-04-05T03:47:02Z"
}
},
"billing": null,
"shipping": null,
"items": [],
"references": null,
"store_id": null,
"store_name": null,
"terminal_id": null,
"type": "promptpay",
"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": null,
"return_uri": null,
"created_at": "2023-04-05T03:47:02Z",
"paid_at": null,
"expires_at": "2023-04-06T03:47:02Z",
"expired_at": null,
"reversed_at": null,
"zero_interest_installments": false,
"branch": null,
"terminal": null,
"device": null,
"authorized": false,
"capturable": false,
"capture": true,
"disputable": false,
"livemode": true,
"refundable": false,
"reversed": false,
"reversible": false,
"voided": false,
"paid": false,
"expired": false
}
ตั้งเวลาหมดอายุสำหรับคิวอาร์โค้ด
โดยทั่วไป คิวอาร์โค้ดจะมีอายุ 24 ชั่วโมงหลังจากการสร้างรหัส
ร้านค้าที่ต้องการเปลี่ยนกำหนดการหมดอายุของคิวอาร์โค้ด (เช่น เปลี่ยนเป็น 5 นาทีหลังจากการสร้างรหัส) สามารถติดต่อ support@opn.ooo เพื่อเปลี่ยนการตั้งค่า
ในกรณีที่ต้องการกำหนดระยะเวลาในการหมดอายุสำหรับแต่ละคิวอาร์โค้ด สามารถเข้าไปที่ Charge API และระบุระยะเวลาหมดอายุ (timestamp) ที่ต้องการใน field expires_at
(ตั้งเวลาให้รหัสหมดอายุได้ไม่เกิน 24 ชั่วโมงหลังจากการสร้างรหัส) หากกรอกข้อมูลถูกต้อง ระบบจะทำการปิดการเข้าถึงคิวอาร์โค้ดเมื่อถึงระยะเวลาที่กำหนดไว้แทนระยะเวลาตั้งต้น
curl https://api.omise.co/charges \
-u $OMISE_SECRET_KEY: \
-d "amount=400000" \
-d "currency=THB" \
-d "source[type]=promptpay"
-d "expires_at=2020-07-01T15:00:00Z"
การสร้าง source และรายการรับชำระเงิน
ร้านค้าสามารถสร้างทั้ง source และ รายการรับชำระเงิน (charge) ผ่านการเรียกใช้ API เพียงครั้งเดียว
curl https://api.omise.co/charges \
-u $OMISE_SECRET_KEY: \
-d "amount=400000" \
-d "currency=THB" \
-d "source[type]=promptpay"
สร้างรายการสำเร็จ
เมื่อร้านค้าสร้างรายการรับชำระเงินขึ้นมาแล้ว จะพบว่าสถานะของรายการแสดงเป็น pending
หรือ status==pending
โดยสถานะของรายการรับชำระเงินสามารถเป็นได้ทั้ง successful
, failed
และ expired
ในส่วนต่อไปเราจะอธิบายวิธีอนุมัติรายการ, การรับ event แจ้งเตือนเมื่อรายการเสร็จสิ้นผ่าน webhook และการตรวจสอบสถานะรายการ
ภาพด้านล่างนี้แสดงให้เห็นถึงขั้นตอนทั้งหมดในการรับชำระเงินแต่ละรายการ
การอนุมัติรายการ
ร้านค้าจะแสดงคิวอาร์โค้ดที่สร้างขึ้นให้กับผู้ซื้อ โดยในการอนุมัติรายการผู้ซื้อจะสแกนคิวอาร์โค้ดด้วยโทรศัพท์มือถือ
สามารถทดสอบการอนุมัติรายการได้ในโหมดทดสอบ โดยไปยังรายการที่ต้องการบนแดชบอร์ด จากนั้นคลิก Actions
จากนั้นเลือกเปลี่ยนสถานะของรายการเป็น สำเร็จ
หรือ ไม่สำเร็จ
คิวอาร์โค้ดจะอยู่ใน charge object ตามตัวอย่างด้านล่างนี้
charge:
source:
scannable_code:
image:
download_uri: QR code image to present to the customer
{
"object": "barcode",
"type": "qr",
"image": {
"object": "document",
"livemode": true,
"id": "docu_5vcd3ixspivbpk7qqu4",
"deleted": false,
"filename": "qrcode.svg",
"location": "/charges/chrg_5vcd3ivh9f7tsrc102y/documents/docu_5vcd3ixspivbpk7qqu4",
"kind": "qr",
"download_uri": "https://api.omise.co/charges/chrg_5vcd3ivh9f7tsrc102y/documents/docu_5vcd3ixspivbpk7qqu4/downloads/A80FFC1201D2F629",
"created_at": "2023-04-05T03:47:01Z"
}
}
การรับ 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 |
ผู้ซื้อยกเลิกการชำระเงิน |
การยกเลิกรายการและการคืนเงิน
รายการที่รับชำระผ่านพร้อมเพย์ยังไม่สามารถทำการยกเลิกรายการหรือการคืนเงินผ่าน Opn Payments ได้
ข้อจำกัด
- จำนวนรับชำระขั้นต่ำ:
2000
(THB20.00) - จำนวนรับชำระสูงสุด:
15000000
(THB150,000.00)