Skip to main content

سرویس های انتقال وجه

اصطلاحات#

سرویس انتقال وجه، به منظور در اختيار گرفتن دسترسی حساب بانکی کاربر و سپس انتقال وجه به حساب ذینفعان پياده سازی شده است. در ابتدا اصطلاحات که در مستندات به کار رفته را تعریف مي‌کنيم.

کاربر/ پذیرنده: شخصی که در پنل پی استار حساب کاربری ایجاد کرده است.

اپليکيشن:برای فراخوانی وبسرویس‌های انتقال وجه، نياز به ایجاد اپليکيشن مي‌باشد که به این منظور باید از طریق پنل کاربری برای ایجاد آن اقدام نمایید.

apiKey :یک توکن برای احراز هویت کاربر و دسترسی به اپليکيشن، به منظور فراخوانی وبسرویس‌های دریافت دسترسی حساب و انتقال وجه است. این توکن باید در تمامی وبسرویس‌ها به عنوان توکن bearer در هدر authorization ارسال شود.

refreshToken :توکن apiKey به مدت 24 ساعت معتبر است. لذا برای ایجاد apiKey جدید به refreshToken نياز مي‌باشد.

applicationId : شناسه اپليکيشن، که بعد از ایجاد اپليکيشن در اختيار کاربر قرار مي‌گيرد.

accessPassword :رمز دسترسی به اپليکيشن، که بعد از ایجاد اپليکيشن در اختيار کاربر قرار مي‌گيرد.

accessIp :آی پی های مجاز برای فراخوانی وبسرویس‌ها که در اپليکيشن تنظيم شده اند.

وبسرویس refresh api key#

  • https://core.paystar.ir/api/application/refresh-api-key

برای‌ دریافت apiKey جدید ،سرویس بالا با متد POST فراخوانی شود.

پارامترهای ورودی

نام فیلدنوع دادهشرحاجباری
application_idstringشناسه اپلیکیشنبله
access_passwordstringرمز دسترسی اپلیکیشنبله
refresh_tokenstringتوکن بازیابی API keyبله

درصورت فرخوانی موفق، پاسخ با وضعيت ok و در صورت فراخوانی ناموفق با وضعيت fail دریافت ميکنيد. نمونه پاسخ موفق به شکل زیر مي‌باشد.

{
“status”: "ok",
“data”: {
“api_key”: “...”,
“api_key_expire_date”: “...”
},
}

وبسرویس دریافت لیست درخواست‌های انتقال وجه#

  • https://core.paystar.ir/api/bank-transfer/settlement-requests

جهت دریافت ليست درخواست‌های انتقال وجه ،سرویس بالا با متد GET فراخوانی گردد:

پارامترهای ورودی

نام فیلدنوع دادهشرحاجباری
application_idstringشناسه اپلیکیشنبله
access_passwordstringرمز دسترسی اپلیکیشنبله
source_accountsarrayشماره حساب های مبداخیر
track_idstringکد رهگیریخیر
destination_accountstringشماره حساب یا شبا مقصدخیر
transaction_idstringشناسه یکتای تراکنشخیر
min_amountintegerحداقل مبلغخیر
max_amountintegerحداکثر مبلغخیر
transfer_typeintegerروش انتقال (جدول نوع TransferType)خیر
from_datestringتاریخ شمسی شروع بازه صورتحساب (Y-m-d,Y-m-dH:i:s)خیر
to_datestringتاریخ شمسی پایان بازه صورتحساب (Y-m-d,Y-m-dH:i:s)خیر
limitintegerتعداد رکورد‌های پاسخدرصورت وارد کردن skip
skipintegerتعدادرکورد‌هایی که رد شونددرصورت وارد کردن limit

وبسرویس انتقال وجه بانکی (نسخه جدید)#

  • https://core.paystar.ir/api/bank-transfer/v3/settlement

پس از گرفتن دسترسی به حساب بانکی، برای انتقال وجه باید وبسرویس بالا را با متد POST فراخوانی کنيد. تفاوت این نوع ورژن با ورژن قبلی این می باشد مبلغ انتقال وجه هر رکورد transfer بعد از عبور کردن از حداکثر مبلغ، مبلغ را به تراکنش های خورد کرده و بعد سمت بانک ارسال می گردد. تفاوت دیگر این نسخه با نسخه قبلی اضاف شده فیلد های type و فیلد transfer_type می باشد. که به ترتیب بیان گر نوع انتقال وجه(درون بانکی، پایا و ساتنا) و نحوه ارسال به سمت سرویس دهنده (مستقیم یا به صورت صف) که در ادامه با آنها خواهیم پرداخت.در نظر داشته باشید پاسخ موفق این وبسرویس به معنای موفق بودن تراکنش نمی باشد.

