PAYEXA SANDBOX LAB

داشبورد تست پرداخت

این داشبورد برای شبیه‌سازی دقیق جریان پرداخت PAYEXA در محیط sandbox طراحی شده است؛ از ایجاد تراکنش و هدایت کاربر به startPay تا بررسی status، اجرای verify و مشاهده پاسخ‌های API در یک فضای متمرکز، شفاف و مناسب تست فنی.

Sandbox Token PAYEXA

نسخهٔ ۲: POST /v2/payments با Authorization: Bearer PAYEXA، اعلان امضاشده و وریفای با first_verification — دقیقاً مثل درگاه اصلی. نسخهٔ ۱: /v1/payment/request، بازگشت با status=OK&authority و verify با token مبلغ یکتا.

0
0
0
0 / 0

ساخت تراکنش

فقط روی ساخت تراکنش جدید بزنید تا یک سناریوی تست با داده‌های مناسب و نیمه‌رندوم ساخته شود. اعلان سرور به سرور به /callback-test همین سندباکس می‌رود و خریدار به همین صفحه برمی‌گردد.

منتظر ارسال…
منتظر پاسخ…

هدایت به صفحه پرداخت و شبیه سازی

از این بخش فقط وارد startPay شوید. عملیات موفق و ناموفق داخل خود صفحه پرداخت انجام می‌شود.

بدون انتخاب Order: -

برای verify، مقدار token باید برابر - باشد.

در صفحهٔ پرداخت «پرداخت موفق»، «منقضی شدن» یا «انصراف خریدار» را بزنید؛ بعد اینجا اعلان‌های رسیده و در بخش پایین وریفای را ببینید.

هنوز اعلانی نرسیده است.

              

              
هنوز تراکنشی انتخاب نشده است.

استعلام و Verify

order_id و token از تراکنش انتخاب‌شده پر می‌شوند، اما می‌توانید دستی تغییرشان بدهید.

payment_id و مبلغ از تراکنش انتخاب‌شده پر می‌شوند؛ وریفای بار اول first_verification: true و بارهای بعد false می‌دهد.

منتظر استعلام…
منتظر پاسخ…
منتظر verify…
منتظر پاسخ…

راهنمای برنامه‌نویس‌ها

همه endpointها فقط با لینک sandbox، هدرهای لازم و نمونه body در کارت‌های زیر آمده‌اند.

Integration Quick Start · v2

برای محیط تست، به جای pay.pexn.ir از sandbox.pexn.ir استفاده کنید و به جای کلید API خودتان Authorization: Bearer PAYEXA بفرستید. بقیهٔ کد همان است که روی درگاه اصلی کار می‌کند: فقط payment_id را نگه دارید، خریدار را به payment_url بفرستید و بعد از کالبک وریفای کنید.

هدرها و قالب پاسخ

COMMON

همهٔ پاسخ‌ها {"ok": true, "data": …} یا {"ok": false, "error": {"code", "message"}} هستند؛ مبلغ‌ها ریال.

POST /v2/payments
GET  /v2/payments/{payment_id}
POST /v2/payments/{payment_id}/verify
Authorization: Bearer PAYEXA
Content-Type: application/json
Backend only همان قالب درگاه اصلی

ساخت پرداخت

POST

پاسخ payment_id، payment_url، مبلغ دقیق قابل واریز و کارت را دارد. همان order_id و مبلغ دوباره، همان پرداخت را برمی‌گرداند.

https://sandbox.pexn.ir/v2/payments
201 → data.payment_id
       data.payment_url
       data.payable_amount
{
  "amount": 5000000,
  "order_id": "INV-1024",
  "callback_url": "https://sandbox.pexn.ir/callback-test",
  "return_url": "https://your-shop.example.com/back",
  "description": "اشتراک یک‌ماهه"
}
amount به ریال، حداقل ۱۰٬۰۰۰ در سندباکس http هم پذیرفته است telegram_url و bale_url در سندباکس null

هدایت خریدار

GET

خریدار را به payment_url پاسخ بفرستید. در صفحهٔ پرداخت سندباکس «پرداخت موفق»، «منقضی شدن» یا «انصراف خریدار» را بزنید.

https://sandbox.pexn.ir/startPay?authority=<payment_id>
Browser redirect only

کالبک: بازگشت خریدار و اعلان امضاشده

GET + POST

هر دو به یک کد می‌رسند: payment_id را بخوانید و وریفای کنید. امضا با کلید PAYEXA است (روی درگاه اصلی با کلید API خودتان).

return_url یا callback_url
?payment_id=…&order_id=…&status=paid
status: paid | expired | canceled
ربات: t.me/YourBot?start=<payment_id>
X-Payexa-Event: payment.paid
X-Payexa-Signature: t=…,v1=…
{"event": "payment.paid",
 "payment_id": "…", "status": "paid", …}
