مستندات تترا
پرداخت کالابرگ

پرداخت کالابرگ با رمز

رابط مستقیم با سامانهٔ بالادست کالابرگ برای خرید کالابرگ با رمز یک‌بارمصرف

مقدمه

سرویس پرداخت کالابرگ با رمز، رابط مستقیم با سامانهٔ بالادست کالابرگ برای چرخهٔ خرید مبتنی بر رمز یک‌بارمصرف است. در این گروه، به‌جای اطلاعات کارت، خریدار با رمزی که روی موبایلش دریافت کرده احراز می‌شود. چهار فیلد uniqueCode، counter، requestDate و channelType را پذیرنده می‌سازد و دست‌نخورده عبور می‌کنند — هیچ‌کدام از سمت تترا تولید نمی‌شوند. پاکت پاسخ همان پاکت بالادست کالابرگ است، نه پاکت استاندارد گیت‌وی تترا.

هشدار:

اکشن «ارسال رمز» در این میرور وجود ندارد. رمز باید از طریق کانال مستقل بالادست برای خریدار ارسال شده باشد، پیش از آنکه چرخهٔ خرید شروع شود.

هشدار:

این سرویس هدر Idempotency-Key نمی‌خواهد و هیچ محافظ تکراری ندارد. تکرارِ درخواست ثبت سفارش می‌تواند یک خرید جدید ثبت کند — تکرار فقط با اطمینان از نرسیدنِ پاسخ اول انجام شود.

    1. احراز هویت (authenticate)
      توکن کوتاه‌مدت کالابرگ را می‌گیرید و در هدر Authorization همهٔ درخواست‌های بعدی قرار می‌دهید. توکن ۲۴ ساعت اعتبار دارد و با غیرفعال‌شدن یا تغییر کلید API باطل می‌شود.
      text
      POST /api/Authentication/authenticate
      
    2. ثبت سفارش با رمز (item-order-by-otp)
      رمز یک‌بارمصرف، کد یکتا (uniqueCode) و اقلام سفارش را می‌فرستید. اعتبار خریدار همان لحظه کسر می‌شود. پاسخ orderTrace می‌دهد — بلافاصله ذخیره کنید؛ بدون آن هیچ مرحلهٔ بعدی ممکن نیست.
      text
      POST /inquiry/itemorderbyotp
      
    3. استعلام وضعیت (purchase-inquiry-by-otp)
      وضعیت سفارش را می‌پرسید و هیچ تغییری در سیستم ایجاد نمی‌شود. این مرحله اجباری است — پیش از تأیید نهایی باید اطمینان حاصل شود سفارش در وضعیت درست است. اگر تصمیم به ادامه ندارید، مراحل ۵ یا ۶ را ببینید.
      text
      POST /inquiry/purchaseinquirybyotp
      
    4. تأیید سفارش (confirm-order-by-otp)
      تراکنش را قطعی می‌کنید. پس از این مرحله، برگشت از طریق API غیرممکن است.
      text
      POST /payment/confirmorderbyotp
      
    5. برگشت (reverse-order-by-otp)
      اگر به هر دلیلی confirm-order-by-otp انجام نشد، این سرویس اجباری است. برخلاف لغو، هیچ آزادسازی خودکاری وجود ندارد — بدون این فراخوانی، اعتبار خریدار به حسابش برنمی‌گردد.
      text
      POST /payment/reverseorderbyotp
      
    6. لغو (order-cancelation-by-otp)
      پس از item-order-by-otp و پیش از confirm-order-by-otp، در صورت انصراف مشتری یا خطای داخلی. اگر صدا نزنید، اعتبار حدود ۲ دقیقه بعد خودبه‌خود آزاد می‌شود — اما برای تجربهٔ بهتر خریدار همیشه صدایش بزنید.
      text
      POST /payment/ordercancelationbyotp
      

ساختار کلی API

  • Base URL: https://back.tetra.land
  • پیشوند مسیر: inquiry (ثبت و استعلام) / payment (تأیید، برگشت، لغو)
  • احراز هویت: ابتدا با Authenticate توکن بگیرید؛ سپس Authorization: Bearer {sfara_token} در همهٔ درخواست‌های بعدی
  • فرمت درخواست: application/json
  • فرمت پاسخ: application/json
  • گارد لایسنس: فقط روی ثبت سفارش (اولین اکشن) بررسی می‌شود — بقیه حتی با لایسنس منقضی‌شده کار می‌کنند