پارامترهای ورودی

نام فیلدنوع دادهشرحاجباری
application_idstringشناسه اپلیکیشنبله
access_passwordstringرمز دسترسی اپلیکیشنبله
transfersarrayآرایه‌ای از لیست درخواست‌های انتقال وجه که هر درخواست یک object به فرمت جدول زیر می‌باشدبله

جدول نوع داده transfers

نام فیلدنوع دادهشرحاجباری
amountintegerمبلغ تراکنشبله
depositstringشماره حساب مبداءبله
destination_accountstringشماره حساب مقصد که میتوانید شماره حساب بانکی یا شماره شبا (26 کاراکتر) باشد (اگر حساب شما در بانک شامل کاراکتر اضافه مانند خط تیره میباشد با همان فرمت در پارامتر استفاده کنید)بله
destination_firstnamestringنام صاحب حساب مقصدبله
destination_lastnamestringنام خانوادگی صاحب حساب مقصدبله
track_idstringمیتوانید با track id یکتا، از ایجاد دوباره یک تراکنش جلوگیری کنید. در صورت ورود track id تکراری خطا دریافت میکنید.بله
pay_idstringشناسه واریز (در صورتی که حساب مقصد شناسه دار باشد وارد کردن این فیلد الزامی می باشد)بله
typeintegerنوع انتقال بانکی می باشد(داخلی، پایا، ساتنا) درصورت پر نکردن سیستم خودکار تشخصیص خواهد داد.خیر
transfer_typeintegerبیان گر نوع انتقال می باشد. (مستقیم یا صف) که به سمت بانک ارسال گردد.خیر
reasonintegerبابت (در صورت ارسال نشدن، به صورت پیشفرض نوع پرداخت قرض و تادیه دیون در نظر گرفته می شود) جدول نوع ReasonTypeخیر

جدول type

  • در صورت عدم وارد کردن این تایپ سیستم به صورت خودکار تشخیص خواهد که نوع انتقال به چه صورت است.
  • اگر نوع ارسالی با شماره حساب مبدا و مقصد یکسان نباشد سیستم به صورت خودکار تشخیص و اصلاح خواهد نمود.
  • انتقال وجه ساتنا فقط تا ساعت 14 هر روز کاری انجام خواهد شدو حدود 30 دقیقه زمان بر خواهد بود همچنین توجه داشته باشید حداقل مبلغ انتقال وجه ساتنا 100 میلیون تومان می باشد.
نوع دادهشرح
1انتقال وجه داخلی(داخل بانکی)
2انتقال وجه پایا ( بین بانکی)
3انتقال ساتنا (بین بانکی و آنی که در ساعات مشخص امکان پذیر است.)

جدول transfer_type

  • در صوت عدم پر کردن این فیلد سیستم به صورت خودکار نوع انتقال را مستقیم لحاظ می کند.
  • توجه داشته باشید در صورت انتخاب نوع مستقیم امکان لغو انتقال وجود ندارد.
  • در صورت انتخاب به صورت نوع صف امکان لغو تراکنش تا 15 دقیقه بعد از انتقال وجود دارد در غیر این صورت امکان‌پذیر نیست.