v1 == HMAC-SHA256(key="PAYEXA", "{t}.{raw body}")  و  |now - t| ≤ 300 ثانیه
payment.paid تا وریفای چند بار تکرار می‌شود؛ payment.expired یک بار.
برای دیدن اعلان‌ها: callback_url = https://sandbox.pexn.ir/callback-test
هم‌شکل درگاه اصلی نهایی‌سازی فقط با verify

وریفای

POST

بدنه اختیاری است؛ با amount مبلغ هم کنترل می‌شود. سفارش را فقط وقتی تحویل دهید که first_verification برابر true است.

https://sandbox.pexn.ir/v2/payments/<payment_id>/verify
{ "amount": 5000000 }
200 + first_verification 409 PAYMENT_NOT_PAID / PAYMENT_EXPIRED 409 AMOUNT_MISMATCH

استعلام پرداخت

GET

وضعیت با کلید، یا برای صفحهٔ اختصاصی/ربات بدون وب‌سرور بدون کلید. استعلام پرداخت را قطعی نمی‌کند؛ وریفای مهم‌تر است.

GET /v2/payments/<payment_id>
GET /v2/payments?order_id=INV-1024
GET /v2/payments/<payment_id>/client
pending | paid | expired
Integration Quick Start

برای محیط تست، به جای pay.pexn.ir از sandbox.pexn.ir استفاده کنید. برای endpointهای API، هدرهای Content-Type: application/json و X-API-KEY: PAYEXA را بفرستید. مسیر startPay فقط برای redirect کاربر است و از سمت سرور فراخوانی نمی‌شود.

هدرهای لازم

COMMON

برای همه درخواست‌های اصلی همین هدرها را بفرستید و کلید را فقط در backend نگه دارید.

POST /v1/payment/request
POST /v1/payment/verify
GET /v1/payment/status
Content-Type: application/json
X-API-KEY: PAYEXA
Backend only Do not hardcode API key in frontend

ساخت درخواست پرداخت

POST

برای شروع پرداخت این endpoint را بزنید. بعد از گرفتن authority کاربر را به startPay بفرستید.

Content-Type: application/json
X-API-KEY: PAYEXA
{
  "amount": 250000,
  "callback_url": "https://merchant.example.com/payexa/callback",
  "meta": {
    "order_ref": "INV-1001"
  }
}
201 Created order_ref بهتر است یکتا باشد

هدایت کاربر به صفحه پرداخت

GET

این آدرس فقط برای redirect کاربر در مرورگر است. آن را از سمت backend به عنوان API صدا نزنید.

ندارد
این آدرس فقط برای redirect کاربر در مرورگر است.
authority را از پاسخ request بگیرید
و کاربر را فقط به این آدرس redirect کنید.
Browser redirect only authority از پاسخ request خوانده می‌شود

دریافت نتیجه در callback

GET + POST

نتیجهٔ پرداخت از دو راه به callback_url شما می‌رسد، دقیقاً مثل درگاه اصلی. در هر دو حالت، سفارش را فقط بعد از پاسخ موفق verify نهایی کنید.

callback_url?status=OK&authority=<authority>
status=NOK یعنی ناموفق یا لغوشده
{"event": "payment_success",
 "order_id": "...", "authority": "...",
 "status": "SUCCESS", "amount_unique": ...}
اگر مسیر callback شما POST را نپذیرد، سرور بلافاصله همان
درخواست برگشت (GET) را هم می‌فرستد؛ پس یک پرداخت ممکن است
دو بار برسد و کد شما باید دریافت تکراری را تحمل کند.
برای دیدن ارسال موفق: https://sandbox.pexn.ir/callback-test
هم‌شکل درگاه اصلی نهایی‌سازی فقط با verify

وریفای تراکنش

POST

بعد از callback، این endpoint را از سمت سرور خودتان بزنید. برای نهایی‌سازی سفارش فقط پاسخ موفق verify معیار است.

Content-Type: application/json
X-API-KEY: PAYEXA
{
  "order_id": "ORD-AB12CD34EF56",
  "token": "249500"
}
200 = first success 201 = already verified 409 = not settled yet

استعلام وضعیت تراکنش

GET

برای مشاهده وضعیت فعلی سفارش از این endpoint استفاده کنید. برای نهایی‌سازی سفارش، verify همچنان مهم‌تر است.

X-API-KEY: PAYEXA
برای نمایش وضعیت فعلی سفارش استفاده کنید.
برای نهایی کردن سفارش، verify مهم‌تر است.
Monitoring User-facing status