Complex utility for getting card info by its PAN. Supported providers:
- preservice (dumb checks on client-side)
- Binlist
- Braintree
- Freebinchecker
<CustomService>
- BIN/INN — The first six digits of a card number (including the initial MII digit) are known as the issuer identification number
- PAN — primary account number
npm i @qiwi/card-info
yarn add @qiwi/card-info
import BinlistnetService from '@qiwi/card-info/service/binlistnet'
const service = new BinlistnetService({...})
service.getPaymentSystem('4111111111111111') // Promise<'Visa'>
service.getPaymentSystem('1234') // Promise<null>
By default card-info uses native Promise
and fetch
. You may replace them with any compatible api. For example, Bluebird
and Axios
import cardInfo from '@qiwi/card-info'
import bluebird from 'bluebird'
import axios from 'axios'
cardInfo.Promise = bluebird
cardInfo.transport = axios // or any polyfill, pull-fetch-iso, etc.
Each service implementation has own supported opts list, but there is a common part:
Option | Type | Default | Description |
---|---|---|---|
skipError | bool | true | means, that any fetch exception would be converted to null response |
url | string | null | endpoint url |
transport | Object | null | optional extras, merged to fetch arg. For example, {retries: [{delay: 100},{delay: 2000}} |
import {composer} from '@qiwi/card-info'
import {PreService, BinlistnetService} from '@qiwi/card-info/service'
const preService = new PreService()
const binlistnetService = new BinlistnetService()
const composed = compose(preService, binlistnetService)
composed.getPaymentSystem('5321 4012 3456 7890') // 'Mastercard'
composed.getCardInfo('5321 4012 3456 7890') // if preService returns null, the request would be processed with binlist.net backend
import {BraintreeService} from '@qiwi/card-info/service'
const service = new BraintreeService({...})
service.getPaymentSystem('6759649826438453') // Promise<'Maestro'>
service.getPaymentSystem('1234') // Promise<null>
Braintree's credit-card-type
lib is exposed as static property of the class, so you're able to use its API. For example, add custom definitions:
BraintreeService.creditCardType.addCard({
niceType: 'Foo',
type: 'foo',
prefixPattern: /^(12345)$/,
exactPattern: /^(12345)\d*$/,
gaps: [4, 8, 12],
lengths: [16],
code: {
name: 'CVV',
size: 3
}
})
const service = new BraintreeService()
service.getPaymentSystem('1234567890123456') // Promise<'FOO'>
Composer supports any impl of IService, so you're let to create your own class.
import AbstractService from '@qiwi/card-info/service/abstract'
class CustomService extends AbstractService implements IService {
getPaymentSystem(pan: string): Promise<?IPaymentSystem> {
// ...
}
getCardInfo(pan: string): Promise<?ICardInfo> {
// ...
}
}
It's client-side implementation of service. The mostly used paysystems and bins are hardcoded
for performance purposes.