نوع دادهشرح
1مستقیم
2به صورت صف
نمونه کد (php) :
<?php
$api_key = 'your_api_key';
$application_id = 'your_application_id';
$access_password = 'your_access_password';
$deposit = 'your_deposit_account'; // Optional
$track_id = 'your_track_id'; // Optional
$limit = 10; // Optional
$skip = 0; // Optional
$url = 'https://core.paystar.ir/api/bank-transfer/settlement-requests';
$body_params = [
'application_id' => $application_id,
'access_password' => $access_password,
'deposit' => $deposit,
'track_id' => $track_id,
'limit' => $limit,
'skip' => $skip
];
$query_params = http_build_query(array_filter($body_params)); // remove null values
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url . "?" . $query_params,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Accept: application/json',
'Authorization: Bearer ' . $api_key
],
]
);
$response = curl_exec($curl);
curl_close($curl);
print_r(json_decode($response, true, JSON_PRETTY_PRINT));
?>
نمونه کد (C# .net) :
using RestSharp;
using Newtonsoft.Json;
var options = new RestClientOptions("https://core.paystar.ir");
var client = new RestClient(options);
string api_key = "your-api-key";
string application_id = "your_application_id";
string access_password = "your_access_password";
string deposit = "your_deposit_account"; // Optional
string track_id = "your_track_id"; // Optional
int limit = 10; // Optional
int skip = 0; // Optional
var requestBody = new {
application_id = application_id,
access_password = access_password,
deposit = deposit,
track_id = track_id,
limit = limit,
skip = skip
};
var queryParams = string.Join("&", requestBody.GetType().GetProperties()
.Where(p => p.GetValue(requestBody) != null)
.Select(p => $"{p.Name}={p.GetValue(requestBody)}"));
var request = new RestRequest($"/api/bank-transfer/settlement-requests?{queryParams}", Method.Get);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer " + api_key);
RestResponse response = client.Execute(request);
var res = response.Content;
Console.WriteLine(res);
نمونه کد (Python) :
import json
import requests
url = "https://core.paystar.ir/api/bank-transfer/settlement-requests"
api_key = 'your-api-key'
header = {
"Accept": "application/json",
"Authorization": "Bearer " + api_key,
"Content-Type": "application/json",
}
params = {
'application_id': 'your_application_id',
'access_password': 'your_access_password',
'deposit': 'your_deposit_account', # Optional
'track_id': 'your_track_id', # Optional
'limit': 10, # Optional
'skip': 0, # Optional
}
response = requests.get(url, headers=header, params={k: v for k, v in params.items() if v is not None})
output = json.dumps(response.json(), indent=4, ensure_ascii=False)
print(output)

وبسرویس دریافت موجودی حساب#

  • https://core.paystar.ir/api/open-banking/service/balance

جهت دریافت موجودی حساب بانکی ،سرویس بالا با متد GET فراخوانی گردد:

(در حال حاضر وبسرویس موجودی فقط برای بانک صادرات در دسترس است.)

پارامترهای ورودی

نام فیلدنوع دادهشرحاجباری
application_idstringشناسه اپلیکیشنبله
access_passwordstringرمز دسترسی اپلیکیشنبله
account_numberstringشماره حساب بانک که در اپلیکیشن ثبت شده استبله

پارامتر های خروجی (درصورت موفق بودن درخواست)

عنواننوع دادهشرح
available_balanceintمانده در دسترس
effective_balanceintمانده موثر
accountstringشماره حساب
نمونه کد (php) :
<?php
$api_key = 'your_api_key';
$application_id = 'your_application_id';
$access_password = 'your_access_password';
$account_number = 'your_deposit_account';
$url = 'https://core.paystar.ir/api/open-banking/service/balance';
$body_params = [
'application_id' => $application_id,
'access_password' => $access_password,
'account_number' => $account_number
];
$query_params = http_build_query(array_filter($body_params));
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url . "?" . $query_params,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Accept: application/json',
'Authorization: Bearer ' . $api_key
],
]
);
$response = curl_exec($curl);
curl_close($curl);
print_r(json_decode($response, true, JSON_PRETTY_PRINT));
?>
نمونه کد (C# .net) :
using RestSharp;
using Newtonsoft.Json;
var options = new RestClientOptions("https://core.paystar.ir");
var client = new RestClient(options);
string api_key = "your-api-key";
string application_id = "your_application_id";
string access_password = "your_access_password";
string account_number = "your_deposit_account";
var requestBody = new {
application_id = application_id,
access_password = access_password,
account_number = account_number
};
var queryParams = string.Join("&", requestBody.GetType().GetProperties()
.Where(p => p.GetValue(requestBody) != null)
.Select(p => $"{p.Name}={p.GetValue(requestBody)}"));
var request = new RestRequest($"/api/open-banking/service/balance?{queryParams}", Method.Get);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer " + api_key);
RestResponse response = client.Execute(request);
var res = response.Content;
Console.WriteLine(res);
نمونه کد (Python) :
import json
import requests
url = "https://core.paystar.ir/api/open-banking/service/balance"
api_key = 'your-api-key'
header = {
"Accept": "application/json",
"Authorization": "Bearer " + api_key,
"Content-Type": "application/json",
}
params = {
'application_id': 'your_application_id',
'access_password': 'your_access_password',
'account_number': 'your_deposit_account',
}
response = requests.get(url, headers=header, params={k: v for k, v in params.items() if v is not None})
output = json.dumps(response.json(), indent=4, ensure_ascii=False)
print(output)

وبسرویس دریافت صورتحساب#

  • https://core.paystar.ir/api/open-banking/service/v2/invoice

جهت دریافت صورتحساب بانکی ،سرویس بالا با متد GET فراخوانی گردد:

(در حال حاضر وبسرویس صورتحساب فقط برای بانک صادرات در دسترس است.)

پارامترهای ورودی

نام فیلدنوع دادهشرحاجباری
application_idstringشناسه اپلیکیشنبله
access_passwordstringرمز دسترسی اپلیکیشنبله
account_numberstringشماره حساب بانک که در اپلیکیشن ثبت شده استبله
from_datestringتاریخ میلادی شروع بازه صورتحساب (Y-m-d,Y-m-dH:i:s)بله
to_datestringتاریخ میلادی پایان بازه صورتحساب (Y-m-d,Y-m-dH:i:s)خیر

پارامتر های خروجی (درصورت موفق بودن درخواست)

عنواننوع دادهشرح
statusintجدول وضعيت
messagestringپيام سيستم
dataarray Transactionجدول نوع داده Transaction

جدول نوع داده Transaction

عنواننوع دادهشرح
transaction_date_timejalalidatetimeتاریخ شمسی تراکنش
amountintمبلغ
descriptionstringکد شرح بانکی تراکنش
balanceintمانده پس از تراکنش
transaction_tracestringکد رهگیری
branch_codestringشعبه انجام تراکنش
transaction_identitystringuuid تراکنش انتقال مربوطه
statement_statusstringوضعیت تراکنش
source_accountstringحساب مبدا
destination_accountstringحساب مقصد
document_idstringشناسه سند انتقال مربوطه
customer_descriptionstringشرح تراکنش
operation_codestringکد تراکنش
payment_idstringشناسه واریز
transaction_typestringنوع تراکنش (جدول نوع TransactionType)
transfer_typeintروش انتقال (جدول نوع TransferType)

جدول نوع TransactionType

مقدارشرح
CREDITواریز
DEBITبرداشت

جدول نوع TransferType

مقدارشرح
1پایا
2ساتنا
3حساب به حساب
4کارت به کارت
5پل
6انتقالی(نامشخص)
7خرید
8کارمزد بانک
9اصلاحی
10خودپرداز
11دستگاه پوز
12نقدی
13تسویه شاپرکی
14قبض
نمونه کد (php) :
<?php
$api_key = 'your_api_key';
$application_id = 'your_application_id';
$access_password = 'your_access_password';
$account_number = 'your_deposit_account';
$url = 'https://core.paystar.ir/api/open-banking/service/invoice';
$body_params = [
'application_id' => $application_id,
'access_password' => $access_password,
'account_number' => $account_number,
'from_date' => '2024-12-24',
'to_date' => '2024-12-25'
];
$query_params = http_build_query(array_filter($body_params));
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url . "?" . $query_params,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Accept: application/json',
'Authorization: Bearer ' . $api_key
],
]
);
$response = curl_exec($curl);
curl_close($curl);
print_r(json_decode($response, true, JSON_PRETTY_PRINT));
?>
نمونه کد (C# .net) :
using RestSharp;
using Newtonsoft.Json;
var options = new RestClientOptions("https://core.paystar.ir");
var client = new RestClient(options);
string api_key = "your-api-key";
string application_id = "your_application_id";
string access_password = "your_access_password";
string account_number = "your_deposit_account";
string from_date = "2024-12-22";
string to_date = "2024-12-23";
var requestBody = new {
application_id = application_id,
access_password = access_password,
account_number = account_number,
from_date = from_date,
to_date = to_date
};
var queryParams = string.Join("&", requestBody.GetType().GetProperties()
.Where(p => p.GetValue(requestBody) != null)
.Select(p => $"{p.Name}={p.GetValue(requestBody)}"));
var request = new RestRequest($"/api/open-banking/service/invoice?{queryParams}", Method.Get);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer " + api_key);
RestResponse response = client.Execute(request);
var res = response.Content;
Console.WriteLine(res);
نمونه کد (Python) :
import json
import requests
url = "https://core.paystar.ir/api/open-banking/service/invoice"
api_key = 'your-api-key'
header = {
"Accept": "application/json",
"Authorization": "Bearer " + api_key,
"Content-Type": "application/json",
}
params = {
'application_id': 'your_application_id',
'access_password': 'your_access_password',
'account_number': 'your_deposit_account',
'from_date': '2024-11-22',
'from_date': '2024-11-23',
}
response = requests.get(url, headers=header, params={k: v for k, v in params.items() if v is not None})
output = json.dumps(response.json(), indent=4, ensure_ascii=False)
print(output)