Skip to content

Repository files navigation

SerikaPay Java library

CI

The official SerikaPay library for Java 11+. Uses the JDK HttpClient; the only dependency is Gson.

Install

Gradle:

implementation("dev.serika:serikapay-java:1.0.0")

Maven:

<dependency>
  <groupId>dev.serika</groupId>
  <artifactId>serikapay-java</artifactId>
  <version>1.0.0</version>
</dependency>

Usage

Create a key under Developers → API keys in your wallet. Keep it on the server.

import dev.serika.serikapay.*;
import java.math.BigDecimal;

SerikaPay serika = new SerikaPay(System.getenv("SERIKA_SECRET_KEY"));

Payment payment = serika.payments().create(
    PaymentCreateParams.builder()
        .amount(new BigDecimal("4.99"))
        .description("Sticker pack")
        .customerEmail("fan@example.com")
        .putMetadata("orderId", "1042")
        .idempotencyKey("order_1042") // optional — generated if not set
        .build());

System.out.println(payment.getStatus()); // completed

Amounts are BigDecimal so coins never pick up floating-point error.

Payments

Payment p = serika.payments().retrieve("pay_m1x2y3");
PaymentList page = serika.payments().list(10);          // page.getData(), page.hasMore()
serika.payments().refund("pay_m1x2y3");                   // full refund
serika.payments().refund("pay_m1x2y3", new BigDecimal("2.00"));

Balance and transactions

Balance balance = serika.balance().retrieve();           // EUR
TransactionList txs = serika.transactions().list(20, "spend");

Webhooks

try {
    Event event = Webhook.constructEvent(rawBody, request.getHeader("Serika-Signature"), System.getenv("SERIKA_WEBHOOK_SECRET"));
    if ("payment.completed".equals(event.getType())) {
        Payment paid = event.getPayment();
        // fulfil the order
    }
} catch (SignatureVerificationException e) {
    response.setStatus(400);
}

Read the body as a String before any JSON binding — in Spring, take @RequestBody String body.

Errors

Failed requests throw the unchecked SerikaPayException:

try {
    serika.payments().create(PaymentCreateParams.builder().amount(new BigDecimal("4.99")).build());
} catch (SerikaPayException e) {
    e.getType();        // "insufficient_balance"
    e.getStatusCode();  // 400, or 0 for network failures ("connection_error")
    e.getRaw();         // the raw error JSON
}

Configuration

SerikaPay serika = SerikaPay.builder(System.getenv("SERIKA_SECRET_KEY"))
    .baseUrl("https://wallet-api.serika.dev") // default
    .timeout(Duration.ofSeconds(30))
    .maxRetries(2)                             // network errors, 429 and 5xx
    .build();

GET requests and payment creation (which always carries an idempotency key) are retried with exponential backoff; refunds are not. The client is thread-safe.

Development

mvn test

License

MIT

About

Official SerikaPay library for Java

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages