card-info
Complex utility for getting card info by its PAN.
Supported providers:
Glossary
Install
npm i @qiwi/card-info
yarn add @qiwi/card-info
Usage examples
import BinlistnetService from '@qiwi/card-info/service/binlistnet'
const service = new BinlistnetService({...})
service.getPaymentSystem('4111111111111111')
service.getPaymentSystem('1234')
Promise
and transport
customization
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
Service configuration
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}} |
Service composition
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')
composed.getCardInfo('5321 4012 3456 7890')
Braintree
import {BraintreeService} from '@qiwi/card-info/service'
const service = new BraintreeService({...})
service.getPaymentSystem('6759649826438453')
service.getPaymentSystem('1234')
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')
CustomService
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> {
}
}
What's PreService
It's client-side implementation of service. The mostly used paysystems and bins are hardcoded
for performance purposes.
Alternatives