توسعه‌دهندگان

سه فراخوانی و یک وب‌هوک.

Gateway یک checkout میزبانی‌شده است، برای همین یکپارچه‌سازی عمداً کوچک مانده: سفارش را بسازید، مشتری را به صفحهٔ پرداخت بفرستید، نتیجهٔ امضاشده را تأیید کنید. همهٔ آنچه باید پیاده کنید همین است — رابط پرداخت، منطق روش‌های پرداخت، 3-D Secure، کیف‌پول‌ها و رسیدها را ما می‌سازیم و به‌روز نگه می‌داریم.

ساختار کار

با چه چیزی یکپارچه می‌شوید.

  • REST روی HTTPS
  • ورودی JSON، خروجی JSON
  • کلیدهای API از نوع Bearer
  • کلیدهای Idempotency
  • وب‌هوک‌های امضاشده
  • محافظت در برابر replay
  • حالت‌های test و live
  • SDKهای iOS و Android
  • افزونه‌های فروشگاهی
  • فیلدهای embedded

شروع سریع

از هیچ تا یک سفارش پرداخت‌شده.

کل مسیر موفق. مبلغ‌ها بر حسب کوچک‌ترین واحد پول هستند، مرجع‌ها را خودتان تعیین می‌کنید و آدرس checkout همان جایی است که مشتری را به آن هدایت می‌کنید. آدرس پایهٔ API همراه کلیدهای sandbox شما صادر می‌شود — آن را به‌صورت PROTOCORE_API_BASE export کنید تا فراخوانی‌های زیر دقیقاً همان‌طور که نوشته شده‌اند اجرا شوند.

01

ساخت سفارش

یک فراخوانی با مبلغ، ارز و مرجع خودتان. کلید idempotency را خودتان تولید می‌کنید — درخواست تکراری، سفارش اولیه را برمی‌گرداند و سفارش دوم نمی‌سازد.

POST /v1/orders
curl -X POST "$PROTOCORE_API_BASE/v1/orders" \
  -H "Authorization: Bearer $PROTOCORE_API_KEY" \
  -H "Idempotency-Key: 9F21-0716" \
  -H "Content-Type: application/json" \
  -d '{
        "amount": 4900,
        "currency": "EUR",
        "reference": "9F21-0716",
        "line_items": [
          { "name": "Brand identity sprint", "amount": 3850 },
          { "name": "Typeface licensing",   "amount": 600 },
          { "name": "Rush delivery",        "amount": 400 }
        ],
        "return_url": "https://arcstudio.ro/thanks"
      }'
02

ارسال مشتری به checkout

پاسخ شامل آدرس checkout روی هاست checkout خودتان است — همان که همراه sandbox صادر شده یا دامنهٔ خودتان، پس از آنکه آن را به ما وصل کنید. مشتری را به آن هدایت کنید یا در SDK بازش کنید؛ روش‌های پرداخت، کیف‌پول‌ها و 3-D Secure همه در همین صفحه هستند و چیزی نیست که سمت شما ساخته شود.

201 Created
{
  "id": "ord_2h4Kq9wRz",
  "reference": "9F21-0716",
  "amount": 4900,
  "currency": "EUR",
  "status": "pending",
  "checkout_url": "https://<your-checkout-host>/c/2h4Kq9wRz"
}
03

تأیید نتیجهٔ امضاشده

وقتی پرداخت کامل شود، یک رویداد امضاشده به endpoint شما می‌رسد. پیش از اعتماد به هر چیزی، امضا را با webhook secret خودتان تأیید کنید و بعد بر اساس مرجعی که از قبل دارید، سفارش را تحویل دهید.

POST /your/webhook — order.paid
{
  "type": "order.paid",
  "id": "evt_7Ka2Lm",
  "created": "2026-07-23T09:41:02Z",
  "data": {
    "id": "ord_2h4Kq9wRz",
    "reference": "9F21-0716",
    "amount": 4900,
    "currency": "EUR",
    "method": "usdc",
    "settlement": { "currency": "EUR", "amount": 4900, "rate": "0.9184" }
  }
}

مرجع

endpointهایی که واقعاً استفاده می‌کنید.

مستندات موارد بیشتری دارد، اما اغلب یکپارچه‌سازی‌ها هرگز از این مجموعه فراتر نمی‌روند.

POST /v1/orders
یک سفارش بسازید و آدرس checkout آن را دریافت کنید. کلید idempotency می‌گیرد.
GET /v1/orders/:id
وضعیت فعلی سفارش — شامل status، روش پرداخت، تسویه و بازپرداخت‌ها.
POST /v1/orders/:id/refunds
بازپرداخت سفارش، کامل یا جزئی، با ذکر دلیل الزامی.
POST /v1/orders/:id/void
آزادسازی authorization پیش از تسویه، تا هیچ پولی جابه‌جا نشود.
POST /v1/links
ساخت لینک پرداخت — یک‌بارمصرف یا چندپرداختی، با تاریخ انقضای اختیاری.
GET /v1/payouts/:id
یک دستهٔ تسویه و سفارش‌هایی که آن را تأمین کرده‌اند، با کارمزدهای تفکیک‌شده.
POST /v1/customers/:id/cards
ذخیرهٔ امن کارت برای پرداخت تک‌کلیکی و دوره‌ای؛ یک token reference برمی‌گرداند.
POST /v1/subscriptions
کسر زمان‌بندی‌شده از کارت ذخیره‌شده؛ هر دوره سفارش جداگانهٔ خودش را ایجاد می‌کند.

