Skip to content

Repository files navigation

wind-js-client

Официальная клиентская библиотека для работы с API Wind. Поддерживает Node.js и TypeScript.

Установка

npm install @windmc/js

Конфигурация

import{WindClient}from"@windmc/js";constclient=newWindClient({clientId: "ВАШ_CLIENT_ID",clientSecret: "ВАШ_CLIENT_SECRET",// для OAuthredirectUri: "https://yoursite.example/callback",appToken: "ВАШ_APP_TOKEN",// для BillingwebhookSecret: "ВАШ_WEBHOOK_SECRET",// для проверки вебхуков});

OAuth авторизация

// 1. Получить ссылку для входаconsturl=client.getAuthorizeUrl(["identify","bank"]);// → https://windmc.pro/oauth2/authorize?...// 2. Обменять code на токеныconsttokens=awaitclient.exchangeCode(code);// 3. Получить данные пользователяconstuser=awaitclient.getUser(tokens.access_token);console.log(user.nickname,user.avatar);

PKCE (для SPA и мобильных приложений)

Если ваше приложение не может безопасно хранить clientSecret (браузер, мобильное приложение), используйте PKCE вместо секрета — clientSecret в конфиге при этом можно не указывать:

import{WindClient,generatePKCE}from"@windmc/js";constclient=newWindClient({clientId: "ВАШ_CLIENT_ID",redirectUri: "https://yourapp.example/callback",});// 1. Сгенерировать пару и сохранить codeVerifier (например, в сессии/cookie)const{ codeVerifier, codeChallenge }=generatePKCE();consturl=client.getAuthorizeUrl(["identify"],undefined,codeChallenge);// 2. После редиректа обменять code на токены с помощью сохранённого codeVerifierconsttokens=awaitclient.exchangeCode(code,codeVerifier);// 3. refreshToken() и revokeToken() для PKCE-токенов работают без clientSecretconstrefreshed=awaitclient.refreshToken(tokens.refresh_token);

Доступные scopes

ScopeОписание
identifyНикнейм, UUID, роли
bankСчета и транзакции
bank:chargeСписание средств (требует подтверждения)
communitiesСписок сообществ пользователя
friendsСписок друзей

Методы

OAuth / пользователь

client.getAuthorizeUrl(scopes,state?)// URL авторизацииclient.exchangeCode(code)// code → tokensclient.refreshToken(refreshToken)// обновить токенclient.revokeToken(token)// отозвать токенclient.getUser(accessToken)// scope: identifyclient.getBank(accessToken)// scope: bankclient.getBankTransactions(accessToken,limit?)// scope: bankclient.getCommunities(accessToken)// scope: communitiesclient.getFriends(accessToken)// scope: friendsclient.createCharge(accessToken,payload)// scope: bank:chargeclient.getCharge(accessToken,chargeId)// scope: bank:charge

Billing (App Token)

// Создать счёт — вернёт payUrl для редиректа пользователяconstbill=awaitclient.createBill({toAccountId: 1001,amount: 500,comment: "Оплата",webhookUrl: "https://yoursite.example/webhooks/wind",returnUrl: "https://yoursite.example/success",});// → { billId, payUrl, expiresAt }// Проверить статус счётаconststatus=awaitclient.getBill(bill.billId);// → { status: "pending" | "paid" | "expired", ... }

Вебхуки

Счёт действует 10 минут. После оплаты Wind отправляет POST-запрос на webhookUrl с заголовком X-Signature: sha256=<hmac>.

// Express: читать тело как raw bufferapp.use("/webhooks/wind",express.raw({type: "application/json"}));app.post("/webhooks/wind",(req,res)=>{constsignature=req.headers["x-signature"];letpayload;try{payload=client.parseWebhook(req.body.toString(),signature);}catch{returnres.status(401).json({error: "Неверная подпись"});}if(payload.event==="bill.paid"){console.log(`Оплачен счёт ${payload.billId} на сумму ${payload.amount}`);}res.status(200).json({ok: true});});

Примеры

Готовые примеры в директории example/:

  • oauth-login — OAuth авторизация с Express
  • create-bill — Создание счёта на оплату
  • webhook — Обработка вебхуков

Сборка

npm run build

About

Официальная клиентская библиотека для работы с API Wind. Поддерживает Node.js и TypeScript.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages