ข้ามไปยังเนื้อหาหลัก

การตั้งค่าเวบฮุก

เรียนรู้วิธีการกำหนดค่าจุดสิ้นสุดเวบฮุกในแดชบอร์ด Omise และตั้งค่าเซิร์ฟเวอร์ของคุณเพื่อรับการแจ้งเตือนเหตุการณ์การชำระเงินแบบเรียลไทม์

ภาพรวม

เวบฮุกช่วยให้ Omise สามารถส่งการแจ้งเตือนแบบเรียลไทม์ไปยังเซิร์ฟเวอร์ของคุณเมื่อมีเหตุการณ์เกิดขึ้นในบัญชีของคุณ คำแนะนำนี้ครอบคลุม:

  • การสร้างและกำหนดค่าจุดสิ้นสุดเวบฮุกในแดชบอร์ด
  • การตั้งค่าจุดสิ้นสุด HTTPS ที่ปลอดภัย
  • การทดสอบเวบฮุกในเครื่องด้วย ngrok
  • การจัดการจุดสิ้นสุดหลายรายการ
  • การตรวจสอบการกำหนดค่าเวบฮุกของคุณ

การกำหนดค่าแดชบอร์ด

การสร้างจุดสิ้นสุดเวบฮุก

ทำตามขั้นตอนเหล่านี้เพื่อสร้างจุดสิ้นสุดเวบฮุกในแดชบอร์ด Omise:

  1. นำทางไปยังการตั้งค่าเวบฮุก

    • ลงชื่อเข้าสู่แดชบอร์ด Omiseของคุณ
    • ไปที่ การตั้งค่า > เวบฮุก
    • คลิกปุ่ม สร้างเวบฮุก
  2. กำหนดค่า URL จุดสิ้นสุด

    • ป้อน URL จุดสิ้นสุด HTTPS ของคุณ (เช่น https://api.example.com/webhooks/omise)
    • ตรวจสอบให้แน่ใจว่า URL สามารถเข้าถึงได้จากอินเทอร์เน็ต
    • จุดสิ้นสุดต้องยอมรับคำขอ POST
  3. เลือกเหตุการณ์เพื่อสมัครสมาชิก

    • เลือก เหตุการณ์ทั้งหมด เพื่อรับการแจ้งเตือนเวบฮุกทั้งหมด
    • หรือเลือกเหตุการณ์เฉพาะ (charge.create, charge.complete, refund.create ฯลฯ)
    • คุณสามารถแก้ไขการสมัครสมาชิกเหตุการณ์ในภายหลัง
  4. บันทึกและดึงคีย์เวบฮุก

    • คลิก สร้าง เพื่อสร้างจุดสิ้นสุดเวบฮุก
    • คัดลอกและเก็บ 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}

การดูผลการจัดส่ง

ตรวจสอบการจัดส่งสำเร็จในแดชบอร์ด:

  1. ไปที่ การตั้งค่า > เวบฮุก
  2. เลือกจุดสิ้นสุด
  3. ดู Recent Deliveries สำหรับสถานะ
  4. คลิกบนการจัดส่งเพื่อดูรายละเอียด

แนวทางปฏิบัติที่ดี

ความปลอดภัย

  • ตรวจสอบลายเซ็นเวบฮุกทั้งหมด
  • ใช้ HTTPS เสมอ
  • เปลี่ยน signing key เป็นระยะ
  • จำกัดอัตราเข้าถึง

ความน่าเชื่อถือ

  • ประมวลผลเวบฮุกแบบไม่ซิงโครนัส
  • ใช้ลอจิกการลองใหม่
  • บันทึกเหตุการณ์ทั้งหมด
  • ตรวจสอบสุขภาพจุดสิ้นสุด

การดำเนินการ

  • ตั้งค่าการตรวจสอบสุขภาพ
  • ใช้บริการตรวจสอบ
  • ตั้งค่าการแจ้งเตือน
  • ทำการทดสอบปกติ

ทรัพยากรที่เกี่ยวข้อง

ขั้นตอนถัดไป

  1. กำหนดค่าจุดสิ้นสุดแรก ในแดชบอร์ด
  2. ตั้งค่า ngrok สำหรับการพัฒนาในเครื่อง
  3. ใช้ลายเซ็นต่างๆ เพื่อความปลอดภัย
  4. ทดสอบการจัดส่ง ด้วย Postman หรือ curl
  5. ดูการจัดส่งแบบเรียลไทม์ ในแดชบอร์ด

พร้อมเรียนรู้เกี่ยวกับเหตุการณ์ ดูประเภทเหตุการณ์

ต้องการเรียนรู้เกี่ยวกับความปลอดภัย ดูความปลอดภัยเวบฮุก