Karta bog'lash (Card Bind)
Hamkor mobil ilovasi foydalanuvchilarining to'lov kartasini Paylov orqali bog'lash oqimi, backend integratsiyasi va webhook qabul qilish.
Nega bunday qilinadi
Hamkorning PCI DSS sertifikati bo'lmagani uchun karta raqami (PAN) hech qachon hamkorning backend'iga yoki frontend kodiga tushmaydi. Karta raqami faqat Paylov domenidagi himoyalangan sahifada (webview) kiritiladi. Hamkor faqat tayyor cardId va bog'lash natijasini oladi.
Oqim
- Hamkor backend'i Paylov'dan bir martalik bog'lash havolasini (
bindUrl) so'raydi — Bog'lash havolasini yaratish. - Hamkor ilovasi shu havolani webview'da ochadi. Foydalanuvchi karta raqamini kiritadi va SMS kodini tasdiqlaydi — karta Paylov tomonida faollashadi.
- Paylov hamkor backend'iga karta ID va ma'lumotlari bilan webhook yuboradi — Webhook.
- (Ixtiyoriy) Webhook yetib bormasa, hamkor backend'i natijani o'zi tekshiradi — Holatni tekshirish.
Webview sahifasining ichki ishlashi (dizayn, forma, SMS kiritish) Paylov frontend jamoasi tomonidan tayyorlanadi — hamkor tomonidan hech qanday qo'shimcha ish talab qilinmaydi.
Autentifikatsiya
Backend so'rovlari (havola yaratish va holatni tekshirish) mavjud Paylov Subscribe API bilan bir xil merchant Bearer tokenidan foydalanadi:
Authorization: Bearer < ACCESS_TOKEN >Webview hech qanday token talab qilmaydi — u faqat bir martalik token orqali ishlaydi. Bu token havola yaratishda olinadi va bindUrl ichiga yozilgan bo'ladi.
Webview'ni ochish
Hamkor faqat olingan bindUrlni odatiy webview komponentida ochadi.
Android (Kotlin) — misol
val webView = WebView(context)
webView.settings.javaScriptEnabled = true
webView.loadUrl(bindUrl) // bindUrl — havola yaratish javobidan olinganiOS (Swift, WKWebView) — misol
let webView = WKWebView(frame: view.bounds)
webView.load(URLRequest(url: URL(string: bindUrl)!))React Native — misol
import { WebView } from 'react-native-webview';
<WebView source={{ uri: bindUrl }} />Foydalanuvchi sahifada karta raqamini kiritadi, SMS kodini tasdiqlaydi. Jarayon tugagach, sahifa returnUrlga qaytishi mumkin (agar havola yaratishda berilgan bo'lsa) — bu holda hamkor ilovasi webview'ni yopishi kerak. Natijaning asosiy va ishonchli manbai esa webhook hisoblanadi, webview'ning o'zi emas.
Bog'langandan keyin
cardId qo'lga tushgach, hamkor uni mavjud Paylov Subscribe API bilan odatiy usulda ishlatadi — bu qismda hech narsa o'zgarmaydi:
| Endpoint | Vazifasi |
|---|---|
GET /merchant/userCard/getCard/{cardId}/ | Karta ma'lumoti va balansini olish |
GET /merchant/userCard/getAllUserCards/ | Foydalanuvchining barcha kartalari |
DELETE /merchant/userCard/deleteUserCard/ | Kartani o'chirish |
POST /merchant/receipts/pay/ va h.k. | cardId bilan to'lov qilish |
Xato kodlari
| Kod | HTTP | Ma'nosi |
|---|---|---|
permission_denied | 400 | Merchant Subscribe API'ga ulanmagan yoki token noto'g'ri |
link_expired | 400 | Havola muddati o'tgan (taxminan 20 daqiqa) |
link_already_used | 400 | Bu havola bilan karta allaqachon bog'langan |
Xavfsizlik — qisqacha
- Karta raqami (PAN) hamkor tizimining hech bir qismiga (frontend, backend, log) tushmaydi.
- Webview'dagi havola bir martalik va vaqtinchalik — qayta ishlatib bo'lmaydi.
- Webhook Basic Auth bilan himoyalangan — login/parol faqat hamkor va Paylov o'rtasida ma'lum.
- Barcha so'rovlar HTTPS orqali amalga oshirilishi shart.