UnoPayv1.0.0
  1. خانه
  2. خانه
1.0.0 دو متد همه درگاه‌های ماتریس را پوشش می‌دهد

یک API تایپ‌شده برای درگاه‌های پرداخت ایران

UnoPay به همه درگاه‌های پرداخت اینترنتی دو متد یکسان می‌دهد. با createPayment پرداخت را آغاز کنید، با verifyCallback آن را تایید کنید. آداپتور را عوض کنید تا درگاه عوض شود — کد فراخوانی شما دست‌نخورده می‌ماند.

نصب

npm i unopay
تایپ‌امن آماده لبه API یکپارچه خطاهای تایپ‌شده
createPayment
const result = await unopay.createPayment('zarinpal', request);
// result.redirectUrl   -> https://sandbox.zarinpal.com/pg/StartPay/S000...
// result.transactionId -> S000...
// result.providerToken -> S000...
verifyCallback
const result = await unopay.verifyCallback('zarinpal', callback);
if (result.isSuccessful) {
  await markOrderPaid(result.transactionId, result.settledAmount);
} else {
  await markOrderFailed(result.errorReason);
}

2

متد کلاینت

11

درگاه مستندشده

1

آداپتور منتشرشده

15

نماد صادرشده

unopay 1.0.0 · بدون وابستگی زمان اجرا · فقط fetch

کل یکپارچه‌سازی در پانزده خط

این تمام ماجراست. فرض بر اپلیکیشن Express است، ولی هیچ چیز دیگری در پروژه شما تغییر نمی‌کند — همین دو فراخوانی در هر رانتایمی که fetch داشته باشد کار می‌کنند.

checkout.ts ts
import { UnoPay, ZarinpalAdapter } from 'unopay';

const unopay = new UnoPay({
  zarinpal: new ZarinpalAdapter({ merchantId: process.env.ZARINPAL_MERCHANT_ID! }),
});

app.post('/checkout', async (req, res) => {
  const payment = await unopay.createPayment('zarinpal', {
    amount: 50000,
    currency: 'IRT',
    callbackUrl: 'https://yoursite.com/api/payment/callback',
    metadata: { description: 'Order #1024' },
  });
  res.redirect(payment.redirectUrl);
});
این سایت از سورس منتقل شده، نه از README

هر امضای اینجا از پوشه src/ در کامیت 4a04be5 خوانده شده است. سه ادعای README پکیج SDK در برابر کد برقرار نیست، و صفحه‌های مربوطه به‌جای تکرارشان همان را می‌گویند.

چرا یک لایه آداپتور ارزش دارد

غلط املایی خطای کامپایل است

کلید provider به‌صورت keyof TGateways تایپ می‌شود، پس createPayment('zarinpl', …) کامپایل نمی‌شود. جنریک از آبجکت آداپتورهای شما استنتاج می‌شود، پس هرگز خودتان آن را نمی‌نویسید.

پول یک بار تبدیل می‌شود

50000 با currency: 'IRT' بفرستید و آداپتور 500000 ریال برای درگاه می‌فرستد. تبدیل داخل آداپتور و در رفت و برگشت انجام می‌شود.

پنج کلاس خطا، یک ریشه

هر خرابی یک PaymentError با code پایدار و داده زیربنایی روی cause است. پرداخت ردشده اصلاً خطا نیست — یعنی isSuccessful: false.

هرجا fetch هست اجرا می‌شود

هیچ built-in از Node، هیچ stream، هیچ وابستگی زمان اجرا. Node 18+، Bun، Deno، Cloudflare Workers و Vercel Edge همگی همان یک API را برآورده می‌کنند که به آن وابسته است.

هر درگاه، و آنچه واقعاً وجود دارد

مستقیماً از ماتریس مقایسه خود SDK خوانده شده است. درگاهی که آداپتور ندارد یک مشخصه است، نه یک یکپارچه‌سازی — کاشی‌ها می‌گویند کدام کدام است.

زرین‌پال

ZarinPal

پرداخت‌یار · REST (JSON)

بلهپشتیبانی‌شده

آیدی‌پی

IDPay

پرداخت‌یار · REST (JSON)

بلهبرنامه‌ریزی‌شده

به‌پرداخت ملت

Behpardakht Mellat

شاپرک / PSP بانکی · SOAP 1.1 (WSDL)

خیربرنامه‌ریزی‌شده

سامان کیش

Saman SEP

شاپرک / PSP بانکی · REST / SOAP، مبتنی بر توکن

خیربرنامه‌ریزی‌شده

سداد بانک ملی

Sadad Melli

شاپرک / PSP بانکی · REST / SOAP

خیرفقط سند

تجارت الکترونیک پارسیان

Parsian PEC

شاپرک / PSP بانکی · SOAP / توکن REST

خیرفقط سند

پرداخت الکترونیک پاسارگاد

Pasargad PEP

شاپرک / PSP بانکی · REST / ریدایرکت

خیرفقط سند

آسان پرداخت

Asan Pardakht

شاپرک / PSP بانکی · REST / SOAP

خیرفقط سند

پرداخت نوین آرین

Pardakht Novin

شاپرک / PSP بانکی · REST / SOAP

خیرفقط سند

ایران‌کیش

IranKish

شاپرک / PSP بانکی · REST / SOAP

خیرفقط سند

سیزپی

SizPay

پرداخت‌یار · REST (JSON)

بلهفقط سند

وضعیت پشتیبانی درگاه‌ها، صادقانه

یک درگاه به‌صورت پیاده‌سازی‌شده منتشر شده است. سه درگاه در README پکیج SDK به‌عنوان برنامه‌ریزی‌شده نام برده شده‌اند. بقیه مجموعه اسناد در درخت docs/ فقط مشخصات‌اند — نه آداپتوری وجود دارد و هیچ‌کدام اعلام نشده‌اند. صفحه درگاه‌ها تصویر کامل را دارد، از جمله اینکه کدام درگاهها سندباکس واقعی برای تست دارند.

یک آداپتور یعنی یک یکپارچه‌سازی کارآمد

زرین‌پال امروز منتشر شده، همراه با سندباکس. پکیج را نصب کنید، آداپتور را وصل کنید، و درگاه دوم یک آرگومان سازنده می‌شود نه یک بازنویسی.