جریان پرداخت

هتل در پنل تعیین می‌کند کدام روش‌های پرداخت را برای رزرو آنلاین بپذیرد. موتور رزرو این فهرست را نمایش می‌دهد و برای هر روش مسیر متفاوتی را دنبال می‌کند. این راهنما چهار روش پرداخت و کارهای لازم برای هر کدام را شرح می‌دهد.

فهرست روش‌های پرداخت#

ترمینال
curl "https://test.hms.gen.tr/external/online/payment/type?hotelID=1000" \
  -H "Authorization: Bearer $HMS_TOKEN"
پاسخ · 200
{
    "success": true,
    "count": 3,
    "items": [
        {
            "title": "Pay at Hotel",
            "title_translate": "odeme.otelde_odeme",
            "typeID": 1
        },
        {
            "title": "Bank Transfer",
            "title_translate": "odeme.havale",
            "typeID": 3
        },
        {
            "title": "Online Card Payment",
            "title_translate": "odeme.online_odeme",
            "typeID": 10
        }
    ]
}
typeIDروشچه اتفاقی می‌افتد
1پرداخت در هتلوجهی دریافت نمی‌شود؛ رزرو مستقیماً ارسال می‌شود.
3انتقال بانکیحساب‌های بانکی هتل نمایش داده می‌شود؛ رزرو با وضعیت «در انتظار پرداخت» ارسال می‌شود.
9کارت اعتباری (تضمین رزرو)اطلاعات کارت همراه رزرو در PaymentCard به HMS ارسال می‌شود و هتل مبلغ را از کارت برداشت می‌کند.
10پرداخت آنلاین (درگاه پرداخت)HMS یک نشست پرداخت آغاز می‌کند؛ مهمان به صفحه پرداخت ارائه‌دهنده منتقل می‌شود و سپس به returnUrl شما بازمی‌گردد.

روش 1 · پرداخت در هتل#

مرحله اضافه‌ای لازم نیست. در صورت تمایل می‌توانید برای دریافت تأییدیه، اندپوینت را فراخوانی کنید:

POST …/payment/type/1 → 200
{
    "success": true,
    "message": "payment_at_the_hotel"
}

روش 3 · انتقال بانکی#

حساب‌های بانکی‌ای را که هتل برای فروش آنلاین فعال کرده است دریافت کنید و به مهمان نمایش دهید:

ترمینال
curl -X POST "https://test.hms.gen.tr/external/online/payment/type/3" \
  -H "Authorization: Bearer $HMS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"hotelID": 1000}'
پاسخ · 200
{
    "success": true,
    "message": "payment_by_bank_transfer",
    "banks": [
        {
            "companyName": "Ziraat Bank",
            "holder": "Demo Turizm A.Ş.",
            "branchName": "Denizli",
            "branchNumber": "0123",
            "bankAccountNumber": "12345678-5001",
            "iban": "TR00 0001 0001 2345 6789 5001 01"
        }
    ]
}

اگر هیچ حسابی تعریف نشده باشد، bank_info_is_not_found برگردانده می‌شود؛ در این صورت این روش را از فهرست پنهان کنید.

روش 9 · کارت اعتباری#

این اندپوینت فقط اعلام می‌کند که باید اطلاعات کارت دریافت شود:

POST …/payment/type/9 → 200
{
    "success": true,
    "message": "credit_card_info_should_be_requested"
}

اطلاعات کارت را در فرم خودتان دریافت کنید و در فیلد PaymentCard هر آیتم RoomStays در ارسال رزرو بفرستید:

RoomStays[].PaymentCard
{
    "PaymentCard": {
        "CardHolder": {
            "fullname": "Ayşe Demir",
            "address": "Kumsal Cad. No: 12",
            "country": "Türkiye",
            "city": "Antalya"
        },
        "cardNumber": "5571135571135575",
        "expireDate": "0329",
        "cardCode": "MasterCard",
        "seriesCode": "000"
    }
}

