BasicEx Java SDK 
This Java SDK fully implements the RESTful interface of BasicEx payment gateway.
Installation 
Prerequisites 
- Java 1.8 or higher.
Gradle Usage 
Add this dependency to your project's build file:
groovy
implementation "com.basicex:basicex-java:1.0.5"Maven Usage 
Add this dependency to your project's pom.xml file:
xml
<dependency>
    <groupId>com.basicex</groupId>
    <artifactId>basicex-java</artifactId>
    <version>1.0.5</version>
</dependency>Documentation 
Usage 
Configure SDK Connection Timeout 
Set SDK connection and read timeout globally:
java
BasicExClient client = new BasicExClient(configPath, BasicExConfig.builder()
                .connectTimeout(30 * 1000)
                .readTimeout(30 * 1000)
                .build());Configure SDK Automatic Retry 
BasicEx Java SDK can be configured to automatically retry a specified number of times when a request fails due to reasons such as network connection timeout:
java
BasicExClient client = new BasicExClient(configPath, BasicExConfig.builder()
                .maxNetworkRetries(2)
                .build());Configure SDK Proxy 
BasicEx Java SDK supports setting up a proxy for situations where your server needs a proxy to access the internet:
java
BasicExClient client = new BasicExClient(configPath, BasicExConfig.builder()
                .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 1080)), new PasswordAuthentication("user", "password".toCharArray()))
                .build());Create a New Invoice 
java
import com.basicex.sdk.BasicExClient;
import com.basicex.sdk.exception.BasicexException;
import com.basicex.sdk.model.InvoiceObject;
import com.basicex.sdk.model.params.InvoiceCreateParams;
import com.basicex.sdk.model.params.constant.AmountType;
import java.io.IOException;
import java.math.BigDecimal;
import java.security.cert.CertificateException;
import java.util.UUID;
public class BasicExTest{
    private static String configPath = "~/4d1ebd88-8154-4ca1-b1c6-051b7d28c204/config.json";
    public static void main(String[] args) throws CertificateException, IOException, BasicexException {
        BasicExClient client = new BasicExClient(configPath);
        InvoiceObject invoiceObject = client.invoices().create(InvoiceCreateParams.builder()
                .redirectUrl("https://basicex.com")
                .notificationUrl("https://basicex.com/notify")
                .currency("USDT")
                .amount(new BigDecimal("10.25"))
                .amountType(AmountType.COIN_AMOUNT)
                .orderId(UUID.randomUUID().toString())
                .description("Hello, BasicEx")
                .build());
        String cashierUrl = invoiceObject.getCashierUrl();
        System.out.println(cashierUrl);
    }
}Create a Payout Request: 
java
import com.basicex.sdk.BasicExClient;
import com.basicex.sdk.exception.BasicexException;
import com.basicex.sdk.model.InvoiceObject;
import com.basicex.sdk.model.PayoutObject;
import com.basicex.sdk.model.params.InvoiceCreateParams;
import com.basicex.sdk.model.params.PayoutCreateParams;
import com.basicex.sdk.model.params.constant.AmountType;
import com.basicex.sdk.model.params.constant.NetWorkType;
import java.io.IOException;
import java.math.BigDecimal;
import java.security.cert.CertificateException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class BasicExPayoutsTest {
    private static String configPath = "~/4d1ebd88-8154-4ca1-b1c6-051b7d28c204/config.json";
    public static void main(String[] args) throws CertificateException, IOException, BasicexException {
        BasicExClient client = new BasicExClient(configPath);
        PayoutService payout = client.payouts();
        Map<String, String> map = new HashMap<>();
       	map.put("desc", "Hello,BasicEx");
        PayoutCreateParams params = PayoutCreateParams.builder()
                .amount(new BigDecimal(5))
                .currency("USDT")
                .notificationUrl("https://basicex.com/notify")
                .description("TEST PAYOUT SDK")
                .metadata(map)
                .physical(Boolean.TRUE)
                .targetType("ADDRESS")
                .target("0x682D39Ea8d26510BE379d30807AF61e5eF9E2XXX")
                .network(NetWorkType.ERC20.code)
                .merOrderNo(UUID.randomUUID().toString().replace("-", ""))
                .build();
        PayoutObject payoutObject = payout.create(params);
        System.out.println(payoutObject);
    }
}