Bin detection
Starting from version 3.5.0 you can use new Bin detection feature for your own UI.
iOS
Android
iOS Android
Follow steps below for a successful request to get payment brands for provides card Bin:
Request Checkout ID
Request ChechoutInfo
Request Brands for provided Bin
Request Checkout ID
See detailed instruction in our guide: SDK Integration
Your app should request a checkout ID from your server . This example uses our sample integration server; please adapt it to use your own backend API.
Objective-C
Swift
NSURLRequest *merchantServerRequest = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://YOUR_URL/?amount=100¤cy=EUR&paymentType=DB"]];
[[[NSURLSession sharedSession] dataTaskWithRequest:merchantServerRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// Handle error
NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
self.checkoutID = JSON[@"checkoutId"];
}] resume];
let merchantServerRequest = NSURLRequest(url: URL(string: "https://YOUR_URL/?amount=100¤cy=EUR&paymentType=DB")!)
URLSession.shared.dataTask(with: merchantServerRequest as URLRequest) { (data, response, error) in
// Handle error
if let data = data, let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
let checkoutID = json?["checkoutId"] as? String
}
}.resume()
Java
Kotlin
public String requestCheckoutId() {
URL url;
String urlString;
HttpURLConnection connection = null;
String checkoutId = null;
urlString = YOUR_URL + "?amount=48.99¤cy=EUR&paymentType=DB";
try {
url = new URL(urlString);
connection = (HttpURLConnection) url.openConnection();
JsonReader reader = new JsonReader(
new InputStreamReader(connection.getInputStream(), "UTF-8"));
reader.beginObject();
while (reader.hasNext()) {
if (reader.nextName().equals("checkoutId")) {
checkoutId = reader.nextString();
break;
}
}
reader.endObject();
reader.close();
} catch (Exception e) {
/* error occurred */
} finally {
if (connection != null) {
connection.disconnect();
}
}
return checkoutId;
}
fun requestCheckoutId(): String? {
val url: URL
var connection: HttpURLConnection? = null
var checkoutId: String? = null
val urlString = YOUR_URL.toString() + "?amount=48.99¤cy=EUR&paymentType=DB"
try {
url = URL(urlString)
connection = url.openConnection() as HttpURLConnection
val reader = JsonReader(InputStreamReader(connection.inputStream, "UTF-8"))
reader.beginObject()
while (reader.hasNext()) {
if (reader.nextName() == "checkoutId") {
checkoutId = reader.nextString()
break
}
}
reader.endObject()
reader.close()
} catch (e: Exception) {
/* error occurred */
} finally {
connection?.disconnect()
}
return checkoutId
}
Create an instance of OPPPaymentProvider
Objective-C
Swift
self.provider = [OPPPaymentProvider paymentProviderWithMode:OPPProviderModeTest];
self.provider = OPPPaymentProvider(mode: .test)
Java
Kotlin
OppPaymentProvider paymentProvider = new OppPaymentProvider(context, Connnect.ProviderMode.TEST);
val paymentProvider = OppPaymentProvider(context, Connnect.ProviderMode.TEST)
Now, let the class implement the ITransactionListener
interface.
Request CheckoutInfo
Use CheckoutId from step above to make a CheckoutInfo request call:
Objective-C
Swift
[self.provider requestCheckoutInfoWithCheckoutID:checkoutId completionHandler:^(OPPCheckoutInfo * _Nullable checkoutInfo, NSError * _Nullable error) {
if (error) {
// Handle error
} else {
// Make Bin detection call
}
}];
self.provider.requestCheckoutInfo(withCheckoutID: checkoutId, completionHandler: { (checkoutInfo, error) in
if error != nil {
// Handle error
return
}
// Make Bin detection call
})
Java
Kotlin
try {
paymentProvider.requestCheckoutInfo(CHECKOUT_ID, transactionListener);
} catch (PaymentException e) {
/* error occurred */
}
@Override
public void paymentConfigRequestSucceeded(CheckoutInfo checkoutInfo) {
// Make Bin detection call
}
try {
paymentProvider.requestCheckoutInfo(CHECKOUT_ID, transactionListener)
} catch (e: PaymentException) {
/* error occurred */
}
override fun paymentConfigRequestSucceeded(checkoutInfo: CheckoutInfo) {
// Make Bin detection call
}
Request Bin detection service
Objective-C
Swift
[self.provider requestPaymentBrandsForBin:bin checkoutID:checkoutID completionHandler:^(NSArray * _Nullable paymentBrands, NSError * _Nullable error) {
if (error) {
// Handle error
} else {
// Handle detected brands list
}
}];
self.provider.requestPaymentBrands(forBin: bin, checkoutID: checkoutID!, completionHandler: { (brands, error) in
if error != nil {
// Handle error
return
}
// Handle detected brands list
})
Java
Kotlin
public void requestBinInfo() {
paymentProvider.requestBinInfo(checkoutId, bin, this::onBinInfo);
}
public void onBinInfo(@Nullable BinInfo binInfo,
@Nullable PaymentError error) {
if (binInfo != null) {
// handle detected brands
String[] detectedBrands = binInfo.getBrands();
}
}
open fun requestBinInfo() {
paymentProvider.requestBinInfo(checkoutId, bin) {
binInfo: BinInfo?, error: PaymentError? -> onBinInfo(binInfo, error)
}
}
open fun onBinInfo(binInfo: BinInfo?,
error: PaymentError?) {
if (binInfo != null) {
// handle detected brands
val detectedBrands = binInfo.brands
}
}
Final notes
Bin detection request is asynchronous.
Yous can make multiple Bin detection calls after CheckoutId and CheckoutInfo calls.
Bin length must be at least 1 digit.
Please do not create Bin detection request for each entered Bin digit
Take a look at this page Advanced options for a good example of Bin detection service usage - look for Card brand detection paragraph.
You can find a good example of Bin detection service usage at Advanced options page for a good example of Bin detection service usage - look for Card brand detection paragraph.