کتابخانههای Node، PHP و Python
یک کتابخانهٔ رسمی نصب کنید و در زبان خودتان پرداخت بسازید، وبهوک را بررسی کنید و خطاها را مدیریت کنید.
کتابخانههای رسمی API را با شیءهای نوعدار، درخواست تکرارپذیر و تلاش دوبارهٔ خودکار، صفحهبندی با نشانگر و بررسی وبهوک میپوشانند. هیچکدام وابستگی زمان اجرا ندارند.
| کتابخانه | بسته | نیازمندی |
|---|---|---|
| Node.js | @bezanbecard/node | Node ۱۸ یا جدیدتر (fetch سراسری)؛ ESM و CommonJS؛ همراه نوعهای TypeScript |
| PHP | bezanbecard/bezanbecard-php | PHP ۷٫۴ یا ۸ با ext-curl و ext-json |
| Python | bezanbecard | Python ۳٫۸ یا جدیدتر، فقط کتابخانهٔ استاندارد؛ راهنمای نوع با py.typed |
نصب
yarn add @bezanbecard/nodeساخت کلاینت
حالت از روی کلید معلوم میشود: sk_test_… فقط دادهٔ آزمایشی را میبیند و sk_live_… فقط دادهٔ واقعی را. کلید را روی سرور نگه دارید.
import Bezanbecard from '@bezanbecard/node';
// CommonJS: const { Bezanbecard } = require('@bezanbecard/node');
const bezanbecard = new Bezanbecard(process.env.BEZANBECARD_SECRET_KEY);متدها
منابع و متدها در هر سه کتابخانه یکیاند. جدول نامها را به شیوهٔ Node آورده است: PHP همین نامها را با -> صدا میزند ($bezanbecard)، برای فهرست all و برای حذف delete دارد؛ Python همهٔ نامها را به شکل snake_case مینویسد (bezanbecard.payment_links.list()، attach_deposit) و برای حذف delete دارد.
| منبع | متدها |
|---|---|
payments | create، retrieve، update، list، cancel، topup، attachDeposit، detachDeposit، approve، resolveOverpayment |
receipts | list، retrieve، create، approve، reject |
deposits | list، retrieve، create، ignore، restore |
paymentLinks | create، retrieve، update، list |
customers | create، retrieve، update، list، del |
events | retrieve، list |
webhookEndpoints | create، retrieve، update، list، del |
cards، devices | retrieve، list |
account | retrieve |
testHelpers.deposits | create |
ساخت و تأیید پرداخت
const payment = await bezanbecard.payments.create({
amount: 12_500_000,
reference: 'order-1042',
customer_details: { name: 'Test Customer', phone: '09900001234' },
return_url: 'https://shop.example/orders/1042/thanks',
});
// redirect to payment.checkout_url; later:
const current = await bezanbecard.payments.retrieve(payment.id);
if (current.status === 'succeeded') fulfilOrder(current.reference);خطاها
هر کتابخانه برای هر نوع خطا یک کلاس دارد که type، code، param، message و شناسهٔ درخواست را نگه میدارد.
| Node و Python | PHP | کِی |
|---|---|---|
InvalidRequestError | InvalidRequestException | 400، 402، 404، 409 |
AuthenticationError | AuthenticationException | 401 |
PermissionError | PermissionException | 403 |
IdempotencyError | IdempotencyException | Idempotency-Key تکراری یا در جریان |
RateLimitError | RateLimitException | 429 بعد از تلاشهای دوباره |
APIError | ApiErrorException | 5xx بعد از تلاشهای دوباره |
ConnectionError (در Python: APIConnectionError) | ApiConnectionException | بدون پاسخ: شبکه یا تایماوت |
SignatureVerificationError | Signature | بررسی امضای وبهوک ناموفق بود |
import { InvalidRequestError } from '@bezanbecard/node';
try {
await bezanbecard.payments.create({ amount: 500 });
} catch (error) {
if (error instanceof InvalidRequestError && error.code === 'amount_too_small') console.log(error.param, error.requestId);
else throw error;
}فهرست کدها در خطاها آمده است.
تلاش دوباره، درخواست تکرارپذیر و وبهوک
- هر
POSTیکIdempotency-Keyدارد که در تلاشهای دوباره هم همان میماند. خطای شبکه، تداخل409،429و5xxبهطور پیشفرض دو بار با فاصلهٔ رو به افزایش و تصادفی دوباره امتحان میشوند وRetry-Afterرعایت میشود. برای تکرارپذیر ماندن بعد از راهاندازی دوباره، کلید خودتان را بدهید (درخواست تکرارپذیر). - فهرستها همهٔ صفحهها را برایتان مرور میکنند (صفحهبندی).
constructEvent/Webhook::constructEvent/Webhook.construct_eventامضا را روی بدنهٔ خام بررسی میکنند و هنگام تعویض کلید هر کدام از دوv1را میپذیرند (وبهوکها).
پیکربندی
| گزینه | Node | PHP | Python |
|---|---|---|---|
| نسخهٔ API | apiVersion | bezanbecard_version | api_version |
| نشانی پایه | baseUrl | api_base | base_url |
| تایماوت | timeout (میلیثانیه) | timeout، connect_timeout (ثانیه) | timeout (ثانیه) |
| تلاش دوباره | maxNetworkRetries | max_network_retries | max_network_retries |
گزینههای هر درخواست (کلیدی دیگر، کلید تکرارپذیری، نسخه) در آخرین آرگومان هر متد میآیند؛ پس یک فرایند میتواند برای چند حساب کار کند.