مستندات رسمی توسعه‌دهندگان — RESTful API v1

راهنمای جامع اتصال به درگاه کارت‌گذر

درگاه پرداخت کارت‌گذر یک زیرساخت مدرن کارت‌به‌کارت خودکار بر پایه تخصیص کد یکتای ۴ رقمی روی قیمت و پردازش بلادرنگ پیامک‌های بانکی است. با استفاده از این API می‌توانید هر نوع فروشگاه، وب‌سایت، اپلیکیشن یا ربات را به درگاه پرداخت متصل نمایید.

جهت دریافت و ساخت کلید عمومی (API Key) و کلید محرمانه (API Secret) به صفحه مدیریت کلیدها مراجعه فرمایید:
تولید و مدیریت کلیدهای API
چرخه حیات یک تراکنش در کارت‌گذر (Payment Lifecycle)
۱

ثبت سفارش

ارسال مبلغ به API و دریافت لینک اختصاصی پرداخت با کد یکتای اضافه شده به مبلغ

۲

هدایت خریدار

ریدایرکت خریدار به صفحه درگاه و واریز کارت‌به‌کارت با تایمر ۱۵ دقیقه‌ای

۳

تطبیق هوشمند پیامک

شناسایی فوری پیامک واریز توسط سرور کارت‌گذر از طریق اپلیکیشن موبایل

۴

ارسال وب‌هوک و تایید

ارسال اعلان وب‌هوک به سایت فروشگاه و راستی‌آزمایی نهایی با متد Verify

آدرس پایه سرور و احراز هویت (Base URL & Authentication)

درخواست‌ها باید از طریق پروتکل HTTP یا HTTPS ارسال گردند:

https://cardgozar.ir

احراز هویت از طریق کلیدهای امن API صورت می‌گیرد. کلید عمومی را در هدر درخواست قرار دهید:

Authorization: Bearer YOUR_API_KEY
# یا روش جایگزین:
x-api-key: YOUR_API_KEY
POST /api/v1/payments/create/

شما مبلغ سفارش، شناسه سفارش و آدرس بازگشت خریدار (callback_url) را ارسال می‌کنید. کارت‌گذر یک سفارش امن با کد ۴ رقمی یکتا ایجاد کرده و payment_url را برمی‌گرداند.

پارامترهای بدنه درخواست (JSON Body):
نام فیلد نوع داده وضعیت توضیحات
amount integer الزامی مبلغ پایه فاکتور به ریال (مثال: ۱۲,۰۰۰,۰۰۰ ریال معادل ۱,۲۰۰,۰۰۰ تومان)
order_id string اختیاری شناسه اختصاصی فاکتور در سیستم شما (مثلاً INV-84920)
callback_url string (URL) الزامی آدرس بازگشت خریدار پس از پرداخت و مقصدی که وب‌هوک به آن ارسال می‌شود
description string اختیاری شرح فاکتور جهت نمایش به خریدار در صفحه پرداخت
نمونه پاسخ موفق (201 Created):
{
  "status": "success",
  "order_token": "ord_a94f1082cba3e47b",
  "payment_url": "https://payments.cardgozar.ir/pay/ord_a94f1082cba3e47b",
  "base_amount": 12000000,
  "final_amount": 12034500,
  "final_amount_tomans": 1203450,
  "unique_code": 3450,
  "expires_in_seconds": 900
}
GET /pay/{order_token}/

پس از دریافت پاسخ از متد Create، خریدار را با ریدایرکت مرورگر به مقدار payment_url هدایت کنید. در این صفحه:

  • شماره ۱۶ رقمی کارت بانکی فعال شما و نام صاحب حساب نمایش داده می‌شود.
  • مبلغ نهایی با کد یکتا با امکان کپی مستقیم نمایش داده می‌شود.
  • تایمر معکوس ۱۵ دقیقه‌ای فعال شده و وضعیت پرداخت مانیتور می‌شود.
  • به محض واریز و دریافت پیامک، رسید صادر شده و خریدار به callback_url بازگردانده می‌شود.
GET /api/v1/payments/verify/{order_token}/

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

