موصل Stripe
موصل Stripe
اربط حساب Stripe الخاص بك مع Brevo عبر Tajo لمزامنة كاملة لبيانات الدفع، وإدارة دورة حياة الاشتراكات، وأتمتة التسويق المدفوعة بالإيرادات.
نظرة عامة
| الخاصية | القيمة |
|---|---|
| المنصة | Stripe |
| الفئة | التجارة الإلكترونية |
| تعقيد الإعداد | سهل |
| تكامل رسمي | نعم |
| البيانات المُزامَنة | عملاء، مدفوعات، اشتراكات، فواتير، أحداث |
| عنوان URL الأساسي لـ API | https://api.stripe.com/v1 |
الميزات
- مزامنة العملاء - مزامنة عملاء Stripe مع جهات اتصال Brevo بما في ذلك البيانات الوصفية
- تتبع المدفوعات - تتبع المدفوعات الناجحة، والاسترداد، والرسوم الفاشلة
- إدارة الاشتراكات - مزامنة أحداث دورة حياة الاشتراكات لحملات الاحتفاظ
- بيانات الفواتير - مزامنة تفاصيل الفواتير لأتمتة ما بعد الشراء والتجديد
- إسناد الإيرادات - ربط القيمة الدائمة والإيراد الشهري المتكرر (MRR) بسمات Brevo
- أحداث Webhook - إشعارات أحداث آنية لجميع أنشطة الدفع
- دعم متعدد العملات - معالجة المدفوعات بعملات متعددة
- تتبع جلسات الدفع - تتبع Stripe Checkout لاسترداد المدفوعات المهجورة
المتطلبات الأساسية
قبل البدء، تأكد من توفر ما يلي:
- حساب Stripe مع وصول إلى API
- مفاتيح Stripe API (المفتاح القابل للنشر والمفتاح السري)
- حساب Brevo مع وصول إلى API
- حساب Tajo
المصادقة
مصادقة مفتاح API
يستخدم Stripe مصادقة bearer token مع مفتاح API السري الخاص بك.
curl https://api.stripe.com/v1/customers \ -u sk_live_YOUR_SECRET_KEY:أمان مفتاح API
لا تكشف أبدًا عن مفتاحك السري في الكود من جانب العميل. استخدم المفتاح القابل للنشر لعمليات الواجهة الأمامية والمفتاح السري فقط على الخادم الخاص بك.
مفاتيح API المقيدة
أنشئ مفاتيح مقيدة بصلاحيات محددة لأمان معزز:
- انتقل إلى 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 | بيانات وصفية مخصصة بصيغة مفتاح-قيمة من Stripe |
subscriptions optional | array | تفاصيل الاشتراكات النشطة |
balance optional | integer | رصيد حساب العميل بالسنتات |
تعيين السمات المخصصة
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_SOURCEنقاط نهاية واجهة البرمجة
نقاط النهاية الأساسية
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
GET | /v1/customers | سرد جميع العملاء |
POST | /v1/customers | إنشاء عميل |
GET | /v1/customers/{id} | استرجاع عميل |
POST | /v1/customers/{id} | تحديث عميل |
GET | /v1/charges | سرد جميع الرسوم |
GET | /v1/payment_intents | سرد نوايا الدفع |
نقاط نهاية الاشتراكات
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
GET | /v1/subscriptions | سرد الاشتراكات |
GET | /v1/subscriptions/{id} | استرجاع اشتراك |
GET | /v1/invoices | سرد الفواتير |
GET | /v1/invoices/upcoming | استرجاع الفاتورة القادمة |
GET | /v1/products | سرد المنتجات |
GET | /v1/prices | سرد الأسعار |
نقاط نهاية الأحداث
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
GET | /v1/events | سرد الأحداث |
GET | /v1/events/{id} | استرجاع حدث |
الأحداث
أحداث الدفع
| الحدث | المحفز | حالة الاستخدام |
|---|---|---|
payment_intent.succeeded | اكتمل الدفع | تأكيد الطلب |
payment_intent.payment_failed | فشل الدفع | بريد استرداد |
charge.refunded | تمت معالجة الاسترداد | إشعار الاسترداد |
charge.dispute.created | بدأ رد المبلغ | معالجة النزاع |
أحداث الاشتراك
| الحدث | المحفز | حالة الاستخدام |
|---|---|---|
customer.subscription.created | اشتراك جديد | تدفق التأهيل |
customer.subscription.updated | تغيير الخطة | تدفق الترقية/التخفيض |
customer.subscription.deleted | أُلغي الاشتراك | منع الفقد |
customer.subscription.trial_will_end | التجربة تنتهي في 3 أيام | حملة تحويل التجربة |
invoice.payment_failed | فشل دفع الاشتراك | تسلسل بريد المطالبة |
أحداث العميل
| الحدث | المحفز | حالة الاستخدام |
|---|---|---|
customer.created | تمت إضافة عميل جديد | بريد ترحيب |
customer.updated | تغيرت بيانات العميل | مزامنة السمات |
customer.deleted | أُزيل العميل | تنظيف |
أمثلة على الكود
تهيئة الموصل
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});تشغيل مزامنة العملاء
// مزامنة تاريخية كاملةawait tajo.connectors.sync('stripe', { type: 'full', resources: ['customers', 'subscriptions', 'payments'], since: '2023-01-01'});
// التحقق من حالة المزامنةconst 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}`); }
// إعادة التوجيه إلى Tajo لمزامنة Brevo await tajo.connectors.handleWebhook('stripe', { type: event.type, data: event.data.object });
res.status(200).json({ received: true });});حدود المعدل
يفرض Stripe حدود المعدل التالية:
| النوع | الحد | التفاصيل |
|---|---|---|
| الوضع المباشر | 100 طلب قراءة/ثانية | لكل مفتاح سري |
| الوضع المباشر | 100 طلب كتابة/ثانية | لكل مفتاح سري |
| وضع الاختبار | 25 طلب/ثانية | لكل مفتاح سري |
| تسليم Webhook | 100,000 حدث/يوم | لكل نقطة نهاية |
معالجة حد المعدل
يُعيد Stripe استجابة 429 Too Many Requests عند تجاوز الحدود. طبّق التراجع الأُسّي. استخدم نقاط نهاية القائمة مع التقسيم التلقائي لاسترجاع البيانات بالجملة.
استكشاف الأخطاء وإصلاحها
المشاكل الشائعة
| المشكلة | السبب | الحل |
|---|---|---|
| 401 Unauthorized | مفتاح API غير صالح | تحقق من المفتاح السري في Stripe Dashboard |
| فشل توقيع Webhook | سر webhook غير صحيح | أعد نسخ سر توقيع webhook من Dashboard |
| العميل غير مُزامَن | لا يوجد بريد إلكتروني على عميل Stripe | تأكد من تعيين البريد الإلكتروني على سجلات عملاء Stripe |
| بيانات الاشتراك مفقودة | صلاحيات غير كافية | حدّث صلاحيات المفتاح المقيد |
| أحداث مكررة | إعادة تسليم webhook | طبّق idempotency مع معرّفات الأحداث |
وضع التصحيح
تفعيل التسجيل المفصل:
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أفضل الممارسات
- استخدم مفاتيح API المقيدة - أنشئ مفاتيح بأدنى الصلاحيات المطلوبة
- تحقق دائمًا من توقيعات webhook - منع أحداث webhook المزورة
- تعامل مع idempotency - استخدم معرّفات أحداث Stripe لمنع المعالجة المكررة
- زامن البيانات الوصفية للعميل - خزّن البيانات ذات الصلة بالتسويق في حقول البيانات الوصفية لـ Stripe
- راقب تسليم webhook - تحقق من Stripe Dashboard للتسليمات الفاشلة
- استخدم وضع الاختبار أولاً - تحقق من تكاملك باستخدام وضع اختبار Stripe وساعات الاختبار
الأمان
- مصادقة مفتاح API - وصول قائم على المفتاح السري مع دعم المفاتيح المقيدة
- التحقق من توقيع Webhook - التحقق من توقيع HMAC SHA-256
- تشفير TLS - جميع اتصالات API مشفرة عبر HTTPS
- الامتثال لـ PCI - يتعامل Stripe مع الامتثال لـ PCI DSS لبيانات الدفع
- قائمة IP المسموح بها - قيود IP اختيارية للوصول إلى API