شروع سریع: از صفر تا اولین واریز
چهار فراخوانی، از هیچ تا لحظهای که زربان واریز کاربرتان را به سرور شما خبر میدهد. همه نمونهها را با curl نوشتهایم و همانطور که هستند اجرا میشوند.
چهار گام اول هیچ تراکنش مالی نمیسازند. گرفتن توکن، ساخت حساب، گرفتن آدرس واریز و ثبت وبهوک همگی عملیات پیکربندیاند و روی محیط عملیاتی هم بدون اثر مالی اجرا میشوند. تنها گام پنجم — واریز کاربر — دارایی جابهجا میکند؛ اولین بار آن را با کوچکترین مبلغ ممکن انجام دهید.
پیش از شروع، clientId و clientSecret سازمان خود را آماده داشته باشید. اگر ندارید، مرور یکپارچهسازی را ببینید.
export ZARBAN_HOST="https://hd.zarban.io"
export ZARBAN_CLIENT_ID="PLN"
export ZARBAN_CLIENT_SECRET="…" # از داشبورد سازمانی
گام ۱ — گرفتن توکن دسترسی
کلید مخفی هرگز روی درخواستهای عادی نمیرود. اول آن را با یک توکن یکساعته تعویض کنید:
curl -sS -X POST "$ZARBAN_HOST/oauth/token" \
-H "Content-Type: application/json" \
-d "{
\"clientId\": \"$ZARBAN_CLIENT_ID\",
\"clientSecret\": \"$ZARBAN_CLIENT_SECRET\",
\"grantType\": \"ClientCredentials\"
}"
پاسخ:
{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…",
"refreshToken": "rt_3a1f9c2e7b8d4056a9c1e2f3b4d5e6f7",
"expiresIn": 3600
}
توکن را برای گامهای بعد نگه دارید:
export ZARBAN_TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…"
accessToken یک ساعت اعتبار دارد و refreshToken نود روز. در سرویس واقعی، توکن را کش کنید و پیش از انقضا تازهاش کنید — نه اینکه برای هر درخواست یکی بگیرید. جزئیات در احراز هویت و توکنها.
گام ۲ — ساخت حساب برای کاربر شما
هر کاربر شما در سمت زربان یک «حساب» است. آن را با شناسهای که خودتان میدهید به کاربرتان وصل میکنید:
curl -sS -X POST "$ZARBAN_HOST/accounts" \
-H "Authorization: Bearer $ZARBAN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"entityId": "PLN",
"externalId": "user_8412"
}'
پاسخ:
{
"id": 1234,
"entityId": "PLN",
"externalId": "user_8412"
}
externalId شناسه کاربر در سیستم شماست و تنها پل میان کاربر شما و حساب زربان است. id بازگشتی را در پایگاه داده خود کنار کاربر ذخیره کنید؛ بقیه فراخوانیها با همین id کار میکنند.
گام ۳ — گرفتن آدرس واریز
آدرس واریز برای هر ترکیب حساب، ارز و شبکه جداگانه است:
curl -sS "$ZARBAN_HOST/accounts/1234/coindepositaddress?symbol=USDT&network=arbitrum" \
-H "Authorization: Bearer $ZARBAN_TOKEN"
پاسخ:
{
"addresses": [
{
"address": "0x3a1f9c2e7b8d4056a9c1e2f3b4d5e6f7a8b9c0d1",
"network": "arbitrum",
"symbol": "USDT",
"version": "v1",
"memo": "",
"accountId": 1234,
"isDeprecated": false,
"isActive": true
}
]
}
سه نکته پیش از نمایش این آدرس به کاربر:
- پاسخ یک آرایه است. آدرسی را نشان دهید که
isActiveآنtrueوisDeprecatedآنfalseاست. - اگر
memoخالی نبود، کاربر باید آن را هم همراه واریز بفرستد، وگرنه واریز به حسابش نسبت داده نمیشود. بعضی شبکهها مانند تون این را لازم دارند. - ارزها و شبکههای در دسترس را از GET /coins بگیرید؛ آنها را در کد خود ثابت ننویسید.
گام ۴ — ثبت وبهوک
تا اینجا کاربرتان میتواند واریز کند، اما شما خبردار نمیشوید. آدرس خود را ثبت کنید:
curl -sS -X POST "$ZARBAN_HOST/webhooks/PLN" \
-H "Authorization: Bearer $ZARBAN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.shoma.com/webhooks/zarban"
}'
پاسخ:
{
"entityId": "PLN",
"url": "https://api.shoma.com/webhooks/zarban",
"signingKey": "whsec_8f2c1a9b3e7d4f60a1c2b3d4e5f60718"
}
signingKey فقط در همین پاسخ بهصورت متن ساده برمیگردد؛ فراخوانیهای بعدی تنها شکل ماسکشده آن (whsec_••••0718) را برمیگردانند. آن را در همین مرحله در محل نگهداری اسرار سرویس خود ذخیره کنید. اگر کلید را از دست بدهید، تنها راه بازیابی آن است که کلید را بچرخانید — و این کار کلید قبلی را باطل میکند.
گام ۵ — واریز، و رویدادی که میرسد
حالا کاربر مبلغی به آدرس گام ۳ میفرستد. وقتی واریز روی زنجیره تأیید شد، زربان یک POST به آدرس گام ۴ میزند:
{
"type": "transaction_event",
"name": "transaction.coin.deposit"
}
سرویس شما باید پیش از هر کاری امضای درخواست را بررسی کند و سپس با کد 200 پاسخ دهد. روش بررسی امضا و فهرست کامل رویدادها در وبهوکها آمده است.
برای دیدن اینکه تحویل موفق بوده یا نه، بدون نیاز به لاگ سمت خودتان:
curl -sS "$ZARBAN_HOST/webhooks/PLN/logs?limit=5" \
-H "Authorization: Bearer $ZARBAN_TOKEN"
و برای دیدن خود تراکنش در سمت زربان:
curl -sS "$ZARBAN_HOST/transactions?accountId=1234" \
-H "Authorization: Bearer $ZARBAN_TOKEN"