Stripe Connector
Stripe Connector
เชื่อมต่อบัญชี Stripe ของคุณกับ Brevo ผ่าน Tajo เพื่อการซิงค์ข้อมูลการชำระเงินที่สมบูรณ์ การจัดการ subscription lifecycle และระบบอัตโนมัติทางการตลาดที่ขับเคลื่อนด้วยรายได้
ภาพรวม
| คุณสมบัติ | ค่า |
|---|---|
| แพลตฟอร์ม | Stripe |
| หมวดหมู่ | E-commerce |
| ความซับซ้อนในการตั้งค่า | ง่าย |
| การผสานรวมอย่างเป็นทางการ | ใช่ |
| ข้อมูลที่ซิงค์ | ลูกค้า การชำระเงิน Subscriptions Invoices เหตุการณ์ |
| API Base URL | https://api.stripe.com/v1 |
ฟีเจอร์
- การซิงค์ลูกค้า - ซิงค์ลูกค้า Stripe กับผู้ติดต่อ Brevo รวมถึง metadata
- การติดตามการชำระเงิน - ติดตามการชำระเงินที่สำเร็จ การคืนเงิน และการเรียกเก็บที่ล้มเหลว
- การจัดการ subscription - ซิงค์เหตุการณ์ subscription lifecycle สำหรับแคมเปญ retention
- ข้อมูล invoice - ซิงค์รายละเอียด invoice สำหรับระบบอัตโนมัติหลังการซื้อและการต่ออายุ
- การระบุแหล่งที่มาของรายได้ - แมป lifetime value และ MRR กับแอตทริบิวต์ Brevo
- เหตุการณ์ webhook - การแจ้งเตือนเหตุการณ์แบบเรียลไทม์สำหรับกิจกรรมการชำระเงินทั้งหมด
- รองรับหลายสกุลเงิน - จัดการการชำระเงินข้ามหลายสกุลเงิน
- การติดตาม Checkout session - ติดตาม Stripe Checkout สำหรับการกู้คืนการชำระเงินที่ถูกละทิ้ง
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- บัญชี Stripe ที่มีสิทธิ์เข้าถึง API
- Stripe API keys (publishable และ secret keys)
- บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
- บัญชี Tajo
การยืนยันตัวตน
การยืนยันตัวตนด้วย API Key
Stripe ใช้การยืนยันตัวตน bearer token กับ secret API key ของคุณ
curl https://api.stripe.com/v1/customers \ -u sk_live_YOUR_SECRET_KEY:ความปลอดภัย API Key
อย่าเปิดเผย secret key ในโค้ดฝั่ง client ใช้ publishable key สำหรับการดำเนินการ frontend และ secret key เฉพาะบนเซิร์ฟเวอร์ของคุณเท่านั้น
Restricted API Keys
สร้าง restricted keys พร้อมสิทธิ์เฉพาะเพื่อความปลอดภัยที่เพิ่มขึ้น:
- ไปที่ Stripe Dashboard > Developers > API Keys
- คลิก “Create restricted key”
- ให้สิทธิ์เฉพาะที่ Tajo ต้องการ
สิทธิ์ที่จำเป็น
customers: readcharges: readpayment_intents: readsubscriptions: readinvoices: readevents: readproducts: readprices: readการกำหนดค่า
การตั้งค่าพื้นฐาน
connectors: stripe: enabled: true secret_key: "${STRIPE_SECRET_KEY}" webhook_secret: "${STRIPE_WEBHOOK_SECRET}"
# Data sync options sync: customers: true payments: true subscriptions: true invoices: true products: true
# Brevo list assignment lists: all_customers: 20 subscribers: 21 churned: 22การแมปฟิลด์
แมปข้อมูลลูกค้า Stripe กับแอตทริบิวต์ผู้ติดต่อ Brevo:
การแมปค่าเริ่มต้น
| Parameter | Type | Description |
|---|---|---|
email required | string | ที่อยู่อีเมลลูกค้า (ตัวระบุที่ไม่ซ้ำกัน) |
name optional | string | ชื่อเต็มของลูกค้า แบ่งเป็น FIRSTNAME/LASTNAME |
phone optional | string | แมปกับแอตทริบิวต์ SMS สำหรับ WhatsApp/SMS |
currency optional | string | สกุลเงินเริ่มต้นของลูกค้า |
created optional | timestamp | วันที่สร้างลูกค้าใน Stripe |
metadata optional | object | Custom key-value metadata จาก Stripe |
subscriptions optional | array | รายละเอียด subscription ที่ใช้งานอยู่ |
balance optional | integer | ยอดคงเหลือบัญชีลูกค้าในหน่วย cents |
การแมป Custom Attribute
field_mapping: # Standard fields email: email name: FULLNAME phone: SMS
# Payment metrics total_spent: TOTAL_SPENT payment_count: PAYMENT_COUNT last_payment_date: LAST_PAYMENT_DATE average_order_value: AOV
# Subscription fields subscription_status: SUB_STATUS plan_name: PLAN_NAME mrr: MONTHLY_REVENUE subscription_start: SUB_START_DATE
# Custom metadata metadata.customer_tier: VIP_TIER metadata.referral_source: REFERRAL_SOURCEAPI Endpoints
Core Endpoints
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
GET | /v1/customers | แสดงรายการลูกค้าทั้งหมด |
POST | /v1/customers | สร้างลูกค้า |
GET | /v1/customers/{id} | ดึงลูกค้า |
POST | /v1/customers/{id} | อัปเดตลูกค้า |
GET | /v1/charges | แสดงรายการ charges ทั้งหมด |
GET | /v1/payment_intents | แสดงรายการ payment intents |
Subscription Endpoints
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
GET | /v1/subscriptions | แสดงรายการ subscriptions |
GET | /v1/subscriptions/{id} | ดึง subscription |
GET | /v1/invoices | แสดงรายการ invoices |
GET | /v1/invoices/upcoming | ดึง invoice ที่กำลังจะมาถึง |
GET | /v1/products | แสดงรายการสินค้า |
GET | /v1/prices | แสดงรายการราคา |
Event Endpoints
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
GET | /v1/events | แสดงรายการเหตุการณ์ |
GET | /v1/events/{id} | ดึงเหตุการณ์ |
เหตุการณ์
เหตุการณ์การชำระเงิน
| เหตุการณ์ | ทริกเกอร์ | กรณีใช้งาน |
|---|---|---|
payment_intent.succeeded | การชำระเงินสำเร็จ | การยืนยันคำสั่งซื้อ |
payment_intent.payment_failed | การชำระเงินล้มเหลว | อีเมลกู้คืน |
charge.refunded | ประมวลผลการคืนเงิน | การแจ้งเตือนการคืนเงิน |
charge.dispute.created | เริ่ม chargeback | การจัดการข้อพิพาท |
เหตุการณ์ Subscription
| เหตุการณ์ | ทริกเกอร์ | กรณีใช้งาน |
|---|---|---|
customer.subscription.created | สมัคร subscription ใหม่ | เวิร์กโฟลว์ onboarding |
customer.subscription.updated | เปลี่ยนแผน | เวิร์กโฟลว์ upgrade/downgrade |
customer.subscription.deleted | ยกเลิก subscription | การป้องกัน churn |
customer.subscription.trial_will_end | Trial สิ้นสุดใน 3 วัน | แคมเปญ conversion ทดลองใช้ |
invoice.payment_failed | การชำระเงิน subscription ล้มเหลว | ลำดับอีเมล dunning |
เหตุการณ์ลูกค้า
| เหตุการณ์ | ทริกเกอร์ | กรณีใช้งาน |
|---|---|---|
customer.created | เพิ่มลูกค้าใหม่ | อีเมลต้อนรับ |
customer.updated | ข้อมูลลูกค้าเปลี่ยน | การซิงค์แอตทริบิวต์ |
customer.deleted | ลบลูกค้า | Cleanup |
ตัวอย่างโค้ด
เริ่มต้น Connector
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Stripeawait tajo.connectors.connect('stripe', { secretKey: process.env.STRIPE_SECRET_KEY, webhookSecret: process.env.STRIPE_WEBHOOK_SECRET});รันการซิงค์ลูกค้า
// Full historical syncawait tajo.connectors.sync('stripe', { type: 'full', resources: ['customers', 'subscriptions', 'payments'], since: '2023-01-01'});
// Check sync statusconst status = await tajo.connectors.status('stripe');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// customersSynced: 12500,// subscriptionsSynced: 8200,// paymentsSynced: 45000// }จัดการ Stripe Webhooks
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
app.post('/webhooks/stripe', async (req, res) => { const sig = req.headers['stripe-signature'];
let event; try { event = stripe.webhooks.constructEvent( req.body, sig, process.env.STRIPE_WEBHOOK_SECRET ); } catch (err) { return res.status(400).send(`Webhook Error: ${err.message}`); }
// Forward to Tajo for Brevo sync await tajo.connectors.handleWebhook('stripe', { type: event.type, data: event.data.object });
res.status(200).json({ received: true });});ขีดจำกัดอัตรา
Stripe บังคับใช้ rate limits ต่อไปนี้:
| ประเภท | ขีดจำกัด | รายละเอียด |
|---|---|---|
| Live mode | 100 read คำขอ/วินาที | ต่อ secret key |
| Live mode | 100 write คำขอ/วินาที | ต่อ secret key |
| Test mode | 25 คำขอ/วินาที | ต่อ secret key |
| การส่ง webhook | 100,000 เหตุการณ์/วัน | ต่อ endpoint |
การจัดการ Rate Limit
Stripe ส่งคืนการตอบสนอง 429 Too Many Requests เมื่อเกินขีดจำกัด ใช้ exponential backoff ใช้ list endpoints พร้อม auto-pagination สำหรับการดึงข้อมูลจำนวนมาก
การแก้ไขปัญหา
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
| 401 Unauthorized | API key ไม่ถูกต้อง | ตรวจสอบ secret key ใน Stripe Dashboard |
| Webhook signature ล้มเหลว | Webhook secret ไม่ถูกต้อง | คัดลอก webhook signing secret ใหม่จาก Dashboard |
| ลูกค้าไม่ซิงค์ | ไม่มีอีเมลในลูกค้า Stripe | ตรวจสอบให้แน่ใจว่าอีเมลถูกตั้งค่าใน Stripe customer records |
| ข้อมูล subscription หายไป | สิทธิ์ไม่เพียงพอ | อัปเดตสิทธิ์ restricted key |
| เหตุการณ์ซ้ำกัน | การส่ง webhook ซ้ำ | ใช้ idempotency กับ event IDs |
โหมด Debug
เปิดใช้งาน verbose logging:
connectors: stripe: debug: true log_level: verbose log_webhooks: trueทดสอบการเชื่อมต่อ
tajo connectors test stripe# ✓ API connection successful# ✓ Customers readable# ✓ Subscriptions readable# ✓ Payments readable# ✓ Webhook endpoint verifiedแนวทางปฏิบัติที่ดีที่สุด
- ใช้ restricted API keys - สร้าง keys ที่มีสิทธิ์ขั้นต่ำที่จำเป็น
- ตรวจสอบลายเซ็น webhook เสมอ - ป้องกันเหตุการณ์ webhook ที่ปลอม
- จัดการ idempotency - ใช้ Stripe event IDs เพื่อป้องกันการประมวลผลซ้ำ
- ซิงค์ customer metadata - เก็บข้อมูลที่เกี่ยวข้องกับการตลาดใน Stripe metadata fields
- ตรวจสอบการส่ง webhook - ตรวจสอบ Stripe Dashboard สำหรับการส่งที่ล้มเหลว
- ใช้ test mode ก่อน - ตรวจสอบการผสานรวมของคุณกับ Stripe test mode และ test clocks
ความปลอดภัย
- การยืนยันตัวตนด้วย API Key - การเข้าถึงด้วย secret key พร้อมรองรับ restricted key
- การตรวจสอบลายเซ็น webhook - การตรวจสอบลายเซ็น HMAC SHA-256
- การเข้ารหัส TLS - การสื่อสาร API ทั้งหมดเข้ารหัสผ่าน HTTPS
- ความสอดคล้องกับ PCI - Stripe จัดการความสอดคล้องกับ PCI DSS สำหรับข้อมูลการชำระเงิน
- IP whitelisting - การจำกัด IP เสริมสำหรับการเข้าถึง API