Cost+Docs

Java / Kotlin

Opinber Kotlin/Java SDK fyrir Cost+ greiðslugáttina

Opinber Kotlin SDK fyrir Cost+ greiðslugátt, fullkomlega samhæfð við Java. Einfaldar HPP (Hýst greiðslusíða) tilvísunarflæði, HMAC farmundirritun og staðfestingu á vefhook.

Eiginleikar

  • Kotlin-fyrst, Java-vingjarnlegur — gagnaflokkar, grunnlínur, núllöryggi; fullkomlega nothæf frá Java
  • kotlinx.serialization — engin Gson/Jackson háð; sjálfvirk snákamál/camelCase kortlagning
  • HMAC-SHA256 undirskriftargerð og sannprófun á stöðugum tíma
  • Webhook þáttun + API byggt á pöntunarstaðfestingu
  • Fresta aðgerðum fyrir óblokkandi IO með Kotlin coroutines
  • Inndælanleg HttpClient til að auðvelda prófun með sýndarflutningum
  • Miðar á Java 17+

Kröfur

Uppsetning

Gradle (Kotlin DSL)

dependencies {
    implementation("io.nopayn:nopayn-sdk:1.0.0")
}

Gradle (Groovy)

dependencies {
    implementation 'io.nopayn:nopayn-sdk:1.0.0'
}

Maven

<dependency>
    <groupId>io.nopayn</groupId>
    <artifactId>nopayn-sdk</artifactId>
    <version>1.0.0</version>
</dependency>

Fljótleg byrjun (Kotlin)

1. Frumstilla viðskiptavininn

import io.nopayn.*
import kotlinx.coroutines.runBlocking

fun main() = runBlocking {
    val nopayn = NoPaynClient(
        NoPaynConfig(
            apiKey = "your-api-key",
            merchantId = "your-project",
        )
    )
}

2. Búðu til greiðslu og sendu til HPP

val result = nopayn.generatePaymentUrl(
    CreateOrderParams(
        amount = 1295,            // €12.95 in cents
        currency = "EUR",
        merchantOrderId = "ORDER-001",
        description = "Premium Widget",
        returnUrl = "https://shop.example.com/success",
        failureUrl = "https://shop.example.com/failure",
        webhookUrl = "https://shop.example.com/webhook",
        locale = "en-GB",
        expirationPeriod = "PT30M",
    )
)

println(result.orderUrl)    // HPP URL
println(result.paymentUrl)  // Direct payment method URL
println(result.signature)   // HMAC-SHA256 signature

3. Meðhöndlaðu vefkrókinn

// In your HTTP handler (Ktor, Spring, etc.)
val rawBody: String = request.body()
val verified = nopayn.verifyWebhook(rawBody)

println(verified.order.status)  // "completed", "cancelled", etc.
println(verified.isFinal)       // true when the order won't change

if (verified.order.status == "completed") {
    // Fulfil the order
}

Fljótleg byrjun (Java)

import io.nopayn.*;
import kotlinx.coroutines.BuildersKt;
import kotlinx.coroutines.Dispatchers;

public class Example {
    public static void main(String[] args) throws Exception {
        NoPaynClient client = new NoPaynClient(
            new NoPaynConfig("your-api-key", "your-project", "https://api.nopayn.co.uk")
        );

        Order order = BuildersKt.runBlocking(
            Dispatchers.getIO(),
            (scope, continuation) -> client.createOrder(
                new CreateOrderParams(
                    1295, "EUR", "ORDER-001", "Premium Widget",
                    "https://shop.example.com/success",
                    "https://shop.example.com/failure",
                    "https://shop.example.com/webhook",
                    "en-GB", null, "PT30M"
                ),
                continuation
            )
        );

        System.out.println("Order ID: " + order.getId());
        System.out.println("Order URL: " + order.getOrderUrl());

        // Signature utilities work synchronously
        String sig = client.generateSignature(1295, "EUR", order.getId());
        boolean valid = client.verifySignature(1295, "EUR", order.getId(), sig);
    }
}

API Tilvísun

NoPaynClient(config, httpClient?)

ParameterTegundÁskiliðSjálfgefið
config.apiKeyString
config.merchantIdString
config.baseUrlStringNeihttps://api.nopayn.co.uk
httpClientjava.net.http.HttpClientNeiSjálfgefinn viðskiptavinur

client.createOrder(params): Order (fresta)

Býr til pöntun í gegnum POST /v1/orders/.

ParameterTegundÁskiliðLýsing
amountIntUpphæð í ISO 4217 minnieiningu gjaldmiðilsins (til dæmis sent fyrir EUR)
currencyStringISO 4217 kóði (EUR, GBP, USD, NOK, SEK)
merchantOrderIdString?NeiInnri pöntunartilvísun þín
descriptionString?NeiLýsing á pöntun
returnUrlString?NeiTilvísun eftir vel heppnaða greiðslu
failureUrlString?NeiTilvísun við hætt við/rennur út/villu
webhookUrlString?NeiÓsamstilltur tilkynningar um stöðubreytingar
localeString?NeiHPP tungumál (en-GB, de-DE, nl-NL, osfrv.)
paymentMethodsList<String>?NeiSía HPP aðferðir
expirationPeriodString?NeiISO 8601 tímalengd (PT30M)

Greiðsluaðferðir í boði: credit-card, apple-pay, google-pay, vipps-mobilepay

client.getOrder(orderId): Order (fresta)

Sækir pöntunarupplýsingar í gegnum GET /v1/orders/{id}/.

client.createRefund(orderId, amount, description?): Refund (fresta)

Gefur út fulla eða hluta endurgreiðslu í gegnum POST /v1/orders/{id}/refunds/.

client.generatePaymentUrl(params): PaymentUrlResult (fresta)

Þægindaaðferð sem býr til pöntun og skilar:

PaymentUrlResult(
    orderId: String,     // NoPayn order UUID
    orderUrl: String,    // HPP URL
    paymentUrl: String?, // Direct payment URL (first transaction)
    signature: String,   // HMAC-SHA256 of amount:currency:orderId
    order: Order,        // Full order object
)

client.generateSignature(amount, currency, orderId): String

Myndar HMAC-SHA256 hex undirskrift. Hin kanónísku skilaboð eru $amount:$currency:$orderId, undirrituð með API lyklinum.

client.verifySignature(amount, currency, orderId, signature): Boolean

Stöðug staðfesting á HMAC-SHA256 undirskrift.

client.verifyWebhook(rawBody): VerifiedWebhook (fresta)

Þýðir meginmál vefkróksins og hringir síðan í GET /v1/orders/{id}/ til að staðfesta raunverulega stöðu.

Sjálfstæð HMAC tól

import io.nopayn.NoPaynSignature

val sig = NoPaynSignature.generate("your-api-key", 1295, "EUR", "order-uuid")
val ok  = NoPaynSignature.verify("your-api-key", 1295, "EUR", "order-uuid", sig)

Frá Java:

String sig = NoPaynSignature.generate("your-api-key", 1295, "EUR", "order-uuid");
boolean ok = NoPaynSignature.verify("your-api-key", 1295, "EUR", "order-uuid", sig);

Villumeðferð

import io.nopayn.*

try {
    nopayn.createOrder(CreateOrderParams(amount = 100, currency = "EUR"))
} catch (e: ApiException) {
    println(e.statusCode)  // 401, 400, etc.
    println(e.errorBody)   // Raw API error response
} catch (e: NoPaynException) {
    println(e.message)     // Network or parsing error
}

Pöntunarstöður

StaðaÚrslitaleikur?Lýsing
newNeiPöntun búin til
processingNeiGreiðsla í gangi
completedGreiðsla tókst - afhenda vörurnar
cancelledGreiðsla felld niður af viðskiptavinum
expiredGreiðslutengillinn rann út á tíma
errorTæknileg bilun

Bestu starfsvenjur Webhook

  1. Staðfestu alltaf í gegnum API — hleðslutækið inniheldur aðeins pöntunarauðkenni, aldrei stöðuna. verifyWebhook() á SDK gerir þetta sjálfkrafa.
  2. ** Skilaðu HTTP 200** til að staðfesta móttöku. Allir aðrir kóðar kalla fram allt að 10 endurtilraunir (2 mínútna millibili).
  3. Taka í notkun varakönnun — fyrir pantanir eldri en 10 mínútur sem hafa ekki náð endanlega stöðu skaltu skoða getOrder() sem öryggisnet.
  4. Vertu sjálfráða — þú gætir fengið sama vefhook margoft.

Prófakort

Notaðu þessi kort í Cost+ prófunarham (sandkassavefsíða):

KortNúmerSkýringar
Visa (árangur)4111 1111 1111 1111Hvaða CVV sem er
Mastercard (árangur)5544 3300 0003 7Hvaða CVV sem er
Visa (hafnað)4111 1111 1111 1105Heiðra ekki
Visa (ófullnægjandi fjármunir)4111 1111 1111 1151Ófullnægjandi fjármunir

Notaðu hvaða fyrningardagsetningu sem er í framtíðinni og hvaða þriggja stafa CVC sem er.

Demo app

Sýningarforrit sem byggir á Docker (Ktor) er innifalið í GitHub geymslunni til að prófa allt greiðsluflæðið.

Stuðningur

Þarftu aðstoð? Hafðu samband við þjónustudeild okkar á support@costplus.io.

On this page