پرش به محتویات

تایید پرداخت

تایید پرداخت

بعد مشخص شدن وضعیت پرداخت، کاربر به آدرس callback_url مشخص شده در سرویس ایجاد پرداخت منتقل می شود، در این مرحله لازم است با استفاده از سرویس تایید پرداخت وضعیت پرداخت بررسی شود.

POST /api/pg/v2/payment/verify.json/

ارسال درخواست به API:

هدرهای درخواست

Content-Type: application/json

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

curl --request POST 'https://app.sama.ir/api/pg/v2/payment/verify.json/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "amount": "12000000",
    "merchant_id": "GXyXvV72.woCX6cvclOvIvFB0KkR5OUbLMadMlIqg",
    "authority": "94b56de0-164d-4e8d-bfe9-21ec59247bcd"
}'
<?php

// 1. Example using curl:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.sama.ir/api/pg/v2/payment/verify.json/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"amount": "12000000","merchant_id": "GXyXvV72.woCX6cvclOvIvFB0KkR5OUbLMadMlIqg","authority": "94b56de0-164d-4e8d-bfe9-21ec59247bcd"
}');

$response = curl_exec($ch);

curl_close($ch);

// 2. Example using Guzzle:

require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();

$response = $client->post('https://app.sama.ir/api/pg/v2/payment/verify.json/', [
    'headers' => [
        'Content-Type'  => 'application/json'
    ],
    'json' => [
        'amount' => '12000000',
        'merchant_id' => 'GXyXvV72.woCX6cvclOvIvFB0KkR5OUbLMadMlIqg',
        'authority' => '94b56de0-164d-4e8d-bfe9-21ec59247bcd'
    ]
]);

بدنه درخواست

Request Body (JSON):
Field Type Description
amount integer مبلغ کل پرداخت
merchant_id string توکن احراز هویت فروشگاه (API Key)
authority uuid4 شناسه منحصر به فرد معامله

پاسخ دریافتی از API:

بدنه پاسخ

status_code=200
{
    "data": {
        "code": 101,
        "message": "Verified",
        "card_hash": "1EBE3EBEBE35C7EC0F8D6EE4F2F859107A87822CA179BC9528767EA7B5489B69",
        "card_pan": "502229******5995",
        "ref_id": "1361082284",
        "fee_type": "buyer",
        "fee": 150000
    },
    "errors": []
}
Field Type Description
data dataObject اطلاعات پاسخ (در صورت بروز خطا، خالی برمیگردد)
errors errorsObject خطاها (در صورت عدم بروز خطا، خالی برمیگردد)

dataObject:

Field Type Description
code integer کد وضعیت پرداخت
message string پیغام وضعیت پرداخت
card_hash string شماره کارت هش شده
card_pan string شماره کارت
ref_id string کد رهگیری
fee_type string شخص پرداخت کننده کارمزد (merchant-buyer-both-none)
fee integer مبلغ کارمزد

نکته: درصورت موفقیت آمیز بودن تراکنش، فقط برای بار اول کد 100 رخ می‌دهد و در دفعات بعدی verify همان تراکنش، کد 101 اتفاق می‌افتد. در نتیجه کد 101 به معنای آن است که تراکنش موفق بوده و قبلا عملیات تایید پرداخت بر روی آن انجام شده است.

errorsObject:

در صورت پاسخ دهی صحیح و عدم بروز خطا (status code 201)، این فیلد خالی برمیگردد در غیر اینصورت شامل اطلاعات زیر خواهد بود:

Field Type Description
code string کد خطا
message string پیغام خطا
validations validationsObject فیلدی که باعث بروز خطا شده است

خطاها

خطای احراز توکن فروشگاه (مربوط به فیلد merchant_id):

status_code=401
{
    "data": [],
    "errors": {
        "code": "not_authenticated",
        "message": "اطلاعات برای اعتبارسنجی ارسال نشده است.",
        "validations": []
    }
}

اگر پرداخت انجام نشده باشد یا ناموفق باشد خطای 400 زیر برگشت داده می‌شود.

status_code=400
{
    "data": [],
    "errors": {
        "code": "40131",
        "message": "پرداخت انجام نشده است",
        "validations": []
    }
}

اگر فیلد authority معتبر نباشد

status_code=400
{
    "data": [],
    "errors": {
        "code": "-9",
        "message": "The input params invalid, validation error.",
        "validations": [
            {
                "authority": "Must be a valid UUID."
            }
        ]
    }
}

اگر فیلد مبلغ (amount) بیش از سقف مجاز باشد:

status_code=400
{
    "data": [],
    "errors": {
        "code": "-9",
        "message": "The input params invalid, validation error.",
        "validations": [
            {
                "amount": "مطمئن شوید این مقدار کوچکتر و یا مساوی 50000000 است."
            }
        ]
    }
}

اگر فیلد مبلغ (amount) کمتر از کف مجاز باشد:

status_code=400
{
    "data": [],
    "errors": {
        "code": "-9",
        "message": "The input params invalid, validation error.",
        "validations": [
            {
                "amount": "مطمئن شوید این مقدار بزرگتر و یا مساوی 10000 است."
            }
        ]
    }
}