پرش به مطلب اصلی

ساخت Payment Intent

برای شروع دریافت وجه از مشتری یک Payment Intent بسازید.

اندپوینت​

POST /api/v1/payment_intents

نسخه API در مسیر URL قرار دارد (v1). در بدنه درخواست فیلد نسخه وجود ندارد.

نسخه API و SDK​

  • نسخه در URL: مسیر پایه شامل نسخه است (مثلاً /api/v1/payment_intents). نسخه فعلی v1 است. وقتی نسخه‌های جدیدتر بیایند، مسیر آن را نشان می‌دهد (مثلاً /api/v2/payment_intents).
  • SDK نود: کلاینت baseUrl (پیش‌فرض https://api.orcarail.com/api/v1) و apiVersion (پیش‌فرض "v1") را می‌پذیرد. برای استفاده از نسخه دیگر API، baseUrl را روی پایه نسخه‌دار مورد نظر تنظیم کنید (مثلاً https://api.orcarail.com/api/v2). پارامترهای ساخت Payment Intent فیلد نسخه ندارند؛ کلاینت از URL پایه استفاده می‌کند. برای پیکربندی کامل SDK نود را ببینید.
  • SDK پی‌اچ‌پی: کلاینت base_url (پیش‌فرض https://api.orcarail.com/api/v1) را می‌پذیرد. برای تغییر نسخه API آن را به پایه نسخه‌دار دیگری اشاره دهید. برای پیکربندی کامل SDK پی‌اچ‌پی را ببینید.

احراز هویت​

این اندپوینت از هر دو روش احراز هویت پشتیبانی می‌کند:

  • توکن Bearer (JWT) — Authorization: Bearer YOUR_JWT_TOKEN
  • کلید API (Basic Auth) — Authorization: Basic base64(key:secret)

درخواست​

بدنه درخواست​

{
"amount": "100.00",
"currency": "usd",
"payment_method_types": ["crypto"],
"tokenId": 1,
"networkId": 1,
"return_url": "https://merchant.example.com/return",
"cancel_url": "https://merchant.example.com/cancel",
"description": "Payment for services",
"metadata": {
"order_id": "12345",
"customer_id": "67890"
},
"expires_at": "2024-12-31T23:59:59Z",
"withdrawal_addresses": { "evm": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb" }
}

پارامترها​

پارامترنوعالزامیتوضیح
amountstringبلهمبلغ دریافتی، در کوچک‌ترین واحد ارز (مثلاً سنت برای USD). باید عددی مثبت باشد.
currencystringبلهکد سه‌حرفی ISO ارز (مثلاً usd، eur).
payment_method_typesarrayبلهآرایه انواع روش پرداخت. باید شامل "crypto" باشد.
tokenIdnumberبلهشناسه توکنی که پذیرفته می‌شود (مثلاً USDC، USDT).
networkIdnumberبلهشناسه شبکه بلاکچین (مثلاً Ethereum، Polygon).
return_urlstringبلهآدرسی که مشتری پس از تکمیل پرداخت به آن منتقل می‌شود.
cancel_urlstringخیرآدرسی که اگر مشتری پرداخت را لغو کند به آن منتقل می‌شود.
descriptionstringخیرتوضیح اختیاری پرداخت.
metadataobjectخیرمجموعه‌ای از جفت‌های کلید-مقدار که می‌توانید به Payment Intent پیوست کنید.
expires_atstringخیرزمان انقضای Payment Intent به قالب ISO 8601.
withdrawal_addressesobjectخیرآدرس‌های برداشت به تفکیک نوع زنجیره. کلیدها باید نوع زنجیره معتبر باشند: evm، solana، bitcoin، tron، cosmos، polkadot، move، ton (مثلاً { "evm": "0x...", "solana": "..." }). اگر برای یک زنجیره حذف یا خالی باشد، مقدار پیش‌فرض حساب شما از تنظیمات برداشت استفاده می‌شود.

پاسخ​

پاسخ موفق​

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"amount": "100.00",
"currency": "usd",
"status": "requires_payment_method",
"paymentMethodTypes": ["crypto"],
"clientSecret": "550e8400-e29b-41d4-a716-446655440000_secret_abc123",
"returnUrl": "https://merchant.example.com/return",
"cancelUrl": "https://merchant.example.com/cancel",
"description": "Payment for services",
"metadata": {
"order_id": "12345",
"customer_id": "67890"
},
"paymentLink": {
"id": 1,
"link": "https://pay.orcarail.com/pay/pl_abc123"
},
"expiresAt": "2024-12-31T23:59:59.000Z",
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}

فیلدهای پاسخ​

فیلدنوعتوضیح
idstringشناسه یکتای Payment Intent (مثلاً 550e8400-e29b-41d4-a716-446655440000).
amountstringمبلغ دریافتی.
currencystringکد ارز.
statusstringوضعیت فعلی Payment Intent.
paymentMethodTypesarrayآرایه انواع روش پرداخت.
clientSecretstringمهم: فقط یک بار نمایش داده می‌شود. برای تأیید Payment Intent از آن استفاده کنید.
returnUrlstringآدرس بازگشتی که تعیین کرده‌اید.
cancelUrlstringآدرس لغوی که تعیین کرده‌اید (در صورت وجود).
descriptionstringتوضیحی که داده‌اید (در صورت وجود).
metadataobjectفراداده‌ای که داده‌اید (در صورت وجود).
paymentLinkobjectآدرس صفحه پرداخت میزبانی‌شده را در link دارد.
expiresAtstringزمان انقضای Payment Intent (در صورت تعیین).
createdAtstringزمان ساخت Payment Intent.
updatedAtstringزمان آخرین به‌روزرسانی Payment Intent.

نمونه​

cURL​

curl https://api.orcarail.com/api/v1/payment_intents \
-X POST \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"amount": "100.00",
"currency": "usd",
"payment_method_types": ["crypto"],
"tokenId": 1,
"networkId": 1,
"return_url": "https://merchant.example.com/return"
}'

JavaScript (Node.js)​

const response = await fetch(
'https://api.orcarail.com/api/v1/payment_intents',
{
method: 'POST',
headers: {
Authorization: `Bearer ${jwtToken}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
amount: '100.00',
currency: 'usd',
payment_method_types: ['crypto'],
tokenId: 1,
networkId: 1,
return_url: 'https://merchant.example.com/return',
description: 'Payment for services',
metadata: {
order_id: '12345',
},
}),
}
)

const paymentIntent = await response.json()
console.log('Client Secret:', paymentIntent.clientSecret)
console.log('Payment Link:', paymentIntent.paymentLink.link)

Python​

import requests

response = requests.post(
'https://api.orcarail.com/api/v1/payment_intents',
headers={
'Authorization': f'Bearer {jwt_token}',
'Content-Type': 'application/json',
},
json={
'amount': '100.00',
'currency': 'usd',
'payment_method_types': ['crypto'],
'tokenId': 1,
'networkId': 1,
'return_url': 'https://merchant.example.com/return',
'description': 'Payment for services',
'metadata': {
'order_id': '12345',
},
},
)

payment_intent = response.json()
print(f"Client Secret: {payment_intent['clientSecret']}")
print(f"Payment Link: {payment_intent['paymentLink']['link']}")

PHP (SDK)​

use OrcaRail\OrcaRailClient;

$orcarail = new OrcaRailClient([
'api_key' => getenv('ORCARAIL_API_KEY'),
'api_secret' => getenv('ORCARAIL_API_SECRET'),
]);

$intent = $orcarail->paymentIntents->create([
'amount' => '100.00',
'currency' => 'usd',
'tokenId' => $tokenId, // token UUID
'networkId' => $networkId, // network UUID
'return_url' => 'https://merchant.example.com/return',
'description' => 'Payment for services',
'metadata' => ['order_id' => '12345'],
]);

echo $intent->client_secret;
echo $intent->payment_link?->link;

مقدار پیش‌فرض payment_method_types برابر ['crypto'] است. برای دریافت قیمت کاتالوگ، به‌جای فیلدهای مبلغ price_id بفرستید. SDK پی‌اچ‌پی را ببینید.

قدم‌های بعدی​

پس از ساخت Payment Intent:

  1. Payment Intent را تأیید کنید — آدرس انتقال را برای مشتری بگیرید
  2. مشتری را به اپ پرداخت میزبانی‌شده منتقل کنید
  3. بازگشت به آدرس بازگشت را مدیریت کنید