۱. احراز هویت (authenticate)

Endpoint

text
POST {{base_url}}/api/Authentication/authenticate

مثال:

text
POST https://back.tetra.land/api/Authentication/authenticate

Headers

کلیدمقدار
Acceptapplication/json
Content-Typeapplication/json

Body

پارامترنوعالزامیتوضیح
usernamestringبلهکلید API که از پنل خود دریافت کرده‌اید
passwordstringبلهکلید محرمانهٔ همان کلید API

نمونه درخواست:

json
{
  "username": "xxxx",
  "password": "xxxx"
}

نمونه کد

php
<?php
$payload = json_encode([
    'username' => 'xxxx',
    'password' => 'xxxx',
]);

$ch = curl_init('https://back.tetra.land/api/Authentication/authenticate');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: application/json',
    'Content-Type: application/json',
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);

امتحان کنید

POST/api/Authentication/authenticateامتحان کنید
username*
password*
نمایش JSON ارسالی
{
  "username": "xxxx",
  "password": "xxxx"
}

پارامترهای پاسخ

پارامترنوعنمونه مقدارتوضیح
jwtTokenstring-توکن دسترسی، در result.data قرار دارد
idstring-شناسهٔ کلید API
usernamestring-همان کلید API
firstnamestring-نام دارندهٔ کسب‌وکار
lastnamestring-نام خانوادگی دارندهٔ کسب‌وکار
isActiveboolean-فعال بودن کلید API
هشدار:

توکن ۲۴ ساعت اعتبار دارد. اگر کلید محرمانه را عوض کنید یا کلید را غیرفعال کنید، تمام توکن‌های صادرشده بلافاصله باطل می‌شوند و باید دوباره احراز هویت کنید.

پاسخ‌ها

json
{
  "message": "POST Request successful.",
  "statusCode": 200,
  "result": {
    "status": true,
    "responseCode": 0,
    "data": {
      "id": 1,
      "firstname": "Kala",
      "lastname": "Kala",
      "username": "YOUR_API_KEY",
      "jwtToken": "YOUR_SFARA_TOKEN",
      "isActive": true
    }
  },
  "isError": false
}


۲. ثبت سفارش با رمز (item-order-by-otp)

Endpoint

text
POST {{base_url}}/inquiry/itemorderbyotp

مثال:

text
POST https://back.tetra.land/inquiry/itemorderbyotp

Headers

کلیدمقدار
Acceptapplication/json
AuthorizationBearer {sfara_token}
Content-Typeapplication/json

Body

پارامترنوعالزامیتوضیح
terminalNumberstringبلهترمینالی که خرید روی آن انجام می‌شود؛ باید لایسنس معتبر داشته باشد
channelTypestringبله"4" — پرداخت با رمز یک‌بارمصرف
requestDateintegerبلهتاریخ و ساعت شمسی به شکل YmdHis؛ پذیرنده خودش می‌سازد
uniqueCodestringبلهشناسهٔ یکتای درخواست
counterstringبلهشمارندهٔ درخواست
otpstringبلهرمز یک‌بارمصرفی که خریدار دریافت کرده
mobileNumberstringبلهموبایل خریدار که رمز روی آن رفته
amountintegerبلهمبلغ کل فاکتور به ریال
orderItemsarrayبلهاقلام فاکتور؛ دست‌کم یک قلم

هر قلم در orderItems

پارامترنوعالزامیتوضیح
commodityCodestringبلهکد کالا
quantityintegerبلهتعداد
unitCodestringبلهکد واحد سنجش
amountintegerبلهمبلغ همین قلم به ریال
هشدار:

گارد لایسنس: تنها شرطی که این میرور خودش بررسی می‌کند این است که برای همین terminalNumber یک لایسنسِ منقضی‌نشده وجود داشته باشد. مالکیت بی‌اثر است. اگر بیش از یک لایسنس با این شماره وجود داشته باشد، درخواست رد می‌شود.

توجه:

هیچ فیلدی از سمت تترا تولید نمی‌شود. چهار فیلدِ uniqueCode، counter، requestDate و channelType را خودِ پذیرنده می‌سازد و دست‌نخورده به بالادست می‌فرستد.

نمونه درخواست:

