المدفوعات
نقاط النهاية لمعالجة المدفوعات باستخدام Stripe.
تكامل Stripe
يستخدم SalonBookIt Stripe لمعالجة المدفوعات. يتعامل الويدجت مع كل التدفق تلقائياً. هذه النقاط النهائية للتكاملات المخصصة.
POST
/api/v1/pagos/intent/
يُنشئ PaymentIntent من Stripe لمعالجة دفعة.
معلمات الجسم
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
cliente_id |
integer | نعم | معرف العميل |
amount |
integer | نعم | المبلغ بالسنتات (مثال: 2500 = 25.00€) |
type |
string | نعم | booking, order أو points |
reference_id |
integer | نعم | معرف الحجز أو الطلب أو حزمة النقاط |
مثال على الطلب
cURL
curl -X POST "https://app.salonbookit.com/api/v1/pagos/intent/" \
-H "X-API-Key: hh_pub_live_abc123..." \
-H "Authorization: Bearer eyJhbG..." \
-H "Content-Type: application/json" \
-d '{
"cliente_id": 456,
"amount": 2500,
"type": "booking",
"reference_id": 12345
}'
الاستجابة (200 OK)
JSON
{
"success": true,
"data": {
"client_secret": "pi_3N...secret_abc123",
"payment_intent_id": "pi_3N...",
"amount": 2500,
"currency": "eur",
"stripe_publishable_key": "pk_live_...",
"customer_id": "cus_abc123"
}
}
الاستخدام في الواجهة الأمامية
استخدم client_secret مع Stripe.js لإكمال الدفع:
JavaScript
// تهيئة Stripe
const stripe = Stripe('pk_live_...');
const elements = stripe.elements({
clientSecret: response.data.client_secret
});
// إنشاء عنصر البطاقة
const cardElement = elements.create('card');
cardElement.mount('#card-element');
// تأكيد الدفع
const { error, paymentIntent } = await stripe.confirmCardPayment(
response.data.client_secret,
{
payment_method: {
card: cardElement,
billing_details: {
name: 'Juan Pérez',
email: 'juan@email.com'
}
}
}
);
if (error) {
console.error('Error:', error.message);
} else if (paymentIntent.status === 'succeeded') {
// دفع ناجح
console.log('تم الدفع:', paymentIntent.id);
}
POST
/api/v1/pagos/confirmar/
يؤكد الدفع بعد أن يعالجه Stripe.
معلمات الجسم
| المعامل | النوع | الوصف |
|---|---|---|
payment_intent_id |
string | معرف PaymentIntent من Stripe |
الاستجابة (200 OK)
JSON
{
"success": true,
"data": {
"pago_id": 789,
"estado": "completado",
"monto": 25.00,
"moneda": "EUR",
"reserva_actualizada": true,
"puntos_otorgados": 25,
"recibo_url": "https://pay.stripe.com/receipts/..."
}
}
Webhook الخاص بـ Stripe
يستقبل SalonBookIt webhooks من Stripe تلقائياً على:
POST https://app.salonbookit.com/api/v1/webhooks/stripe/
الأحداث المعالجة:
| حدث Stripe | الإجراء |
|---|---|
payment_intent.succeeded |
يُعلّم الدفع كمكتمل، يحدّث الحجز |
payment_intent.payment_failed |
يُعلّم الدفع كفاشل، يُبلغ العميل |
charge.refunded |
يسجل الاسترداد |
charge.dispute.created |
يُبلغ النشاط التجاري بالنزاع |
لا تحتاج لتكوين أي شيء
يتم تكوين webhook الخاص بـ Stripe تلقائياً عند ربط حساب Stripe في لوحة التحكم.
أخطاء الدفع
| الرمز | HTTP | الوصف |
|---|---|---|
STRIPE_NOT_CONFIGURED |
400 | النشاط التجاري ليس لديه Stripe مُعدّ |
INVALID_AMOUNT |
400 | مبلغ غير صالح (يجب أن يكون موجباً) |
BOOKING_ALREADY_PAID |
400 | تم دفع الحجز بالفعل |
PAYMENT_FAILED |
400 | خطأ في معالجة الدفع (راجع رسالة Stripe) |
CARD_DECLINED |
400 | البطاقة مرفوضة |
العملات المدعومة
| الرمز | العملة | الرمز |
|---|---|---|
EUR |
Euro | € |
USD |
الدولار الأمريكي | $ |
GBP |
الجنيه الإسترليني | £ |
AED |
الدرهم الإماراتي | د.إ |