لیر حواله ترکیهخرده5,060 تومان▲ +0.28%دلار آمریکاخرده244,990 تومان▲ +0.46%یوروخرده279,310 تومان▲ +0.47%هر USDT به لیرخرده52.81 لیر▲ +0.06%لیر حواله ترکیهعمده4,970 تومان• —دلار آمریکاعمده240,280 تومان• —یوروعمده273,940 تومان• —هر USDT به لیرعمده51.83 لیر• —
آخرین بروزرسانی: 1405/07/05 - 18:15:06
مستندات فنی

API نرخ همکاران همتا گیفت

با این API، وب‌سایت، فروشگاه اینترنتی یا ربات شما نرخ‌های حساب همکاری خودتان را مستقیماً از همتا دریافت می‌کند؛ بدون ورود دستی قیمت و همیشه هم‌زمان با پنل همکاران.

معرفی

API همتا یک سرویس REST فقط‌خواندنی است که پاسخ را در قالب JSON و با کدگذاری UTF-8 برمی‌گرداند. هر کلید API به یک حساب همکاری تعلق دارد و فقط نرخ‌های همان حساب را برمی‌گرداند: بهای تمام‌شده شما از همتا و قیمت مشتری شما با حاشیه سودی که خودتان در پنل همکاران تعیین کرده‌اید. نرخ مرجع بازار در این API ارائه نمی‌شود.

آدرس پایه

https://hamtagift.com

همه درخواست‌ها باید از طریق HTTPS ارسال شوند.

احراز هویت

هر درخواست باید کلید API را در سرآیند Authorization و به شکل Bearer ارسال کند. کلیدها با پیشوند hamta_live_ شروع می‌شوند.

  1. وارد پنل همکاران شوید و صفحه «API و تلگرام» را باز کنید.
  2. یک کلید جدید بسازید (نقش‌های مالک، مدیر و توسعه‌دهنده امکان ساخت کلید دارند).
  3. کلید فقط یک بار نمایش داده می‌شود؛ آن را در یک متغیر محیطی امن روی سرور خود نگه دارید. همتا فقط نسخه رمزنگاری‌شده کلید را ذخیره می‌کند؛ اگر کلید را گم کردید، آن را باطل کنید و کلید جدید بسازید.
سرآیند درخواست
Authorization: Bearer hamta_live_…

کلید API را هرگز در کد سمت مرورگر (JavaScript صفحه)، اپلیکیشن موبایل یا مخزن کد عمومی قرار ندهید. درخواست را فقط از سرور خود ارسال کنید.

دریافت نرخ‌ها

GET/api/partner/v1/rates

نرخ‌های فعلی همه ابزارهای حساب همکاری شما را برمی‌گرداند. این درخواست پارامتر یا بدنه ندارد و پاسخ آن هرگز کش نمی‌شود (Cache-Control: no-store).

ساختار پاسخ

پاسخ موفق با کد وضعیت 200 برمی‌گردد. ساختار زیر دقیقاً همان کلیدهایی است که API برمی‌گرداند؛ به جای مقادیر عددی، نوع داده نوشته شده است. برای دیدن پاسخ واقعی حساب خودتان، صفحه «API و تلگرام» در پنل همکاران را ببینید.

ساختار پاسخ موفق
{
  "ok": true,
  "partner": "<string>",
  "updatedAt": "<ISO 8601 string | null>",
  "note": "buy = customer buys (خرید از ما), sell = customer sells (فروش به ما). null = not configured.",
  "rates": [
    {
      "code": "havaleLir",
      "label": "لیر حواله ترکیه",
      "unit": "TOMAN",
      "unitBasis": 1,
      "partnerCost": {
        "retail": {
          "buy": "<decimal string | null>",
          "sell": "<decimal string | null>"
        },
        "wholesale": {
          "buy": "<decimal string | null>",
          "sell": "<decimal string | null>"
        }
      },
      "customerPrice": {
        "retail": {
          "buy": "<decimal string | null>",
          "sell": "<decimal string | null>"
        },
        "wholesale": {
          "buy": "<decimal string | null>",
          "sell": "<decimal string | null>"
        }
      }
    },
    …
  ]
}

شرح فیلدها

فیلدنوعتوضیح
okbooleanدر پاسخ موفق همیشه true و در پاسخ خطا false است.
partnerstringنام شرکت شما، همان‌طور که در حساب همکاری ثبت شده است.
updatedAtstring | nullزمان آخرین به‌روزرسانی نرخ‌های مرجع همتا به قالب ISO 8601 (UTC)؛ اگر مشخص نباشد null است.
notestringیادداشت ثابت درباره معنای buy، sell و null.
ratesarrayفهرست ابزارها، همیشه با همین ترتیب.
rates[].codestringشناسه ثابت ابزار؛ در کد خود به این فیلد تکیه کنید، نه به label.
rates[].labelstringنام فارسی ابزار برای نمایش؛ ممکن است تغییر کند.
rates[].unit"TOMAN" | "TRY"واحد قیمت: TOMAN یعنی تومان، TRY یعنی لیر ترکیه.
rates[].unitBasisintegerقیمت برای این تعداد واحد است؛ مثلاً 1000 یعنی قیمت هر ۱۰۰۰ واحد.
rates[].partnerCost{ retail, wholesale }بهای تمام‌شده شما از همتا، به تفکیک سطح خرده (retail) و عمده (wholesale).
rates[].customerPrice{ retail, wholesale }قیمت مشتری شما: بهای تمام‌شده به‌علاوه حاشیه سودی که خودتان در پنل همکاران تعیین کرده‌اید. اگر برای آن جهت حاشیه‌ای تعیین نکرده باشید null است.
….buystring | nullقیمتی که مشتری از شما می‌خرد (خرید از ما).
….sellstring | nullقیمتی که مشتری به شما می‌فروشد (فروش به ما).