json
{
  "terminalNumber": "TERM-XXXXXXXX",
  "channelType": "4",
  "requestDate": 14040205115507,
  "uniqueCode": "000000000159",
  "counter": "000159",
  "otp": "xxxxxx",
  "mobileNumber": "xxxxxxxxxxx",
  "amount": 1000000,
  "orderItems": [
    {
      "commodityCode": "6260371001295",
      "quantity": 1,
      "unitCode": "5",
      "amount": 1000000
    }
  ]
}

نمونه کد

php
<?php
$token = 'YOUR_SFARA_TOKEN';

$payload = json_encode([
    'terminalNumber' => 'TERM-XXXXXXXX',
    'channelType' => '4',
    'requestDate' => 14040205115507,
    'uniqueCode' => '000000000159',
    'counter' => '000159',
    'otp' => 'xxxxxx',
    'mobileNumber' => 'xxxxxxxxxxx',
    'amount' => 1000000,
    'orderItems' => [
        [
            'commodityCode' => '6260371001295',
            'quantity' => 1,
            'unitCode' => '5',
            'amount' => 1000000,
        ],
    ],
]);

$ch = curl_init('https://back.tetra.land/inquiry/itemorderbyotp');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: application/json',
    'Content-Type: application/json',
    "Authorization: Bearer {$token}",
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);

امتحان کنید

POST/inquiry/itemorderbyotpامتحان کنید
terminalNumber*
channelType*
requestDate*
uniqueCode*
counter*
otp*
mobileNumber*
amount*
orderItems*
نمایش JSON ارسالی
{
  "terminalNumber": "TERM-XXXXXXXX",
  "channelType": "4",
  "requestDate": "14040205115507",
  "uniqueCode": "000000000159",
  "counter": "000159",
  "otp": "xxxxxx",
  "mobileNumber": "xxxxxxxxxxx",
  "amount": "1000000",
  "orderItems": "{}"
}

پارامترهای پاسخ

فیلدنوعتوضیح
orderTracestringشناسهٔ سفارش؛ ورودیِ سه مرحلهٔ بعدی است
creditAmountintegerمبلغی که از اعتبار کالابرگ برداشته شد
amountintegerمبلغ کل فاکتور
terminalNumberstringبازتابِ ترمینال درخواست
counterstringبازتابِ شمارنده
uniqueCodestringبازتابِ شناسهٔ یکتا
assignedCreditsarrayریز اعتبار تخصیص‌یافته به هر قلم

پاسخ‌ها

json
{
  "message": "POST Request successful.",
  "statusCode": 200,
  "result": {
    "status": true,
    "responseCode": 0,
    "data": {
      "orderTrace": "5078738696785",
      "creditAmount": 1000000,
      "amount": 1000000,
      "terminalNumber": "TERM-XXXXXXXX",
      "counter": "000159",
      "uniqueCode": "000000000159",
      "assignedCredits": [
        {
          "commodityCode": "6260371001295",
          "commodityName": "برنج ایرانی",
          "unitCode": "5",
          "unitName": "کیلوگرم",
          "assignedCredit": 1000000,
          "currentCredit": 500000,
          "quantity": 1,
          "amount": 1000000,
          "isBalanceMarket": false
        }
      ]
    }
  },
  "isError": false
}

۳. استعلام وضعیت سفارش (purchase-inquiry-by-otp)

Endpoint

text
POST {{base_url}}/inquiry/purchaseinquirybyotp

مثال:

text
POST https://back.tetra.land/inquiry/purchaseinquirybyotp

Headers

کلیدمقدار
Acceptapplication/json
AuthorizationBearer {sfara_token}
Content-Typeapplication/json

Body

پارامترنوعالزامیتوضیح
terminalNumberstringبلهترمینالی که خرید روی آن انجام شده
channelTypestringبله"4" — همان مقدار مرحلهٔ ثبت سفارش
requestDateintegerبلهتاریخ و ساعت شمسی YmdHis
uniqueCodestringبلهبازتابِ پاسخ مرحلهٔ ثبت سفارش
counterstringبلهبازتابِ پاسخ مرحلهٔ ثبت سفارش
orderTracestringبلهبازتابِ پاسخ مرحلهٔ ثبت سفارش
otpstringبلهرمز یک‌بارمصرف
mobileNumberstringبلهموبایل خریدار
amountintegerبلهمبلغ کل فاکتور به ریال
creditAmountintegerخیربازتابِ مبلغ اعتباری مرحلهٔ ثبت سفارش

نمونه درخواست:

