SDK نود
از SDK رسمی Node.js اورکاریل استفاده کنید تا با کمترین کد یکپارچهسازی پرداخت کریپتو بپذیرید. SDK احراز هویت، قالببندی درخواستها و بررسی امضای وبهوک را انجام میدهد.
نصب
پکیج را از npm نصب کنید:
npm install @orcarail/node
پیکربندی
یک کلاینت OrcaRail با کلید و secret API خود بسازید. بهطور اختیاری آدرس پایه سفارشی (مثلاً برای توسعه محلی) و مهلت زمانی تعیین کنید.
import OrcaRail from '@orcarail/node'
const orcarail = new OrcaRail(
process.env.ORCARAIL_API_KEY!, // e.g., "ak_live_xxx"
process.env.ORCARAIL_API_SECRET!, // e.g., "sk_live_xxx"
{
baseUrl: 'https://api.orcarail.com/api/v1', // optional; default
timeout: 30000, // optional; ms, default 30000
}
)
برای توسعه محلی، baseUrl را به API خود اشاره دهید:
const orcarail = new OrcaRail(apiKey, apiSecret, {
baseUrl: 'http://127.0.0.1:3000/api/v1',
timeout: 65000, // /complete can take up to ~65s
})
live در برابر sandbox
کلیدهای یک سازمان sandbox با ak_test_ شروع میشوند (شبکههای آزمایشی، بدون وجوه واقعی). برای آنها orcarail.livemode برابر false است و await orcarail.paymentIntents.simulate(id) یک پرداخت sandbox را بدون کیف پول تکمیل میکند. رویدادهای وبهوک livemode دارند: هرگز سفارش واقعی را بر اساس رویدادهای livemode: false تحویل ندهید.
کمیسیون (تقسیم و گرفتن سهم خودتان)
کلیدهای API میتوانند درصد کمیسیون اختیاری (۰ تا ۱۰۰) داشته باشند. آن را در داشبورد ← کلیدهای API یا با PATCH /api/v1/api-keys/:id و commissionPercent تنظیم کنید. پرداختهایی که با آن کلید ساخته میشوند کمیسیون را در پیشفاکتور (قابل مشاهده برای پرداختکننده) دارند و هنگام برداشت وجوه، مبلغ کمیسیون به آدرس تنظیمات برداشت شما فرستاده میشود.
Payment Intentها
ساخت Payment Intent
یک payment intent با مبلغ، ارز، توکن، شبکه و آدرسهای بازگشت/لغو بسازید.
const intent = await orcarail.paymentIntents.create({
amount: '100.00',
currency: 'usd',
payment_method_types: ['crypto'],
tokenId: 1, // e.g., USDC
networkId: 1, // e.g., Ethereum
return_url: 'https://yourapp.com/success',
cancel_url: 'https://yourapp.com/cancel',
description: 'Order #12345',
metadata: { order_id: '12345' },
withdrawal_address: '0x...', // optional: override where funds are withdrawn; omit to use your account default
})
console.log(intent.id) // e.g., "550e8400-e29b-41d4-a716-446655440000"
console.log(intent.client_secret)
console.log(intent.payment_link?.link)
تأیید و انتقال به پرداخت
intent را تأیید کنید تا آدرس صفحه پرداخت میزبانیشده را بگیرید، سپس مشتری را منتقل کنید:
const confirmed = await orcarail.paymentIntents.confirm(intent.id, {
client_secret: intent.client_secret!,
return_url: 'https://yourapp.com/success',
})
// Redirect user to confirmed.pay_url or nextAction.redirectToUrl.url
دریافت Payment Intent
وضعیت فعلی یک payment intent را بگیرید:
const intent = await orcarail.paymentIntents.retrieve(
'550e8400-e29b-41d4-a716-446655440000'
)
console.log(intent.status)
ویرایش Payment Intent
پیش از پرداخت مشتری، مبلغ، فراداده، آدرسها یا آدرس برداشت را تغییر دهید:
const updated = await orcarail.paymentIntents.update(
'550e8400-e29b-41d4-a716-446655440000',
{
amount: '150.00',
metadata: { order_id: '12345' },
withdrawal_address: '0x...', // optional: override withdrawal address for this payment
}
)
لغو Payment Intent
وقتی کاربر پرداخت را رها میکند یا به آدرس لغو شما میرسد، لغو کنید:
const canceled = await orcarail.paymentIntents.cancel(
'550e8400-e29b-41d4-a716-446655440000'
)
تکمیل Payment Intent
وقتی کاربر به آدرس موفقیت/بازگشت شما رسید، intent را در حال پردازش علامت بزنید (این کار وبهوک payment_intent.processing را فعال میکند):
const completed = await orcarail.paymentIntents.complete(
'550e8400-e29b-41d4-a716-446655440000'
)
پرداخت با slug
اگر از لینکهای پرداخت با slug استفاده میکنید، میتوانید جزئیات پرداخت را بگیرید و با slug لغو کنید:
// Get pay details by slug
const pay = await orcarail.pay.get('pl_abc123')
// Cancel by slug
await orcarail.pay.cancel('pl_abc123')
وبهوکها
امضای وبهوکها را بررسی کنید و رویدادها را با SDK تجزیه کنید.
بررسی امضا
از بدنه خام درخواست و هدر x-webhook-signature استفاده کنید. secret همان secret وبهوک شماست (از کلید API / داشبورد).
import OrcaRail from '@orcarail/node'
const orcarail = new OrcaRail(apiKey, apiSecret)
const signature = req.headers['x-webhook-signature']
const rawBody = req.rawBody // must be raw string or Buffer, not parsed JSON
if (!orcarail.webhooks.verifySignature(rawBody, signature, webhookSecret)) {
return res.status(400).send('Invalid signature')
}
ساخت رویداد (بررسی و تجزیه)
بررسی و تجزیه را در یک گام انجام دهید؛ اگر امضا نامعتبر باشد exception پرتاب میشود:
const event = orcarail.webhooks.constructEvent(
rawBody,
req.headers['x-webhook-signature'],
webhookSecret
)
switch (event.type) {
case 'payment_intent.completed':
console.log('Payment succeeded:', event.data.object.id)
break
case 'payment_intent.processing':
console.log('Payment processing:', event.data.object.id)
break
case 'payment_intent.canceled':
console.log('Payment canceled:', event.data.object.id)
break
case 'payment_intent.requires_payment_method':
console.log('Payment needs method:', event.data.object.id)
break
default:
console.log('Unhandled event:', event.type)
}
نمونه Express
const express = require('express')
const OrcaRail = require('@orcarail/node').default
const app = express()
const orcarail = new OrcaRail(
process.env.ORCARAIL_API_KEY,
process.env.ORCARAIL_API_SECRET
)
// Use raw body for signature verification
app.post(
'/webhooks/orcarail',
express.raw({ type: 'application/json' }),
(req, res) => {
const signature = req.headers['x-webhook-signature']
const rawBody = req.body // Buffer
try {
const event = orcarail.webhooks.constructEvent(
rawBody,
signature,
process.env.ORCARAIL_WEBHOOK_SECRET
)
console.log('Event:', event.type, event.data.object.id)
res.status(200).json({ received: true })
} catch (err) {
res.status(400).send('Invalid signature')
}
}
)
نمونه Next.js (App Router)
در یک Route Handler، بدنه خام را بخوانید و بررسی کنید:
import { NextRequest, NextResponse } from 'next/server'
import OrcaRail from '@orcarail/node'
const orcarail = new OrcaRail(
process.env.ORCARAIL_API_KEY!,
process.env.ORCARAIL_API_SECRET!
)
export async function POST(request: NextRequest) {
const rawBody = await request.text()
const signature = request.headers.get('x-webhook-signature') ?? ''
try {
const event = orcarail.webhooks.constructEvent(
rawBody,
signature,
process.env.ORCARAIL_WEBHOOK_SECRET!
)
// Handle event.type and event.data.object
return NextResponse.json({ received: true })
} catch {
return NextResponse.json({ error: 'Invalid signature' }, { status: 400 })
}
}
مدیریت خطا
SDK خطاهای نوعدار پرتاب میکند که میتوانید مدیریتشان کنید:
import OrcaRail, {
OrcaRailError,
OrcaRailAPIError,
OrcaRailAuthenticationError,
OrcaRailSignatureVerificationError,
} from '@orcarail/node';
try {
const intent = await orcarail.paymentIntents.create({ ... });
} catch (err) {
if (err instanceof OrcaRailAuthenticationError) {
console.error('Invalid API key or secret');
} else if (err instanceof OrcaRailAPIError) {
console.error('API error:', err.statusCode, err.message);
} else if (err instanceof OrcaRailSignatureVerificationError) {
console.error('Webhook signature invalid');
} else if (err instanceof OrcaRailError) {
console.error('OrcaRail error:', err.message);
}
}
اپ دمو
برای نمونه کامل یکپارچهسازی (ساخت intent، انتقال به پرداخت، صفحه موفقیت، تکمیل، وبهوکها) دموی متنباز را ببینید:
- مخزن: https://github.com/OrcaRail/demo
- پشته: Next.js، SDK نود اورکاریل، صفحه پرداخت میزبانیشده، اندپوینت وبهوک
همچنین ببینید
- مرجع API SDK نود — همه متدها و انواع SDK
- API مربوط به Payment Intentها — مرجع REST
- وبهوکها — رویدادها و پیکربندی
- شروع کار — حساب و کلیدهای API