روش 10 · پرداخت آنلاین#

با اطلاعات مهمان و سبد خرید یک نشست پرداخت آغاز کنید. همه فیلدها الزامی‌اند؛ فیلد ناقص با required_input_info_not_submitted و errors[] گزارش می‌شود.

درخواست
curl -X POST "https://test.hms.gen.tr/external/online/payment/type/10" \
  -H "Authorization: Bearer $HMS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "hotelID": 1000,
    "totalPrice": 2330.00,
    "orderID": "4811174883",
    "returnUrl": "https://booking.example.com/payment/result",
    "name": "Ayşe", "surname": "Demir",
    "email": "[email protected]", "phone": "05551112233",
    "city": "Denizli", "address": "Kumsal Cad. No: 12", "countryID": 1,
    "baskets": [
      { "id": 2,  "name": "Standard Room · Bed & Breakfast", "piece": 1, "price": 1930.00 },
      { "id": 12, "name": "Dinner", "piece": 1, "price": 400.00 }
    ]
  }'
پاسخ · 200
{
    "success": true,
    "message": "payment_order_code",
    "code": "<form method=\"post\" action=\"https://vpos.provider.example/3d\"><input type=\"hidden\" name=\"orderId\" value=\"4811174883\"> … </form><script>document.forms[0].submit()</script>"
}

code بازگشتی یک قطعه HTML است: بسته به ارائه‌دهنده درگاه پرداخت هتل، ممکن است یک فرم 3D Secure با ارسال خودکار، اسکریپت تغییر مسیر window.location یا فرم پرداخت تعبیه‌شده (مثلاً iyzico) باشد. این قطعه را بدون تغییر در صفحه پرداخت خود رندر کنید و سعی نکنید آن را تجزیه کنید. مهمان پرداخت را نزد ارائه‌دهنده کامل می‌کند و به returnUrl شما بازمی‌گردد؛ نتیجه با پارامترهای کوئری که به این آدرس افزوده می‌شوند اعلام می‌شود (sonuc=1 موفق، sonuc=0 ناموفق). شماره سفارش شما (orderID) همراه با رکورد پرداخت ذخیره می‌شود؛ هنگام بازگشت آن را با رکورد خودتان تطبیق دهید و فقط در صورت موفقیت پرداخت، رزرو را ارسال کنید.

فیلدتوضیح
totalPriceباید با جمع سبد خرید برابر باشد؛ همین مبلغ به ارائه‌دهنده ارسال می‌شود.
orderIDباید یکتا باشد. استفاده از ID رزرو، تطبیق حساب‌ها را ساده‌تر می‌کند.
countryIDid از فهرست کشورها.
baskets[]برای هر اتاق یا خدمت اضافی یک سطر. id شناسه نوع اتاق / پکیج، piece تعداد و price قیمت واحد است.

استفاده مستقیم از اطلاعات درگاه پرداخت#

اگر می‌خواهید به‌جای صفحه پرداخت HMS از سرور خودتان به ارائه‌دهنده متصل شوید، اندپوینت اطلاعات درگاه پرداخت شناسه پذیرنده، کلیدها و کد ارائه‌دهنده را برمی‌گرداند. این اطلاعات محرمانه‌اند: فقط سمت سرور از آن‌ها استفاده کنید و پیش از هر چیز این رویکرد را با HMS هماهنگ کنید.

پس از پرداخت#

  • در روش 10، رزرو را پس از تأیید پرداخت ارسال کنید؛ اگر پرداخت ناموفق بود، رزرو را ارسال نکنید.
  • در روش 3، رزرو را بلافاصله ارسال کنید؛ هتل پس از دریافت وجه، انتقال را در پنل ثبت می‌کند.
  • در ارسال رزرو، Total.amountAfterTaxes باید با مبلغ دریافت‌شده یا قابل دریافت برابر باشد.
آخرین به‌روزرسانی: 21 سپتامبر 2026اشتباهی دیدید؟ به ما اطلاع دهید