json
{
  "terminalNumber": "TERM-XXXXXXXX",
  "channelType": "4",
  "requestDate": 14040205115507,
  "uniqueCode": "000000000159",
  "counter": "000159",
  "orderTrace": "5078738696785",
  "otp": "xxxxxx",
  "mobileNumber": "xxxxxxxxxxx",
  "amount": 1000000
}

نمونه کد

php
<?php
$token = 'YOUR_SFARA_TOKEN';

$payload = json_encode([
    'terminalNumber' => 'TERM-XXXXXXXX',
    'channelType'    => '4',
    'requestDate'    => 14040205115507,
    'uniqueCode'     => '000000000159',
    'counter'        => '000159',
    'orderTrace'     => '5078738696785',
    'otp'            => 'xxxxxx',
    'mobileNumber'   => 'xxxxxxxxxxx',
    'amount'         => 1000000,
]);

$ch = curl_init('https://back.tetra.land/inquiry/purchaseinquirybyotp');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: application/json',
    'Content-Type: application/json',
    "Authorization: Bearer {$token}",
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);

امتحان کنید

POST/inquiry/purchaseinquirybyotpامتحان کنید
terminalNumber*
channelType*
requestDate*
uniqueCode*
counter*
orderTrace*
otp*
mobileNumber*
amount*
creditAmount
نمایش JSON ارسالی
{
  "terminalNumber": "TERM-XXXXXXXX",
  "channelType": "4",
  "requestDate": "14040205115507",
  "uniqueCode": "000000000159",
  "counter": "000159",
  "orderTrace": "5078738696785",
  "otp": "xxxxxx",
  "mobileNumber": "xxxxxxxxxxx",
  "amount": "1000000"
}

پارامترهای پاسخ

فیلدنوعتوضیح
databooleanدر پاسخ موفق true است

پاسخ‌ها

json
{
  "message": "POST Request successful.",
  "statusCode": 200,
  "result": {
    "status": true,
    "responseCode": 0,
    "data": true
  },
  "isError": false
}

۴. تأیید سفارش رمزی (confirm-order-by-otp)

Endpoint

text
POST {{base_url}}/payment/confirmorderbyotp

مثال:

text
POST https://back.tetra.land/payment/confirmorderbyotp

Headers

کلیدمقدار
Acceptapplication/json
AuthorizationBearer {sfara_token}
Content-Typeapplication/json

Body

پارامترنوعالزامیتوضیح
terminalNumberstringبلهترمینالی که خرید روی آن انجام شده
channelTypestringبله"4" — همان مقدار مرحلهٔ ثبت سفارش
requestDateintegerبلهتاریخ و ساعت شمسی YmdHis
uniqueCodestringبلهبازتابِ پاسخ مرحلهٔ ثبت سفارش
counterstringبلهبازتابِ پاسخ مرحلهٔ ثبت سفارش
orderTracestringبلهبازتابِ پاسخ مرحلهٔ ثبت سفارش
otpstringبلهرمز یک‌بارمصرف
mobileNumberstringبلهموبایل خریدار
amountintegerبلهمبلغ کل فاکتور به ریال
creditAmountintegerخیربازتابِ مبلغ اعتباری مرحلهٔ ثبت سفارش

نمونه درخواست:

json
{
  "terminalNumber": "TERM-XXXXXXXX",
  "channelType": "4",
  "requestDate": 14040205115507,
  "uniqueCode": "000000000159",
  "counter": "000159",
  "orderTrace": "5078738696785",
  "otp": "xxxxxx",
  "mobileNumber": "xxxxxxxxxxx",
  "amount": 1000000
}

نمونه کد

php
<?php
$token = 'YOUR_SFARA_TOKEN';

$payload = json_encode([
    'terminalNumber' => 'TERM-XXXXXXXX',
    'channelType'    => '4',
    'requestDate'    => 14040205115507,
    'uniqueCode'     => '000000000159',
    'counter'        => '000159',
    'orderTrace'     => '5078738696785',
    'otp'            => 'xxxxxx',
    'mobileNumber'   => 'xxxxxxxxxxx',
    'amount'         => 1000000,
]);

$ch = curl_init('https://back.tetra.land/payment/confirmorderbyotp');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: application/json',
    'Content-Type: application/json',
    "Authorization: Bearer {$token}",
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);
توجه:

گارد لایسنس روی این متد اعمال نمی‌شود. گارد فقط روی اولین اکشن چرخه است. این متد ادامهٔ چرخه است و حتی با لایسنسِ منقضی‌شده هم کار می‌کند — پولی که جابه‌جا شده باید قابل تأیید باشد.

