การตั้งค่าเวบฮุก
เรียนรู้วิธีการกำหนดค่าจุดสิ้นสุดเวบฮุกในแดชบอร์ด Omise และตั้งค่าเซิร์ฟเวอร์ของคุณเพื่อรับการแจ้งเตือนเหตุการณ์การชำระเงินแบบเรียลไทม์
ภาพรวม
เวบฮุกช่วยให้ Omise สามารถส่งการแจ้งเตือนแบบเรียลไทม์ไปยังเซิร์ฟเวอร์ของคุณเมื่อมีเหตุการณ์เกิดขึ้นในบัญชีของคุณ คำแนะนำนี้ครอบคลุม:
- การสร้างและกำหนดค่าจุดสิ้นสุดเวบฮุกในแดชบอร์ด
- การตั้งค่าจุดสิ้นสุด HTTPS ที่ปลอดภัย
- การทดสอบเวบฮุกในเครื่องด้วย ngrok
- การจัดการจุดสิ้นสุดหลายรายการ
- การตรวจสอบการกำหนดค่าเวบฮุกของคุณ
การกำหนดค่าแดชบอร์ด
กา รสร้างจุดสิ้นสุดเวบฮุก
ทำตามขั้นตอนเหล่านี้เพื่อสร้างจุดสิ้นสุดเวบฮุกในแดชบอร์ด Omise:
-
นำทางไปยังการตั้งค่าเวบฮุก
- ลงชื่อเข้าสู่แดชบอร์ด Omiseของคุณ
- ไปที่ การตั้งค่า > เวบฮุก
- คลิกปุ่ม สร้างเวบฮุก
-
กำหนดค่า URL จุดสิ้นสุด
- ป้อน URL จุดสิ้นสุด HTTPS ของคุณ (เช่น
https://api.example.com/webhooks/omise) - ตรวจสอบให้แน่ใจว่า URL สามารถเข้าถึงได้จากอินเทอร์เน็ต
- จุดสิ้นสุดต้องยอมรับคำขอ POST
- ป้อน URL จุดสิ้นสุด HTTPS ของคุณ (เช่น
-
เลือกเหตุการณ์เพื่อสมัครสมาชิก
- เลือก เหตุการณ์ทั้งหมด เพื่อรับการแจ้งเตือนเวบฮุกทั้งหมด
- หรือเลือกเหตุการณ์เฉพาะ (charge.create, charge.complete, refund.create ฯลฯ)
- คุณสามารถแก้ไขการสมัครสมาชิกเหตุการณ์ในภายหลัง
-
บันทึกและดึงคีย์เวบฮุก
- คลิก สร้าง เพื่อสร้างจุดสิ้นสุดเวบฮุก
- คัดลอกและเก็บ Webhook Signing Key ไว้อย่างปลอดภัย
- คีย์นี้ใช้เพื่อตรวจสอบลายเซ็นเวบฮุก (แสดงเพียงครั้งเดียว)
องค์ประกอบส่วนติดต่อแดชบอร์ด
หน้าการกำหนดค่าเวบฮุกแสดง:
- URL จุดสิ้นสุด: ปลายทางสำหรับเหตุการณ์เวบฮุก
- สถานะ: สลับ Active/Inactive
- เหตุการณ์: รายชื่อประเภทเหตุการณ์ที่สมัครสมาชิก
- การจัดส่งล่าสุด: บันทึกความพยายามเวบฮุกล่าสุดพร้อมรหัสการตอบสนอง
- Signing Key: ใช้สำหรับการตรวจสอบลายเซ็น HMAC-SHA256
การจัดการจุดสิ้นสุดหลายรายการ
คุณสามารถกำหนดค่าจุดสิ้นสุดเวบฮุกหลายรายการสำหรับวัตถุประสงค์ที่แตกต่างกัน:
จุดสิ้นสุดการผลิต:
URL: https://api.example.com/webhooks/omise
เหตุการณ์: เหตุการณ์ทั้งหมด
สถานะ: Active
จุดสิ้นสุดสำรอง:
URL: https://backup.example.com/webhooks/omise
เหตุการณ์: เหตุการณ์สำคัญเท่านั้น (charge.complete, refund.create)
สถานะ: Active
จุดสิ้นสุดการวิเคราะห์:
URL: https://analytics.example.com/webhooks/omise
เหตุการณ์: เหตุการณ์ทั้งหมด
สถานะ: Active
แนวทางปฏิบัติที่ดีสำหรับจุดสิ้นสุดหลายรายการ:
- ใช้จุดสิ้นสุดแยกต่างหากสำหรับการผลิต, staging และพัฒนา
- สร้างจุดสิ้นสุดเฉพาะสำหรับบริการต่างๆ (บัญชี, การวิเคราะห์, การแจ้งเตือน)
- ตรวจสอบอัตราความสำเร็จในการจัดส่งสำหรับแต่ละจุดสิ้นสุด
- ปิดใช้งานจุดสิ้นสุดที่ไม่ใช้งานเพื่อลดเ สียงรบกวน
ข้อกำหนดจุดสิ้นสุด
HTTPS และ SSL/TLS
จุดสิ้นสุดเวบฮุกทั้งหมดต้องเป็นไปตามข้อกำหนดความปลอดภัยเหล่านี้:
จำเป็น:
- โปรโตคอล HTTPS (HTTP ไม่รองรับ)
- ใบรับรอง SSL/TLS ที่ถูกต้องจาก CA ที่เชื่อถือได้
- TLS 1.2 หรือสูงกว่า
- ชุดไซเฟอร์ที่แข็งแกร่ง
แนะนำ:
- ใบรับรองจาก Let's Encrypt, DigiCert หรือ CA ที่เชื่อถือได้อื่นๆ
- การต่ออายุใบรับรองอัตโนมัติ
- ส่วนหัว HSTS (HTTP Strict Transport Security)
# ตัวอย่างการกำหนดค่า SSL ของ Nginx
server {
listen 443 ssl http2;
server_name api.example.com;
ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /webhooks/omise {
proxy_pass http://localhost:3000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
ข้อกำหนดการตอบสนอง
จุดสิ้นสุดของคุณต้องตอบสนองอย่างถูกต้องต่อการจัดส่งเวบฮุก:
การตอบสนองแบบสำเร็จ:
- รหัสสถานะ HTTP: 200-299 (แนะนำ 200 OK)
- ตอบสนองภายใน 10 วินาที
- ส่งกลับทันที่โดยไม่รอการประมวลผล
การตอบสนองความล้มเหลว:
- รหัสสถานะ HTTP: 400-599 เรียกใช้การลองใหม่อัตโนมัติ
- รหัสสถานะนอกขอบเขต 200-299 ถือว่าล้มเหลว
// ตัวอย่าง Node.js/Express
app.post('/webhooks/omise', async (req, res) => {
try {
// ตรวจสอบลายเซ็นก่อน
const isValid = verifySignature(req);
if (!isValid) {
return res.status(401).json({ error: 'Invalid signature' });
}
// ตอบสนองทันที่ (อย่ารอการประมวลผล)
res.status(200).json({ received: true });
// ประมวลผลเวบฮุกแบบไม่ซิงโครนัส
processWebhookAsync(req.body);
} catch (error) {
console.error('Webhook error:', error);
res.status(500).json({ error: 'Internal server error' });
}
});
การตั้งค่าเซิร์ฟเวอร์
การตั้งค่า URL ที่ปลอดภัย
ใช้ URL ที่มีชื่อโดเมนแบบเต็มและพอร์ต HTTPS:
ตัวอย่าง:
https://api.example.com/webhooks/omise (สำหรับการผลิต)
https://staging-api.example.com/webhooks/omise (สำหรับ staging)
https://dev-api.example.com/webhooks/omise (สำหรับพัฒนา)
หลีกเลี่ยง:
http://api.example.com/webhooks/omise (HTTP ไม่อนุญาต)
http://localhost:3000/webhooks (localhost ไม่สามารถเข้าถึงได้จากอินเทอร์เน็ต)
https://192.168.1.1/webhooks (IP ที่เป็นส่วนตัวไม่สามารถเข้าถึงได้)
เสริมทำให้แข็งแกร่งขนาด
ปรับปรุงความมั่นคงของจุดสิ้นสุด:
// Node.js - การลิมิตอัตรา
const rateLimit = require('express-rate-limit');
const webhookLimiter = rateLimit({
windowMs: 60 * 1000, // 1 นาที
max: 100, // ขีดจำกัด 100 คำขอต่อนาที
message: 'เกินขีดจำกัดอัตรา'
});
app.post('/webhooks/omise', webhookLimiter, (req, res) => {
// ตัวจัดการเวบฮุก
});
# Python - Validation
from marshmallow import Schema, ValidationError
class WebhookSchema(Schema):
key = fields.Str(required=True)
id = fields.Str(required=True)
data = fields.Dict(required=True)
schema = WebhookSchema()
@app.route('/webhooks/omise', methods=['POST'])
def handle_webhook():
try:
data = schema.load(request.json)
except ValidationError as err:
return jsonify({'error': err.messages}), 400
การตั้งค่าการทดสอบในเครื่องด้วย ngrok
สำหรับการพัฒนาในเครื่อง, ใช้ ngrok เพื่อสร้าง URL สาธารณะ:
# ติดตั้ง ngrok
brew install ngrok # macOS
choco install ngrok # Windows
# เริ่มต้นอุโมงค์
ngrok http 3000
# ใช้ URL ที่ไ ด้มาในแดชบอร์ด Omise
# เช่น: https://abc123.ngrok.io/webhooks/omise
การตรวจสอบการตั้งค่า
การทดสอบการเชื่อมต่อจุดสิ้นสุด
ใช้ Postman หรือ curl เพื่อทดสอบจุดสิ้นสุด:
# ทดสอบจุดสิ้นสุด
curl -X POST https://api.example.com/webhooks/omise \
-H "Content-Type: application/json" \
-d '{"key":"test","data":{"id":"test_123"}}'
# ควรส่งกลับ 200 OK
# คำตอบ: {"received":true}
การดูผลการจัดส่ง
ตรวจสอบการจัดส่งสำเร็จในแดชบอร์ด:
- ไปที่ การตั้งค่า > เวบฮุก
- เลือกจุดสิ้นสุด
- ดู Recent Deliveries สำหรับสถานะ
- คลิกบนการจัดส่งเพื่อดูรายละเอียด
แนวทางปฏิบัติที่ดี
ความปลอดภัย
- ตรวจสอบลายเซ็นเวบฮุกทั้งหมด
- ใช้ HTTPS เสมอ
- เปลี่ยน signing key เป็นระยะ
- จำกัดอัตราเข้าถึง