نمونه پاسخ استعلام موفق (200 OK):
{
  "status": "PAID",
  "is_paid": true,
  "is_expired": false,
  "order_token": "ord_a94f1082cba3e47b",
  "merchant_order_id": "INV-84920",
  "base_amount_tomans": 1200000,
  "unique_code": 3450,
  "final_amount_rials": 12034500,
  "final_amount_tomans": 1203450,
  "ref_id": "94821038",
  "payer_card": "****-2841",
  "paid_at": "2026-10-16T13:10:45Z"
}

وب‌هوک تایید آنی پرداخت (Server-to-Server Webhook)

در صورتی که خریدار پس از واریز مرورگر را ببندد، سرور کارت‌گذر به محض تطبیق پیامک، درخواست POST همراه با امضای دیجیتال به callback_url ارسال می‌کند.

هدر امنیتی امضای دیجیتال:
X-CardGozar-Signature: 8f4a1c6e7b89... (HMAC-SHA256 signature calculated with your API Secret)

نمونه‌کدهای آماده پیاده‌سازی (Ready-to-use Code)

کد استاندارد PHP با cURL جهت اتصال وب‌سایت یا افزونه وردپرس/ووکامرس:

<?php
$apiKey = "YOUR_API_KEY";
$apiSecret = "YOUR_API_SECRET";
$baseUrl = "https://cardgozar.ir";

// ۱. ایجاد تراکنش جدید
function createOrder($amountRials, $orderId, $callbackUrl) {
    global $apiKey, $baseUrl;
    
    $payload = json_encode([
        'amount' => $amountRials,
        'order_id' => $orderId,
        'callback_url' => $callbackUrl,
        'description' => 'خرید سفارش ' . $orderId
    ]);

    $ch = curl_init($baseUrl . "/api/v1/payments/create/");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Authorization: Bearer ' . $apiKey
    ]);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    $result = json_decode($response, true);
    if ($httpCode === 201 && isset($result['payment_url'])) {
        header("Location: " . $result['payment_url']);
        exit;
    } else {
        die("خطا در ایجاد درگاه: " . ($result['error'] ?? 'نامشخص'));
    }
}
?>

نمونه کد پایتون با کتابخانه requests:

import requests

BASE_URL = "https://cardgozar.ir"
API_KEY = "YOUR_API_KEY"

def create_payment(amount_rials, order_id, callback_url):
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    payload = {
        "amount": amount_rials,
        "order_id": order_id,
        "callback_url": callback_url,
        "description": f"Order {order_id}"
    }
    res = requests.post(f"{BASE_URL}/api/v1/payments/create/", json=payload, headers=headers)
    if res.status_code == 201:
        data = res.json()
        return data['payment_url']
    raise Exception(res.json().get('error'))

نمونه کد Node.js با کتابخانه axios:

const axios = require('axios');

const BASE_URL = 'https://cardgozar.ir';
const API_KEY = 'YOUR_API_KEY';

async function createPayment(amountRials, orderId, callbackUrl) {
    const res = await axios.post(`${BASE_URL}/api/v1/payments/create/`, {
        amount: amountRials,
        order_id: orderId,
        callback_url: callbackUrl,
        description: `Order ${orderId}`
    }, {
        headers: { 'Authorization': `Bearer ${API_KEY}` }
    });
    return res.data.payment_url;
}

دستورات خط فرمان جهت تست سریع با cURL از ترمینال:

curl -X POST https://cardgozar.ir/api/v1/payments/create/ \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount": 1000000, "order_id": "TEST-101", "callback_url": "https://myshop.ir/cb"}'

جدول کدهای وضعیت و خطاهای استاندارد (Error Handling)

کد HTTP عنوان وضعیت توضیحات و راهنمای رفع
201 Created سفارش با موفقیت ایجاد شد مشتری را به payment_url هدایت فرمایید.
200 OK استعلام موفق پاسخ استعلام با فیلد is_paid: true دریافت شد.
400 Bad Request خطای داده‌های ورودی پارامترهای الزامی مانند amount یا callback_url ارسال نشده یا معتبر نیستند.
401 Unauthorized احراز هویت نامعتبر کلید API ارسالی اشتباه است یا غیرفعال شده است.
403 Forbidden درگاه معلق به دلیل سقف بدهی بدهی کارمزد درگاه شما به سقف ۵۰۰,۰۰۰ تومان رسیده است. کیف‌پول را شارژ نمایید.
404 Not Found سفارش یافت نشد توکن سفارش وارد شده نامعتبر است یا در سیستم وجود ندارد.