امتحان کنید

POST/payment/confirmorderbyotpامتحان کنید
terminalNumber*
channelType*
requestDate*
uniqueCode*
counter*
orderTrace*
otp*
mobileNumber*
amount*
creditAmount
نمایش JSON ارسالی
{
  "terminalNumber": "TERM-XXXXXXXX",
  "channelType": "4",
  "requestDate": "14040205115507",
  "uniqueCode": "000000000159",
  "counter": "000159",
  "orderTrace": "5078738696785",
  "otp": "xxxxxx",
  "mobileNumber": "xxxxxxxxxxx",
  "amount": "1000000"
}

پارامترهای پاسخ

فیلدنوعتوضیح
databooleanدر پاسخ موفق true است

پاسخ‌ها

json
{
  "message": "POST Request successful.",
  "statusCode": 200,
  "result": {
    "status": true,
    "responseCode": 0,
    "data": true
  },
  "isError": false
}

۵. برگشت سفارش رمزی (reverse-order-by-otp)

Endpoint

text
POST {{base_url}}/payment/reverseorderbyotp

مثال:

text
POST https://back.tetra.land/payment/reverseorderbyotp

Headers

کلیدمقدار
Acceptapplication/json
AuthorizationBearer {sfara_token}
Content-Typeapplication/json

Body

پارامترنوعالزامیتوضیح
terminalNumberstringبلهترمینالی که خرید روی آن انجام شده
channelTypestringبله"4" — همان مقدار مرحلهٔ ثبت سفارش
requestDateintegerبلهتاریخ و ساعت شمسی YmdHis
uniqueCodestringبلهبازتابِ پاسخ مرحلهٔ ثبت سفارش
counterstringبلهبازتابِ پاسخ مرحلهٔ ثبت سفارش
orderTracestringبلهبازتابِ پاسخ مرحلهٔ ثبت سفارش
otpstringبلهرمز یک‌بارمصرف
mobileNumberstringبلهموبایل خریدار
amountintegerبلهمبلغ کل فاکتور به ریال
creditAmountintegerخیربازتابِ مبلغ اعتباری مرحلهٔ ثبت سفارش

نمونه درخواست:

json
{
  "terminalNumber": "TERM-XXXXXXXX",
  "channelType": "4",
  "requestDate": 14040205115507,
  "uniqueCode": "000000000159",
  "counter": "000159",
  "orderTrace": "5078738696785",
  "otp": "xxxxxx",
  "mobileNumber": "xxxxxxxxxxx",
  "amount": 1000000
}

نمونه کد

php
<?php
$token = 'YOUR_SFARA_TOKEN';

$payload = json_encode([
    'terminalNumber' => 'TERM-XXXXXXXX',
    'channelType'    => '4',
    'requestDate'    => 14040205115507,
    'uniqueCode'     => '000000000159',
    'counter'        => '000159',
    'orderTrace'     => '5078738696785',
    'otp'            => 'xxxxxx',
    'mobileNumber'   => 'xxxxxxxxxxx',
    'amount'         => 1000000,
]);

$ch = curl_init('https://back.tetra.land/payment/reverseorderbyotp');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: application/json',
    'Content-Type: application/json',
    "Authorization: Bearer {$token}",
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);
توجه:

گارد لایسنس روی این متد اعمال نمی‌شود. گارد فقط روی اولین اکشن چرخه است. این متد ادامهٔ چرخه است و حتی با لایسنسِ منقضی‌شده هم کار می‌کند — پولی که جابه‌جا شده باید قابل برگشت باشد.

امتحان کنید

POST/payment/reverseorderbyotpامتحان کنید
terminalNumber*
channelType*
requestDate*
uniqueCode*
counter*
orderTrace*
otp*
mobileNumber*
amount*
creditAmount
نمایش JSON ارسالی
{
  "terminalNumber": "TERM-XXXXXXXX",
  "channelType": "4",
  "requestDate": "14040205115507",
  "uniqueCode": "000000000159",
  "counter": "000159",
  "orderTrace": "5078738696785",
  "otp": "xxxxxx",
  "mobileNumber": "xxxxxxxxxxx",
  "amount": "1000000"
}

پارامترهای پاسخ

فیلدنوعتوضیح
databooleanدر پاسخ موفق true است

پاسخ‌ها

