API ลิงก์การชำระเงิน
อัตโนมัติการสร้างและการจัดการลิงก์การชำระเงินโดยใช้ API ลิงก์การชำระเงิน Omise เหมาะสำหรับธุรกิจที่ต้องสร้างลิงก์จำนวนมาก ผสานรวมกับระบบที่มีอยู่ หรือสร้างประสบการณ์การชำระเงินที่ไดนามิก
ภาพรวม
API ลิงก์การชำระเงิน ช่วยให้คุณ:
- สร้างลิงก์การชำระเงินโดยทางโปรแกรม
- ดึงข้อมูลรายละเอียดและสถานะลิงก์
- อัปเดตการกำหนดค่าลิงก์
- แสดงรายการลิงก์การชำระเงินทั้งหมด
- ติดตามประสิทธิภาพลิงก์
- จัดการ webhooks สำหรับเหตุการณ์การชำระเงิน
การพิสูจน์ตัวตน
ส่วนขยาย API ทั้งหมดต้องใช้การพิสูจน์ตัวตนด้วยคีย์ลับ:
curl https://api.omise.co/links \
-u skey_test_xxx:
สำคัญ:
- ใช้
skey_test_xxxสำหรับโหมดทดสอบ - ใช้
skey_live_xxxสำหรับโหมดการทำงาน - ไม่ต้องเปิดเผยคีย์ลับในโค้ดฝั่งไคลเอ็นต์
- เก็บคีย์ลับให้ปลอดภัย
จุดสิ้นสุด API
URL พื้นฐาน
https://api.omise.co
จุดสิ้นสุดที่มี
| วิธีการ | จุดสิ้นสุด | คำอธิบาย |
|---|---|---|
| POST | /links | สร้างลิงก์การชำระเงิน |
| GET | /links/:id | ดึงข้อมูลลิงก์การชำระเงิน |
| PATCH | /links/:id | อัปเดตลิงก์การชำระเงิน |
| GET | /links | แสดงรายการลิงก์การชำระเงินทั้งหมด |
สร้างลิงก์การชำระเงิน
การสร้างพื้นฐาน
สร้างลิงก์การชำระเงินง่าย:
const omise = require('omise')({
secretKey: 'skey_test_xxx'
});
omise.links.create({
amount: 100000, // จำนวนเงินในหน่วยสกุลเงินที่เล็กที่สุด (1,000.00 THB)
currency: 'thb',
title: 'ซื้อสินค้า',
description: 'การซื้อวิดเจ็ตพรีเมียม',
multiple: true // ลิงก์ที่ใช้ได้หลายครั้ง
}, function(error, link) {
if (error) {
console.error('ข้อผิดพลาด:', error);
} else {
console.log('สร้างลิงก์:', link.payment_uri);
}
});
ตอบกลับ:
{
"object": "link",
"id": "payl_test_5xyx8z94w46ixr9l",
"livemode": false,
"location": "/links/payl_test_5xyx8z94w46ixr9l",
"amount": 100000,
"currency": "thb",
"title": "ซื้อสินค้า",
"description": "การซื้อวิดเจ็ตพรีเมียม",
"multiple": true,
"payment_uri": "https://pay.omise.co/links/payl_test_5xyx8z94w46ixr9l",
"used": false,
"charges": {
"object": "list",
"data": [],
"total": 0
},
"created_at": "2026-02-06T10:30:00Z"
}
ใช้ cURL
curl https://api.omise.co/links \
-u skey_test_xxx: \
-d "amount=100000" \
-d "currency=thb" \
-d "title=ซื้อสินค้า" \
-d "description=การซื้อวิดเจ็ตพรีเมียม" \
-d "multiple=true"
ใช้ Python
import omise
omise.api_secret = 'skey_test_xxx'
link = omise.Link.create(
amount=100000,
currency='thb',
title='ซื้อสินค้า',
description='การซื้อวิดเจ็ตพรีเมียม',
multiple=True
)
print(f"URL ลิงก์: {link.payment_uri}")
ใช้ PHP
<?php
require_once 'vendor/autoload.php';
define('OMISE_SECRET_KEY', 'skey_test_xxx');
$link = OmiseLink::create([
'amount' => 100000,
'currency' => 'thb',
'title' => 'ซื้อสินค้า',
'description' => 'การซื้อวิดเจ็ตพรีเมียม',
'multiple' => true
]);
echo "URL ลิงก์: " . $link['payment_uri'];
?>
ใช้ Ruby
require 'omise'
Omise.api_key = 'skey_test_xxx'
link = Omise::Link.create({
amount: 100000,
currency: 'thb',
title: 'ซื้อสินค้า',
description: 'การซื้อวิดเจ็ตพรีเมียม',
multiple: true
})
puts "URL ลิงก์: #{link.payment_uri}"
พารามิเตอร์ส่วนขยาย
พารามิเตอร์ที่จำเป็น
| พารามิเตอร์ | ชนิด | คำอธิบาย |
|---|---|---|
amount | integer | จำนวนเงินในหน่วยสกุลเงินที่เล็กที่สุด (เช่น satang สำหรับ THB) |
currency | string | รหัสสกุลเงิน ISO 3 ตัวอักษร (เช่น thb, usd) |
title | string | ชื่อลิงก์ที่แสดงให้ลูกค้าเห็น (สูงสุด 200 ตัวอักษร) |
พารามิเตอร์ทางเลือก
| พารามิเตอร์ | ชนิด | เริ่มต้น | คำอธิบาย |
|---|---|---|---|
description | string | null | คำอธิบายโดยละเอียด (สูงสุด 1000 ตัวอักษร) |
multiple | boolean | false | อนุญาตการใช้งานหลายครั้ง (true) หรือการใช้งานครั้งเดียว (false) |
metadata | object | ข้อมูลเมตาแบบกำหนดเอง (คู่คีย์-ค่า) |
ตัวอย่างการสร้างขั้นสูง
ลิงก์การชำระเงินครั้งเดียว
เหมาะสำหรับใบแจ้งหนี้:
omise.links.create({
amount: 250000, // 2,500.00 THB
currency: 'thb',
title: 'ใบแจ้งหนี้ #INV-001',
description: 'การชำระเงินสำหรับบริการปรึกษา',
multiple: false, // ใช้ได้ครั้งเดียวเท่านั้น
metadata: {
invoice_id: 'INV-001',
customer_id: 'CUST-123',
customer_email: 'customer@example.com'
}
}, function(error, link) {
if (!error) {
console.log('ลิงก์ใบแจ้งหนี้:', link.payment_uri);
console.log('รหัสลิงก์:', link.id);
}
});
ลิงก์พร้อมข้อมูลเมตา
เก็บข้อมูลแบบกำหนดเอง:
omise.links.create({
amount: 150000,
currency: 'thb',
title: 'การจองปรึกษา',
description: 'เซสชั่นปรึกษา 1 ชั่วโมง',
multiple: true,
metadata: {
service_type: 'consultation',
duration: '60_minutes',
category: 'business',
booking_date: '2026-03-15',
time_slot: '14:00',
consultant_id: 'CONS-456'
}
}, function(error, link) {
if (!error) {
console.log('สร้างลิงก์การจอง');
// บันทึก link.id ในฐานข้อมูล
}
});
ดึงข้อมูลลิงก์การชำระเงิน
ดึงข้อมูลลิงก์เฉพาะ
ดึงข้อมูลลิงก์ตามรหัส:
omise.links.retrieve('payl_test_5xyx8z94w46ixr9l', function(error, link) {
if (!error) {
console.log('สถานะลิงก์:', link.used ? 'ใช้แล้ว' : 'ใช้งานอยู่');
console.log('ค่าใช้สอยทั้งหมด:', link.charges.total);
console.log('สร้างเมื่อ:', link.created_at);
}
});
ใช้ cURL:
curl https://api.omise.co/links/payl_test_5xyx8z94w46ixr9l \
-u skey_test_xxx:
ข้อผิดพลาดและการจัดการ
ข้อผิดพลาดทั่วไป
omise.links.create({
amount: 100000,
currency: 'thb',
title: 'สินค้า'
}, function(error, link) {
if (error) {
switch(error.code) {
case 'invalid_amount':
console.error('จำนวนเงินไม่ถูกต้อง:', error.message);
break;
case 'invalid_currency':
console.error('สกุลเงินไม่รองรับ:', error.message);
break;
case 'authentication_failure':
console.error('คีย์ API ไม่ถูกต้อง:', error.message);
break;
default:
console.error('ข้อผิดพลาด:', error.message);
}
}
});
รหัสข้อผิดพลาดทั่วไป
| รหัส | คำอธิบาย | วิธีแก้ |
|---|---|---|
authentication_failure | คีย์ API ไม่ถูกต้อง | ตรวจสอบคีย์ลับของคุณ |
invalid_amount | จำนวนเงินไม่ถูกต้อง | ใช้จำนวนเต็มบวกในหน่วยที่เล็กที่สุด |
invalid_currency | สกุลเงินไม่รองรับ | ใช้รหัสสกุลเงินที่รองรับ |
invalid_card | การตรวจสอบบัตรล้มเหลว | ตรวจสอบรายละเอียดบัตร |
insufficient_fund | ยอดคงเหลือไม่เพียงพอ | ลูกค้าต้องเติมเงิน |
failed_processing | การประมวลผลการชำระเงินล้มเหลว | ลองใหม่หรือติดต่อการสนับสนุน |
Webhooks
รับการแจ้งเตือนแบบเรียลไทม์เกี่ยวกับเหตุการณ์ลิงก์การชำระเงิน:
const express = require('express');
const app = express();
app.post('/webhooks/omise', express.json(), (req, res) => {
const event = req.body;
switch(event.key) {
case 'charge.create':
handleChargeCreated(event.data);
break;
case 'charge.complete':
handleChargeCompleted(event.data);
break;
case 'charge.failed':
handleChargeFailed(event.data);
break;
}
res.sendStatus(200);
});
function handleChargeCompleted(charge) {
// ตรวจสอบว่าค่าใช้สอยมาจากลิงก์การชำระเงิน
if (charge.source && charge.source.type === 'link') {
const linkId = charge.source.id;
console.log('ได้รับการชำระเงินสำหรับลิงก์:', linkId);
// ดึงข้อมูลรายละเอียดลิงก์
omise.links.retrieve(linkId, (error, link) => {
if (!error) {
const metadata = link.metadata;
// ประมวลผลตามข้อมูลเมตา
if (metadata.invoice_id) {
markInvoicePaid(metadata.invoice_id);
} else if (metadata.product_id) {
fulfillOrder(metadata.product_id, charge);
}
// ส่งอีเมลยืนยัน
sendConfirmationEmail(charge.customer_email, {
amount: charge.amount,
description: link.title
});
}
});
}
}
app.listen(3000);