همه قیمت‌ها رشته عددی اعشاری (تا ۶ رقم اعشار) یا null هستند. null یعنی «تنظیم نشده»؛ هرگز آن را صفر در نظر نگیرید.

ابزارها

فهرست rates همیشه شامل این ابزارها با همین ترتیب است:

codeابزارunitunitBasis
havaleLirلیر حواله ترکیه (تومان برای هر لیر)TOMAN1
dollarدلار آمریکا (تومان برای هر دلار)TOMAN1
euroیورو (تومان برای هر یورو)TOMAN1
usdtToLirلیر ترکیه برای هر USDTTRY1
AMD_1000درام ارمنستان (تومان برای هر ۱۰۰۰ درام)TOMAN1000
usdtPriceتومان برای هر USDTTOMAN1
AFNافغانی افغانستان (تومان برای هر افغانی)TOMAN1
onlineShopلیر آنلاین شاپ (تومان برای هر لیر)TOMAN1
sipayلیر همتاکارت (تومان برای هر لیر)TOMAN1

خطاها

خطاهای API در قالب JSON و به شکل {"ok": false, "error": "…"} برمی‌گردند. دو پاسخ آخر جدول از لایه امنیتی سایت می‌آیند و متن ساده هستند، نه JSON.

وضعیتerrorمعنااقدام پیشنهادی
401missing_or_malformed_tokenسرآیند Authorization ارسال نشده یا کلید با قالب hamta_live_ نیست.سرآیند را به شکل Bearer و با کلید کامل ارسال کنید.
401invalid_tokenکلید شناخته‌شده نیست، باطل شده یا حساب همکاری فعال نیست.در پنل همکاران کلید جدید بسازید یا با همتا تماس بگیرید.
429rate_limitedبیش از ۶۰ درخواست در یک دقیقه با این کلید.به اندازه سرآیند Retry-After (ثانیه) صبر کنید و نتیجه را کش کنید.
503rates_unavailableنرخ‌ها موقتاً در دسترس نیستند.آخرین نرخ‌های معتبر خود را نگه دارید و بعداً دوباره تلاش کنید.
403—درخواست توسط قواعد امنیتی سایت رد شد (متن ساده Forbidden).اگر درخواست شما عادی است، با پشتیبانی همتا تماس بگیرید.
429—تعداد درخواست‌ها از یک IP بیش از حد مجاز است (متن ساده).به اندازه Retry-After صبر کنید و فاصله درخواست‌ها را بیشتر کنید.

محدودیت‌ها

  • حداکثر ۶۰ درخواست در دقیقه برای هر کلید API.
  • علاوه بر آن، هر آدرس IP برای کل سایت محدودیت درخواست جداگانه‌ای دارد (حداکثر حدود ۲ درخواست در ثانیه به‌طور پیوسته).
  • فقط روش GET پشتیبانی می‌شود.

نمونه کد آماده

نمونه‌های زیر کلید را از متغیر محیطی HAMTA_API_KEY می‌خوانند، خطاها را بررسی می‌کنند و قیمت خرده‌فروشی مشتری را برای هر ابزار چاپ می‌کنند. نمونه PHP برای فروشگاه‌های اینترنتی مانند ووکامرس یا لاراول مناسب است.

<?php
// Server side only: never send the API key to the browser.
$apiKey = getenv('HAMTA_API_KEY'); // hamta_live_...

$ch = curl_init('https://hamtagift.com/api/partner/v1/rates');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey, 'Accept: application/json'],
    CURLOPT_TIMEOUT        => 10,
]);
$body   = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
$error  = curl_error($ch);
curl_close($ch);

if ($body === false) {
    throw new RuntimeException('Hamta API unreachable: ' . $error);
}
$data = json_decode($body, true); // null for the plain-text 403/429 of the security layer
if ($status !== 200 || !is_array($data) || empty($data['ok'])) {
    // 401: check the key. 429: wait for Retry-After. 503: keep your last good prices.
    throw new RuntimeException('Hamta API error: ' . ($data['error'] ?? ('HTTP ' . $status)));
}

foreach ($data['rates'] as $rate) {
    // Prices are decimal strings or null (= not configured). Keep them as strings
    // (e.g. bcmath) rather than float for money.
    $sellToCustomer = $rate['customerPrice']['retail']['buy'];
    echo $rate['code'], ': ', $sellToCustomer ?? 'not configured', PHP_EOL;
}

توصیه‌ها

  • نتیجه را روی سرور خود دست‌کم یک دقیقه کش کنید و برای هر بازدید صفحه درخواست جدید نفرستید.
  • قیمت‌ها را به صورت رشته یا نوع اعشاری دقیق (Decimal، bcmath) پردازش کنید، نه عدد اعشاری شناور (float).
  • برای یافتن ابزار از فیلد code استفاده کنید؛ label فقط برای نمایش است.
  • مقدار null را «تنظیم نشده» نمایش دهید و هرگز به جای آن عدد دیگری قرار ندهید.
  • اگر درخواست ناموفق بود، آخرین نرخ‌های معتبر را همراه با زمان updatedAt آن‌ها نگه دارید.
  • برای هر سرویس یا محیط یک کلید جداگانه بسازید تا در صورت نیاز فقط همان را باطل کنید.

آماده اتصال هستید؟

کلید API را در پنل همکاران می‌سازید. اگر هنوز همکار همتا نیستید، برای ایجاد حساب همکاری با ما تماس بگیرید.