وب‌هوک‌ها

بک‌اند شما از چه چیزهایی باخبر می‌شود.

هر رویداد مرجع سفارشی را که ساخته‌اید همراه دارد؛ پس handler شما می‌تواند فقط یک switch روی نوع رویداد و یک جستجو در داده‌های خودتان باشد.

order.paid
Authorization و capture موفق بود — سفارش را بر اساس مرجع تحویل دهید.
order.failed
پرداخت کامل نشد، همراه با دلیلی که اپراتور بتواند بر اساس آن اقدام کند.
order.refunded
بازپرداخت انجام شد، کامل یا جزئی، همراه با دلیل و یادداشت آن.
order.disputed
chargeback ثبت شد و مدارک از قبل به سفارش پیوست شده‌اند.
payout.settled
یک دستهٔ تسویه به حساب شما ارسال شد، با فهرست سفارش‌های مربوط به آن.
subscription.charged
یک دورهٔ تکرارشونده سفارش و رسید جداگانهٔ خودش را ایجاد کرد.
تأیید

پیش از اعتماد به بدنه، امضا را بررسی کنید.

هر ارسال شامل یک timestamp و امضای HMAC روی بدنهٔ خام است. مقایسه را در زمان ثابت انجام دهید، هر چیزی را که از بازهٔ تحمل شما قدیمی‌تر است رد کنید و شناسهٔ رویداد تکراری را قبلاً پردازش‌شده بدانید — در پاسخ‌های غیر 2xx دوباره تلاش می‌کنیم، پس handler شما هم باید idempotent باشد.

Node — تأیید امضا
import { createHmac, timingSafeEqual } from "node:crypto";

export function verify(rawBody, header, secret) {
  const [ts, sig] = header.split(",").map((p) => p.split("=")[1]);
  const expected = createHmac("sha256", secret)
    .update(`${ts}.${rawBody}`)
    .digest("hex");

  const a = Buffer.from(sig, "hex");
  const b = Buffer.from(expected, "hex");
  if (a.length !== b.length || !timingSafeEqual(a, b)) return false;

  // Reject replays outside a five-minute window.
  return Math.abs(Date.now() / 1000 - Number(ts)) < 300;
}

تضمین‌ها

ویژگی‌هایی که می‌توانید روی آن‌ها حساب کنید.

01

ساخت idempotent

ساخت هر سفارش یک کلید idempotency می‌گیرد. درخواست تکراری — پس از timeout، deploy یا ارسال مجدد از صف — سفارش اولیه را برمی‌گرداند و دوبار کسر نمی‌کند.

02

رویدادهای امضاشده و محافظت‌شده در برابر replay

وب‌هوک‌ها یک امضای HMAC زمان‌دار و یک شناسهٔ رویداد ثابت دارند. ارسال با backoff تکرار می‌شود تا endpoint شما با 2xx پاسخ دهد؛ پس بازهٔ deploy باعث از دست رفتن پرداخت نمی‌شود.

03

یک مرجع، از ابتدا تا انتها

مرجعی که هنگام ساخت سفارش می‌دهید در checkout، رسید، وب‌هوک، payout و هر بازپرداخت بعدی دیده می‌شود. شناسهٔ دومی وجود ندارد که بخواهید بین سیستم‌ها نگاشت کنید.

04

حالت test همان مسیر کد است

کلیدهای test همان جریان‌ها را روی sessionهای آزمایشی اجرا می‌کنند. آنچه در test پاس شود همان است که در محیط واقعی اجرا می‌شود — تفاوت فقط در کلیدی است که می‌فرستید، نه endpointهایی که صدا می‌زنید.

داده‌های آزمایشی

چطور مسیرهای مهم را تست کنید.

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

تأیید مستقیم
بدون چالش 3-D Secure مجاز و ثبت نهایی می‌شود — مسیر موفق.
چالش 3-D Secure
یک چالش اجباری ایجاد می‌کند که می‌توانید مراحل آن را طی کنید، تا مسیر بازگشت را تست کنید.
رد نرم
به دلیل کمبود موجودی رد می‌شود، سپس روی یک مسیر جایگزین دوباره تلاش می‌کند.
رد قطعی
به‌عنوان کارت منقضی‌شده برای همیشه رد می‌شود و تلاش مجدد ندارد.
شبکه‌های آزمایشی USDC
USDC آزمایشی روی Ethereum، Base و Solana، با نرخ ثابت.
شبیه‌سازی انتقال
یک انتقال آزمایشی vIBAN را «رسیده» علامت بزنید تا سفارش به وضعیت پرداخت‌شده برود.

کلیدها را بگیرید و شروع کنید.

یک merchant سندباکس با کلیدهای API، secretهای webhook و تمام روش‌های پرداخت فعال — به‌همراه مستندات کامل، تا تیم شما پیش از امضای هر قراردادی بتواند یکپارچه‌سازی را انجام دهد.