json
{
  "message": "POST Request successful.",
  "statusCode": 200,
  "result": {
    "status": true,
    "responseCode": 0,
    "data": true
  },
  "isError": false
}

۶. لغو سفارش رمزی (order-cancelation-by-otp)

Endpoint

text
POST {{base_url}}/payment/ordercancelationbyotp

مثال:

text
POST https://back.tetra.land/payment/ordercancelationbyotp
هشدار:

املای ordercancelation با یک l — این عمداً از سامانهٔ بالادست کالابرگ آمده است؛ اصلاحش میرور را می‌شکند.

Headers

کلیدمقدار
Acceptapplication/json
AuthorizationBearer {sfara_token}
Content-Typeapplication/json

Body

پارامترنوعالزامیتوضیح
otpstringبلهرمز یک‌بارمصرف
orderTracestringبلهشناسهٔ سفارشی که لغو می‌شود
channelTypestringبله"4" — همان مقدار مرحلهٔ ثبت سفارش
توجه:

فقط همین سه فیلد ارسال می‌شوند. فیلدهایی مثل uniqueCode، counter، terminalNumber، amount و requestDate در این متد جایی ندارند.

نمونه درخواست:

json
{
  "otp": "xxxxxx",
  "orderTrace": "5078738696785",
  "channelType": "4"
}

نمونه کد

php
<?php
$token = 'YOUR_SFARA_TOKEN';

$payload = json_encode([
    'otp'        => 'xxxxxx',
    'orderTrace' => '5078738696785',
    'channelType' => '4',
]);

$ch = curl_init('https://back.tetra.land/payment/ordercancelationbyotp');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: application/json',
    'Content-Type: application/json',
    "Authorization: Bearer {$token}",
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);
توجه:

گارد لایسنس روی این متد اعمال نمی‌شود. گارد فقط روی اولین اکشن چرخه است. این متد ادامهٔ چرخه است و حتی با لایسنسِ منقضی‌شده هم کار می‌کند.

امتحان کنید

POST/payment/ordercancelationbyotpامتحان کنید
otp*
orderTrace*
channelType*
نمایش JSON ارسالی
{
  "otp": "xxxxxx",
  "orderTrace": "5078738696785",
  "channelType": "4"
}

پارامترهای پاسخ

فیلدنوعتوضیح
databooleanدر پاسخ موفق true است

پاسخ‌ها

json
{
  "message": "POST Request successful.",
  "statusCode": 200,
  "result": {
    "status": true,
    "responseCode": 0,
    "data": true
  },
  "isError": false
}


قوانین اعتبارسنجی

توجه:

توکن (sfara_token) باید در هدر Authorization به فرمت Bearer {token} ارسال شود. بدون توکن معتبر، درخواست‌های نیازمند آن با خطای ۴۰۱ رد می‌شوند.

هشدار:

گارد لایسنس فقط روی اولین اکشنِ چرخه (ثبت سفارش با رمز) اعمال می‌شود. سه متد بعدی حتی با لایسنس منقضی‌شده هم کار می‌کنند تا عملیات نیمه‌کاره قابل تکمیل یا برگشت باشد.

پارامترقانون
usernameالزامی در احراز هویت — کلید API که از پنل خود دریافت کرده‌اید
passwordالزامی در احراز هویت — کلید محرمانهٔ همان کلید API
terminalNumberالزامی — ترمینالی که خرید روی آن انجام می‌شود؛ باید لایسنس معتبر داشته باشد (فقط در ثبت سفارش بررسی می‌شود)
channelTypeالزامی — "4" برای پرداخت با رمز یک‌بارمصرف
requestDateالزامی — تاریخ و ساعت شمسی به شکل YmdHis که پذیرنده خودش می‌سازد
uniqueCodeالزامی — شناسهٔ یکتای درخواست که پذیرنده می‌سازد
counterالزامی — شمارندهٔ درخواست که پذیرنده می‌سازد
otpالزامی — رمز یک‌بارمصرف خریدار
mobileNumberالزامی — موبایل خریداری که رمز روی آن رفته
amountالزامی — مبلغ کل فاکتور به ریال
orderItemsالزامی در مرحلهٔ ثبت سفارش — اقلام سبد خرید
orderTraceالزامی از مرحلهٔ دوم به بعد — شناسهٔ سفارش که در پاسخ ثبت سفارش برگشته بود
creditAmountاختیاری — مبلغ اعتباری که در پاسخ ثبت سفارش برگشته بود