การ Authentication
Omise ใช้ API keys เพื่อ authenticate คำขอ คุณจะต้องใช้ keys ที่แตกต่างกันสำหรับการดำเนินการที่แตกต่างกันเพื่อรักษาความปลอดภัยการผูกรวมของคุณ
ภาพรวม
Omise ใช้ HTTP Basic Authentication โดยที่ API key ของคุณทำหน้าที่เป็น username และฟิลด์ password ว่างเปล่า คำขอ API ทั้งหมดต้องทำผ่าน HTTPS - การเรียกที่ทำผ่าน HTTP ธรรมดาจะล้มเหลว
สาม Types ของ API Keys
1. Public Key
ใช้สำหรับ: การดำเนินการฝั่ง client (เบราว์เซอร์ แอปมือถือ)
รูปแบบ: pkey_test_... (test) หรือ pkey_... (live)
ความสามารถ:
- ✅ สร้าง tokens (tokenize บัตร)
- ✅ สร้าง sources (สำหรับวิธีการชำระเงินทางเลือก)
- ✅ ดู tokens และ sources
- ❌ สร้าง charges (ต้องใช้ secret key)
- ❌ เข้าถึงข้อมูลบัญชี
ปลอดภัยที่จะเปิดเผย: ใช่ public key ของคุณสามารถรวมอยู่ในโค้ดฝั่ง client อย่าง JavaScript, แอปมือถือ หรือ HTML ได้อย่างปลอดภัย
ตัวอย่างการใช้งาน
- cURL
- JavaScript
- PHP
# สังเกตเครื่องหมายโคลอนหลัง key (รูปแบบ username:password โดยมี password ว่าง)
curl https://vault.omise.co/tokens \
-X POST \
-u pkey_test_5xp6c8ltm5wb5o45cls: \
-d "card[name]=Somchai Prasert" \
-d "card[number]=4242424242424242" \
-d "card[expiration_month]=12" \
-d "card[expiration_year]=2027" \
-d "card[security_code]=123"
// ใช้ Omise.js
Omise.setPublicKey('pkey_test_5xp6c8ltm5wb5o45cls');
Omise.createToken('card', {
name: 'Somchai Prasert',
number: '4242424242424242',
expiration_month: 12,
expiration_year: 2027,
security_code: '123'
}, function(statusCode, response) {
console.log(response);
});
<?php
define('OMISE_PUBLIC_KEY', 'pkey_test_5xp6c8ltm5wb5o45cls');
$token = OmiseToken::create([
'card' => [
'name' => 'Somchai Prasert',
'number' => '4242424242424242',
'expiration_month' => 12,
'expiration_year' => 2027,
'security_code' => '123'
]
]);
?>
Public keys ช่วยให้คุณ tokenize ข้อมูลที่ละเอียดอ่อนบนฝั่ง client ดังนั้นข้อมูลบัตรจะไม่ผ่านเซิร์ฟเวอร์ของคุณเลย สิ่งนี้ช่วยลดความต้องการการปฏิบัติตาม PCI ของคุณอย่างมาก
2. Secret Key
ใช้สำหรับ: การดำเนินการฝั่ง server
รูปแบบ: skey_test_... (test) หรือ skey_... (live)
ความสามารถ:
- ✅ สร้าง charges
- ✅ สร้าง refunds
- ✅ จัดการ customers
- ✅ สร้างและจัดการ transfers
- ✅ เข้าถึงข้อมูลบัญชีทั้งหมด
- ✅ ดำเนินการทั้งหมด
ปลอดภัยที่จะเปิดเผย: ไม่! Secret keys ต้องเก็บเป็นความลับและใช้เฉพาะฝั่ง server เท่านั้น
ตัวอย่างการใช้งาน
- cURL
- Node.js
- Python
- Ruby
- PHP
curl https://api.omise.co/charges \
-X POST \
-u skey_test_5xp6c8n0jvds5mmjizz: \
-d "amount=100000" \
-d "currency=thb" \
-d "card=tokn_test_5xp6ca4dtzx5cskm9mk"
const omise = require('omise')({
secretKey: 'skey_test_5xp6c8n0jvds5mmjizz'
});
omise.charges.create({
amount: 100000,
currency: 'thb',
card: 'tokn_test_5xp6ca4dtzx5cskm9mk'
}, function(err, charge) {
console.log(charge);
});
import omise
omise.api_secret = 'skey_test_5xp6c8n0jvds5mmjizz'
charge = omise.Charge.create(
amount=100000,
currency='thb',
card='tokn_test_5xp6ca4dtzx5cskm9mk'
)
require 'omise'
Omise.secret_api_key = 'skey_test_5xp6c8n0jvds5mmjizz'
charge = Omise::Charge.create(
amount: 100000,
currency: 'thb',
card: 'tokn_test_5xp6ca4dtzx5cskm9mk'
)
<?php
define('OMISE_SECRET_KEY', 'skey_test_5xp6c8n0jvds5mmjizz');
$charge = OmiseCharge::create([
'amount' => 100000,
'currency' => 'thb',
'card' => 'tokn_test_5xp6ca4dtzx5cskm9mk'
]);
?>
อย่า commit secret keys ไปยัง version control, เปิดเผยในโค้ดฝั่ง client หรือแชร์สาธารณะ ใช้ environment variables หรือการจัดการ configuration ที่ปลอดภัยเสมอ
3. Chain Key
ใช้สำหรับ: การดำเนินการ sub-merchant (หากคุณกำลังสร้าง marketplace/platform)
รูปแบบ: ck_test_... (test) หรือ ck_... (live)
ความสามารถ:
- ✅ ทำคำขอในนามของ sub-merchants ที่เชื่อมต่อ
- ✅ ความสามารถทั้งหมดของ secret key สำหรับ sub-accounts
ปลอดภัยที่จะเปิดเผย: ไม่! ปฏิบัติต่อ chain keys ด้วยความปลอดภัยเช่นเดียวกับ secret keys
Chain keys มีความเกี่ยวข้องเฉพาะเมื่อคุณกำลังใช้ Omise Connect เพื่อจัดการบัญชี sub-merchant ผู้ขายส่วนใหญ่จะไม่ต้องการ chain keys
Test กับ Live Keys
แต่ละ key type มีทั้งเวอร์ชัน test และ live:
| สภาพแวดล้อม | Public Key Prefix | Secret Key Prefix | วัตถุประสงค์ |
|---|---|---|---|
| Test | pkey_test_ | skey_test_ | การพัฒนาและทดสอบ |
| Live | pkey_ | skey_ | ธุรกรรม production |
Test keys ทำงานได้เฉพาะในโหมดทดสอบและ live keys ทำงานได้เฉพาะในโหมดจริงเท่านั้น สิ่งนี้ป้องกัน charges ที่เกิดขึ้นโดยไม่ได้ตั้งใจระหว่างการพัฒนา
จะหา Keys ของคุณได้ที่ไหน
- เข้าสู่ระบบ Omise Dashboard ของคุณ
- ไปที่ Settings → Keys
- คุณจะเห็น keys ของคุณสำหรับทั้งสภาพแวดล้อมทดสอบและจริง
Test Keys
Test keys พร้อมใช้งานทันทีหลังจากสมัคร - ไม่ต้องตรวจสอบ!
Live Keys
Live keys จะพร้อมใช้งานหลังจากคุณดำเนินการตรวจสอบธุรกิจให้เสร็จ ดูคู่มือ Going Live สำหรับรายละเอียด
วิธีการใช้ API Keys
HTTP Basic Authentication
Omise ใช้ HTTP Basic Authentication โดยที่:
- Username: API key ของคุณ
- Password: ว่าง (เว้นว่าง)
รูปแบบ authentication header คือ:
Authorization: Basic base64(api_key:)
สังเกตเครื่องหมายโคลอนหลัง API key - ฟิลด์ password ว่างเปล่าโดยเจตนา
ในตัวอย่างโค้ด
- cURL
- Node.js
- Python
- Ruby
- PHP
# Public key - สร้าง token
curl https://vault.omise.co/tokens \
-u pkey_test_YOUR_KEY:
# Secret key - สร้าง charge
curl https://api.omise.co/charges \
-u skey_test_YOUR_KEY:
// เริ่มต้นด้วย secret key
const omise = require('omise')({
secretKey: 'skey_test_YOUR_KEY'
});
// Public key ตั้งค่าต่างกัน (สำหรับ Omise.js ในเบราว์เซอร์)
Omise.setPublicKey('pkey_test_YOUR_KEY');
import omise
# ตั้งค่า keys
omise.api_public = 'pkey_test_YOUR_KEY'
omise.api_secret = 'skey_test_YOUR_KEY'
# Keys ถูกใช้โดยอัตโนมัติตามการดำเนินการ
require 'omise'
# ตั้งค่า keys
Omise.api_key = 'pkey_test_YOUR_KEY' # การดำเนินการ Public
Omise.secret_api_key = 'skey_test_YOUR_KEY' # การดำเนินการ Secret
<?php
// กำหนด keys เป็น constants
define('OMISE_PUBLIC_KEY', 'pkey_test_YOUR_KEY');
define('OMISE_SECRET_KEY', 'skey_test_YOUR_KEY');
// Library ใช้โดยอัตโนมัติ
?>
แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัย
ควรทำ ✅
-
ใช้ Environment Variables
# ไฟล์ .env
OMISE_PUBLIC_KEY=pkey_test_...
OMISE_SECRET_KEY=skey_test_... -
เก็บ Keys อย่างปลอดภัย
- ใช้บริการจัดการ secrets (AWS Secrets Manager, Azure Key Vault ฯลฯ)
- ใช้ environment variables บนเซิร์ฟเวอร์ของคุณ
- เข้ารหัส keys ใน configuration ของคุณ
-
หมุนเวียน Keys เป็นประจำ
- คุณสามารถสร้าง keys ใหม่ใน dashboard ของคุณ
- Keys เก่ายังคงใช้ได้จนกว่าคุณจะลบ
- อัปเดตโค้ดของคุณทีละน้อยเพื่อหลีกเลี่ยง downtime
-
ใช้ Keys ที่แตกต่างกันสำหรับสภาพแวดล้อมที่แตกต่างกัน
- Development: Test keys
- Staging: Test keys
- Production: Live keys
-
ตรวจสอบการใช้งาน Key
- ตรวจสอบ dashboard ของคุณสำหรับการเรียก API ที่ไม่ได้รับอนุญาต
- ตั้งค่าการแจ้งเตือนสำหรับกิจกรรมที่ผิดปกติ
ไม่ควรทำ ❌
-
อย่า Commit Keys ไปยัง Version Control
# เพิ่มใน .gitignore
.env
.env.local
config/secrets.yml -
อย่าเปิดเผย Secret Keys ฝั่ง Client
// ❌ ผิด - Secret key ใน JavaScript
const omise = require('omise')({
secretKey: 'skey_test_...' // ผู้ใช้มองเห็นได้!
}); -
อย่าแชร์ Keys สาธารณะ
- อย่าโพสต์ keys ในตั๋วสนับสนุน
- อย่าแชร์ keys ทางอีเมลหรือแชท
- อย่ารวม keys ใน screenshots
-
อย่า Hard-Code Keys
// ❌ ผิด
define('OMISE_SECRET_KEY', 'skey_test_5xp...');
// ✅ ถูกต้อง
define('OMISE_SECRET_KEY', getenv('OMISE_SECRET_KEY'));
ข้อผิดพลาด Authentication
Key ไม่ถูกต้อง
{
"object": "error",
"location": "https://www.omise.co/api-errors#authentication-failure",
"code": "authentication_failure",
"message": "authentication failed"
}
สาเหตุ:
- ใช้ key type ผิด (public กับ secret)
- พิมพ์ผิดใน API key
- ใช้ key ที่ถูกลบแล้ว
- Key ไม่ตรงกับสภาพแวดล้อม (test กับ live)
วิธีแก้ไข: ตรวจสอบ key ของคุณใน dashboard อีกครั้งและตรวจสอบว่าคุณกำลังใช้ key type ที่ถูกต้อง
ขาด Authentication
{
"object": "error",
"location": "https://www.omise.co/api-errors#authentication-required",
"code": "authentication_required",
"message": "authentication required"
}
สาเหตุ: ไม่มี API key ที่ให้ไว้ในคำขอ
วิธีแก้ไข: ตรวจสอบให้แน่ใจว่า HTTP client ของคุณถูกกำหนดค่าให้ส่ง Basic Authentication headers