بازی کنید
باز کردن بازی نمونه (سرورهای توسعه: platform-dev، platform-web-dev، pay-dev).
دانلود پروژه (.zip): Node.js و جاوااسکریپت مرورگر ساده، بدون هیچ وابستگی و بدون مرحلهی بیلد.
چه چیزهایی را نشان میدهد
یک مسابقهی سنگ، کاغذ، قیچی «بهترین از ۵ دست» در برابر ربات: اولین کسی که ۳ امتیاز بگیرد برنده است و دست مساوی امتیاز ندارد. هر مسابقه ۱ بلیت هزینه دارد و برنده ۵۰ گیتا کوین میگیرد. همهی قابلیتهای پلتفرم در آن هست:
| قابلیت | کجای بازی | صفحهی ویکی | کد |
|---|---|---|---|
| ورود با بازینس (انتخاب اسپلش)، جابهجایی حساب، خروج | اجرای اول؛ تنظیمات ← «اتصال حساب» | ورود | public/js/platform.js، server/services.js (platformToken، platformLogin) |
ارزها: بلیت (محلی) و گیتا کوین (get-coin) |
نشانهای نوار بالا، بنر جایزه | گیتا کوین | public/js/platform.js (getCoin)، public/js/app.js (renderTopbar) |
۵۰ گیتا کوین برای برنده (add-coin با کلید یکتا)، برای دریافت ورود لازم است |
پنجرهی نتیجه، نوار «جایزه منتظر توست» | گیتا کوین | server/services.js (claimMatchReward)، public/js/app.js (claim) |
| صفحهی «انتخاب جایزه» | بنر بنفش | صفحهی جایزه | public/js/platform.js (openRewardSelection) |
| آموزش: قانونها ← راهنما روی «انتخاب جایزه» ← صفحهی game-offer ← «خرید موفق» بستهی شروع (۵ بلیت) | اجرای اول | صفحهی پیشنهاد آموزش | public/js/app.js (بخش آموزش)، server/services.js (claimStarterPack) |
| شیت کشویی | همهی صفحههای بازینس | شیت پایین | public/js/sheet.js، public/styles.css |
پرداخت بازینس: «بستهی بلیت»، ۱۰ بلیت به ۴٬۹۰۰ تومان (SKU example_pack) |
کارت فروشگاه | پرداخت بازینس | server/pay.js، server/services.js (startPurchase، verifyPurchase)، public/js/purchase.js |
گرفتن UTM و ?tag= بهعنوان اولین تماس |
هر لینکی، مثلاً …/example/?utm_source=wiki&utm_medium=docs |
لینکها و UTM | public/js/api.js (FIRST_TOUCH)، server/services.js (ensureUser) |
اجرای محلی
unzip baziness-example-rps.zip && cd baziness-example-rps
cp .env.example .env # fill in BAZINESS_CLIENT_ID / BAZINESS_CLIENT_SECRET
npm start # → http://127.0.0.1:4380/پیشنیاز: Node.js 20 یا بالاتر. دادهها در data/db.json نگه داشته میشوند، یک ذخیرهساز JSON کوچک به جای دیتابیس شما.
.env |
مقدار توسعه |
|---|---|
BAZINESS_CLIENT_ID / BAZINESS_CLIENT_SECRET |
کلاینت توسعهی نمونه (از تیم پلتفرم بگیرید، یا کلاینت بازی خودتان) |
BAZINESS_PLATFORM_PACKAGE_NAME |
com.karizmastudio.example |
BAZINESS_PAY_BASE_URL |
https://pay-dev.karizmastudios.org |
BAZINESS_PAY_PACKAGE_NAME |
com.karizmastudio.example |
PACK_SKU / PACK_PRICE |
example_pack / 4900 |
پیشنهاد
کلید ندارید؟ باز هم اجرا میشود. با
BAZINESS_PLATFORM_ENABLED=falseرابط بازینس پنهان میشود و جایزهها محلی نگه داشته میشوند. باDEV_FAKE_BAZINESS_PAY=trueوBAZINESS_PAY_BASE_URL=http://localhost:4380/dev/baziness، خریدها از یک درگاه آزمایشی داخلی با دکمهی «پرداخت موفق» رد میشوند.
نکتههای تست
- ورود: روی این نسخهی توسعه، «ورود با حساب بازینس» هر شماره موبایلی را با کد
111111میپذیرد. پیامکی فرستاده نمیشود. - دوباره دیدن آموزش: از «بازنشانی این دستگاه» پایین لابی استفاده کنید. حافظهی محلی پاک میشود و بار بعد بازیکن کاملاً جدید است.
- بازیکن دوم در همان مرورگر:
?device=someone-elseرا به آدرس اضافه کنید. - دریافت جایزه بهعنوان مهمان: بدون ورود یک مسابقه را ببرید. درخواست دریافت
PLATFORM_NOT_LINKEDبرمیگرداند و شیت ورود باز میشود. بعد از ورود، دریافت خودش دوباره تلاش میکند. - خریدی که بعداً تمام میشود: خرید را شروع کنید، پرداخت کنید، بازی را ببندید و دوباره باز کنید. لابی پرداختهای در انتظار را تطبیق میدهد.
- لینک کمپین:
…/example/?utm_source=wiki&utm_campaign=testرا باز کنید. آدرس بعد از بارگذاری تمیز است و برچسبها هنگام ساخت حساب روی آن ذخیره میشوند.
ساختار پروژه
baziness-example-rps/
├── .env.example every setting, documented
├── package.json "npm start" — no dependencies
├── server/
│ ├── index.js HTTP routes + static files (relative paths: works at / or /example/)
│ ├── env.js configuration (.env loader)
│ ├── platform.js platform client: auth, create-user, tokens, add-coin ← secret stays here
│ ├── pay.js Baziness Pay: buy URL, get_payment, verify_payment (form), consume
│ ├── services.js accounts & linking, match rules, rewards, starter pack, purchases
│ ├── store.js JSON-file store (swap for your database)
│ └── fake-pay.js local fake gateway (never in production)
└── public/
├── index.html, styles.css
├── assets/ art (hands, bot, pack, prize, Gita coin, ticket, Baziness logo)
└── js/
├── api.js first module: UTM capture, device id, fetch wrapper
├── platform.js BazinessPlatform: page URLs, messages, login, get-coin
├── sheet.js the swipe-down sheet
├── purchase.js Pay popup: tab opened in the click, verify on focus
├── ui.js DOM helpers, Persian numbers, toasts, modals
└── app.js splash, lobby, match, tutorialمیزبانی زیر یک مسیر
کلاینت فقط از آدرسهای نسبی (api/…، assets/…) استفاده میکند، پس همین فایلها هم در / و هم زیر یک پیشوند کار میکنند. روی سرور توسعهی ویکی، nginx پیشوند /example/ را برمیدارد و درخواست را به پروسهی Node میفرستد:
location = /example { return 301 /example/; }
location /example/ {
proxy_pass http://127.0.0.1:4380/; # trailing slash: /example/api/me → /api/me
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}