English | فارسی
نمونهی ساده و آموزشی اتصال به درگاه پرداخت پیپینگ با Node.js — بدون هیچ وابستگی خارجی (فقط Node استاندارد).
این پروژه بر پایهی API نسخه ۳ پیپینگ (مسیر v3/pay) پیادهسازی شده است.
- کاربر فرم صفحهی اصلی را پر میکند (ایمیل، موبایل، نام، مبلغ و توضیحات).
POST /payment→ سرور با فراخوانیPOST api.payping.ir/v3/payیک دستور پرداخت میسازد. پاسخ شاملpaymentCodeوurlآمادهی هدایت کاربر است، پس کاربر مستقیماً به همانurlریدایرکت میشود.- پس از پرداخت در درگاه بانکی، پیپینگ نتیجه را با یک فرم POST به
returnUrl(مسیر/verify) میفرستد:status: عدد ۱ بهمعنی موفق، ۰ بهمعنی عدم پرداختerrorCode: کد خطای بازگشتی — در موفقیت خالی استdata: رشته JSON شاملclientRefId،paymentCode،paymentRefId(کد رهگیری)،amount،gatewayAmount،cardNumberوcardHashPan
- اگر
statusبرابر ۱ باشد، سرور باPOST api.payping.ir/v3/pay/verifyتراکنش را تایید نهایی میکند و نتیجه را نمایش میدهد.
مهم: اگر verify تا ۱۰ دقیقه پس از پرداخت فراخوانی نشود، پرداخت نامعتبر میشود و وجه به حساب پرداختکننده برمیگردد.
├── server.js # کل برنامه: فرم، ساخت پرداخت و تایید تراکنش
├── package.json
├── README.md # مستندات انگلیسی
└── README.fa.md # مستندات فارسی
| مسیر | متد | معادل API پیپینگ (v3) | توضیح |
|---|---|---|---|
/payment |
POST | POST /v3/pay |
ساخت پرداخت و ریدایرکت به url برگشتی |
/verify |
POST | POST /v3/pay/verify |
دریافت نتیجه از درگاه و تایید نهایی |
- Node.js نسخهی ۱۸ یا بالاتر (بهخاطر
fetchداخلی) - توکن API از پنل پیپینگ (بخش توسعهدهندگان ← توکنها)
# لینوکس / مک
PAYPING_TOKEN=توکن-شما node server.js
# ویندوز (PowerShell)
$env:PAYPING_TOKEN="توکن-شما"; node server.js
# یا با npm
npm startسپس مرورگر را روی http://localhost:3000 باز کنید.
| متغیر | پیشفرض | توضیح |
|---|---|---|
PAYPING_TOKEN |
— | توکن دریافتی از payping.ir (اجباری) |
PORT |
3000 |
پورت اجرای سرور |
RETURN_URL |
http://localhost:3000/verify |
آدرس برگشت کاربر پس از پرداخت؛ در حالت واقعی آدرس دامنهی خود را بدهید |
مثال حالت واقعی:
PAYPING_TOKEN=xxxx RETURN_URL=https://domain.com/verify PORT=80 node server.js- پاسخ ساخت پرداخت علاوه بر
paymentCodeوurl، شامل مبالغ هم هست:amount(مبلغ دستور پرداخت)،gatewayAmount(مبلغ نهایی پرداخت که با توجه به سناریوی کارمزد ممکن است بیشتر باشد) و کارمزدهایpayerWage/businessWageوpaypingVat. - پاسخ verify اطلاعات کامل تراکنش را برمیگرداند: مبلغ، شماره کارت ماسکشده،
clientRefId، تاریخ پرداخت و کارمزدها. - وضعیتهای خاص verify:
409باmetaData.code = 110→ تراکنش قبلاً وریفای شده؛ نیازی به تایید مجدد نیست.202یا502→ تایید هنوز در حال پردازش است؛ verify را مجدداً فراخوانی کنید.
- فیلدهای اختیاری ساخت پرداخت که در صورت نیاز میتوانید اضافه کنید:
nationalCode،isReversible(امکان بازگشت وجه تا ۳۰ دقیقه پس از وریفای) وisBlocked(پرداخت مسدودشونده برای تسهیم پس از پرداخت با سرویسهایshare/unblock).
- توکن را هرگز در کد کامیت نکنید؛ فقط از متغیر محیطی استفاده کنید.
- مبلغ را همیشه سمت سرور تعیین و اعتبارسنجی کنید؛ اعتماد به مبلغ ارسالی از سمت کاربر خطرناک است. در این نمونه برای سادگی، مبلغ از فرم خوانده و به
returnUrlالصاق میشود و در بازگشت باamountارسالی پیپینگ مقایسه میشود — در پروژهی واقعی آن را از فاکتور/دیتابیس بخوانید. - طبق مستندات رسمی: پس از بازگشت موفق، صحت
amountوclientRefIdارسالی از پیپینگ را با پایگاه داده خود مقایسه کنید و در صورت مغایرت از ادامهی فرایند صرفنظر کنید (این مقایسه در نمونه انجام میشود). - بهتر است
clientRefIdرا شمارهی فاکتور قرار دهید و نتیجهی verify را بههمراهpaymentRefIdدر دیتابیس ذخیره کنید تا تراکنش قابل پیگیری باشد. - این نمونه صرفاً آموزشی است؛ برای محیط عملیاتی از HTTPS استفاده کنید و تدابیر امنیتی لازم (محدودسازی نرخ درخواست، لاگگیری و…) را بیندیشید.
GPL-3.0 — مطابق مخزن اصلی.