> ## Documentation Index
> Fetch the complete documentation index at: https://doc-test-my.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Additional Support for Payment Methods

> Additional support features available for card, netbanking, wallets and more.

Use the Razorpay Android Custom SDK to integrate supported payment methods on the Checkout form of your Android app as per your business requirements. Here are some **additional methods** provided by the SDK for the integration and usage of payment methods:

* [Card Utilities](/docs/payments/payment-gateway/android-integration/custom/additional-features#card-utilities)
* [Fetch Logo](/docs/payments/payment-gateway/android-integration/custom/additional-features#logo)
* [Validate Data](/docs/payments/payment-gateway/android-integration/custom/additional-features#data-validation)
* [Custom `WebViewClient` and `WebChromeClient`](/docs/payments/payment-gateway/android-integration/custom/additional-features#custom-webviewclient-and-webchromeclient)

## Card Utilities

You can use these methods for card payment method integration.

#### Fetch Card Network

The SDK provides a method to get the card network name of the provided card number. <br />

* At least 6 digits of the card number are required to identify the network. <br />
* Possible values returned by this method are, `visa`, `mastercard` and `unknown`.<br />
* If it is not able to identify the network it returns `unknown`.

```java Java theme={null}
razorpay.getCardNetwork(cardNumber);
```

## Card Number Validation

The SDK provides a checksum-based method to determine if the entered card number is valid or not.

```java Java theme={null}
razorpay.isValidCardNumber(cardNumber);
```

#### Fetch Card Number Length for Card Network

The SDK provides a method to get the length of the card number for a specific card network.

```java Java theme={null}
razorpay.getCardNetworkLength(cardNetworkName);
```

## Logo

#### Fetch Bank Logo URL

The SDK provides a method to fetch the bank logo's URL, here `bankCode` is the code of bank, you will be able to get it from the response received in `onPaymentMethodsReceived` callback.

```java Java theme={null}
razorpay.getBankLogoUrl(bankCode);
```

#### Fetch Wallet Logo URL

The SDK provides a method to get the wallet logo's URL.

```java Java theme={null}
razorpay.getWalletLogoUrl(walletName);
```

#### Fetch Wallet Square Logo URL

The SDK provides a method to get the wallet's square-shaped logo's URL.

```java Java theme={null}
razorpay.getWalletSqLogoUrl(walletName);
```

## Data Validation

The SDK provides basic validation for the payment data `JSONObject`. In case of a validation error, the SDK returns an error map in the `onValidationError` callback function.

#### Sample Code

The sample code shown below describes a validation error on the `contact` field:

```java Java theme={null}
razorpay.validateFields(payload, new ValidationListener() {
   @Override
   public void onValidationSuccess() {
       try {
           webview.setVisibility(View.VISIBLE);
           outerBox.setVisibility(View.GONE);
           razorpay.submit(payload, PaymentOptions.this);
       } catch (Exception e) {
           Log.e("com.example", "Exception: ", e);
       }
   }

   @Override
   public void onValidationError(Map error) {
       Log.d("com.example", "Validation failed: " + error.get("field") + " " + error.get("description"));
       Toast.makeText(PaymentOptions.this, "Validation: " + error.get("field") + " " + error.get("description"), Toast.LENGTH_SHORT).show();
   }
});
```

## Custom WebViewClient and WebChromeClient

Our SDK sets an instance of `RazorpayWebViewClient` and `RazorpayWebChromeClient` to the WebView passed to facilitate bank page optimizations. If you want to set your own custom `WebViewClient` you have to extend `RazorpayWebViewClient` and pass it to our SDK.

<Warning>
  **Watch Out!**

  This step is optional and is only required when you want to set a custom `WebViewClient`/`WebChromeClient`
</Warning>

#### Sample Code

The sample code given below shows how to customize the `RazorpayWebViewClient`:

```java Java theme={null}
/**
 * Extend the RazorpayWebViewClient for your custom hooks
 */
razorpay.setWebviewClient(new RazorpayWebViewClient(razorpay){

  @Override
  public void onPageStarted(WebView view, String url, Bitmap favicon) {
      // Make sure you do not forget to call the super method
      super.onPageStarted(view, url, favicon);
      Log.d(TAG, "Custom client onPageStarted");
  }

  @Override
  public void onPageFinished(WebView view, String url) {
      // Make sure you do not forget to call the super method
      super.onPageFinished(view, url);
      Log.d(TAG, "Custom client onPageFinished");
  }
});
```

Similarly, you can set your own `WebChromeClient`:

```java Java theme={null}
/**
 * Extend the RazorpayWebChromeClient for your custom hooks
 */
razorpay.setWebChromeClient(new RazorpayWebChromeClient() {
	@Override
	public void onProgressChanged(WebView view, int newProgress) {
		// Make sure you do not forget to call the super method
		super.onProgressChanged(view, newProgress);
		customProgressBar.setProgress(newProgress);
	}
});
```
