PAYEXA SANDBOX LAB
این داشبورد برای شبیهسازی دقیق جریان پرداخت PAYEXA در محیط sandbox طراحی شده است؛ از ایجاد تراکنش و هدایت کاربر به startPay تا بررسی status، اجرای verify و مشاهده پاسخهای API در یک فضای متمرکز، شفاف و مناسب تست فنی.
فقط روی ساخت تراکنش جدید بزنید تا یک سناریوی تست با دادههای مناسب و نیمهرندوم ساخته شود. اعلان سرور به سرور به /callback-test همین سندباکس میرود و خریدار به همین صفحه برمیگردد.
از این بخش فقط وارد startPay شوید. عملیات موفق و ناموفق داخل خود صفحه پرداخت انجام میشود.
برای verify، مقدار token باید برابر - باشد.
در صفحهٔ پرداخت «پرداخت موفق»، «منقضی شدن» یا «انصراف خریدار» را بزنید؛ بعد اینجا اعلانهای رسیده و در بخش پایین وریفای را ببینید.
order_id و token از تراکنش انتخابشده پر میشوند، اما میتوانید دستی تغییرشان بدهید.
payment_id و مبلغ از تراکنش انتخابشده پر میشوند؛ وریفای بار اول first_verification: true و بارهای بعد false میدهد.
منتظر استعلام…
منتظر پاسخ…
منتظر verify…
منتظر پاسخ…
همه endpointها فقط با لینک sandbox، هدرهای لازم و نمونه body در کارتهای زیر آمدهاند.
برای محیط تست، به جای pay.pexn.ir از sandbox.pexn.ir استفاده کنید و به جای کلید API خودتان
Authorization: Bearer PAYEXA بفرستید. بقیهٔ کد همان است که روی درگاه اصلی کار میکند: فقط payment_id را نگه دارید،
خریدار را به payment_url بفرستید و بعد از کالبک وریفای کنید.
همهٔ پاسخها {"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
پاسخ 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": "اشتراک یکماهه"
}
خریدار را به payment_url پاسخ بفرستید. در صفحهٔ پرداخت سندباکس «پرداخت موفق»، «منقضی شدن» یا «انصراف خریدار» را بزنید.
https://sandbox.pexn.ir/startPay?authority=<payment_id>
هر دو به یک کد میرسند: 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
بدنه اختیاری است؛ با amount مبلغ هم کنترل میشود. سفارش را فقط وقتی تحویل دهید که first_verification برابر true است.
https://sandbox.pexn.ir/v2/payments/<payment_id>/verify
{ "amount": 5000000 }
وضعیت با کلید، یا برای صفحهٔ اختصاصی/ربات بدون وبسرور بدون کلید. استعلام پرداخت را قطعی نمیکند؛ وریفای مهمتر است.
GET /v2/payments/<payment_id> GET /v2/payments?order_id=INV-1024
GET /v2/payments/<payment_id>/client
برای محیط تست، به جای pay.pexn.ir از sandbox.pexn.ir استفاده کنید.
برای endpointهای API، هدرهای Content-Type: application/json و X-API-KEY: PAYEXA را بفرستید.
مسیر startPay فقط برای redirect کاربر است و از سمت سرور فراخوانی نمیشود.
برای همه درخواستهای اصلی همین هدرها را بفرستید و کلید را فقط در backend نگه دارید.
POST /v1/payment/request POST /v1/payment/verify GET /v1/payment/status
Content-Type: application/json X-API-KEY: PAYEXA
برای شروع پرداخت این 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"
}
}
این آدرس فقط برای redirect کاربر در مرورگر است. آن را از سمت backend به عنوان API صدا نزنید.
ندارد این آدرس فقط برای redirect کاربر در مرورگر است.
authority را از پاسخ request بگیرید و کاربر را فقط به این آدرس redirect کنید.
نتیجهٔ پرداخت از دو راه به 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
بعد از callback، این endpoint را از سمت سرور خودتان بزنید. برای نهاییسازی سفارش فقط پاسخ موفق verify معیار است.
Content-Type: application/json X-API-KEY: PAYEXA
{
"order_id": "ORD-AB12CD34EF56",
"token": "249500"
}
برای مشاهده وضعیت فعلی سفارش از این endpoint استفاده کنید. برای نهاییسازی سفارش، verify همچنان مهمتر است.
X-API-KEY: PAYEXA
برای نمایش وضعیت فعلی سفارش استفاده کنید. برای نهایی کردن سفارش، verify مهمتر است.