Documentatie/API-referentie

API REFERENCE

Betaling of autorisatie starten

Geldt voor betalingen op een fysieke POS-terminal

Deze API verstuurt betaal- of autorisatieopdrachten vanuit de merchantapp naar de betaalapp op de POS-terminal.

De app van de merchant moet worden ondertekend, verpakt en geüpload naar de TMS-marktplaats.

Betaling starten:

Op de POS-terminal is de betaalapp Switchio Pay vooraf geïnstalleerd. De app van de merchant moet met de betaalapp Switchio Pay communiceren om een betaling of autorisatie uit te voeren. Roep deze als volgt aan:

URI = "app://switchiopay/api/main/v7/payment"

ParameterTypeBeschrijvingVerplicht
transactionIdStringTransactie-IDVerplicht
amountintBedrag in centen; bijvoorbeeld: 1.5EUR is 150Verplicht
currencyCodeintISO 4217-valutacode; bijvoorbeeld 978 voor euro'sVerplicht
invoiceNumberstringAangepaste unieke ID, maximaal 20 tekensVerplicht

Voorbeeldcode:

 /**
     * Process an ECR payment according to the specification
     * @param transactionId Transaction ID
     * @param amount Payment amount in minor units
     * @param invoiceNumber Custom transaction number
     * @param currencyCode ISO 4217 numeric currency code (for example, 978=EUR, 208=DKK)
     * @param callback Callback interface
     */
    public void processPayment(String transactionId, int amount, String invoiceNumber, String currencyCode, ECRCallback callback) {
        this.ecrCallback = callback;
        
        try {
            // Build the ECR v7 URI
            JSONObject paymentData = new JSONObject();
            paymentData.put("transactionId", transactionId);
            paymentData.put("amount", amount);
            paymentData.put("currencyCode", Integer.parseInt(currencyCode));
            paymentData.put("invoiceNumber", invoiceNumber);
                        
            // Build the URI manually to ensure correct formatting
            String uriString = "app://switchiopay/api/main/v7/payment?data=" + 
                android.net.Uri.encode(paymentData.toString());
            Uri uri = Uri.parse(uriString); 
            Intent intent = new Intent(ECR_ACTION, uri);
            intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            intent.putExtra("data", paymentData.toString());
            intent.putExtra("transactionId", transactionId);
            intent.putExtra("amount", amount);
            intent.putExtra("currencyCode", Integer.parseInt(currencyCode));
            intent.putExtra("invoiceNumber", invoiceNumber); 
            // Launch the Activity and wait for the result
            activity.startActivityForResult(intent, ECR_PAYMENT_REQUEST_CODE);   
            Log.d(TAG, "ECR payment Intent sent; waiting for the result...");
            
        } catch (Exception e) {
            Log.e(TAG, "Payment processing exception", e);
            Log.e(TAG, "Exception details: " + e.getMessage());
            if (callback != null) {
                callback.onError("Payment processing error: " + e.getMessage());
            }
        }
        Log.d(TAG, "=== processPayment completed ===");
    }

Voorbeeld van een aanvraag:

app://switchiopay/api/main/v7/preauth?data={"transactionId":"88bb2366-716d-11ed-a1eb-0242ac120002","amount": 1200,"currencyCode":978,"invoiceNumber": "123456789012345678"}

Voorbeeld van een antwoord:

{
    "aid": "A0000000283101",
    "amount": 500,
    "cashbackAmount": 1500,
    "aosa": "null",
    "appCryptogram": "5F52BA71C7B45441",
    "appLabel": "Air Bank",
    "authCode": "114546",
    "availableBalance": "1000",
    "brand": "MASTERCARD",
    "cardHolderMessage": "Approved",
    "cardInputType": "CLESS",
    "cid": "80",
    "currency": 203,
    "cvmTypeList": [
        "PIN_ONLINE"
    ],
    "dateTimeServer": "Jul 16, 2025 14:40:50",
    "dateTimeTerminal": "Jul 16, 2025 14:39:37",
    "driverNumber": "123456",
    "emvResponseData": {
        "smartCardScheme": "1",
        "authorisationResponseCode": "00"
    },
    "expiration": "****",
    "invoiceNumber": "VS353464556789780",
    "isReversed": false,
    "merchantIdAcquirer": "TNEXGO01",
    "merchantIdIssuer": "1357",
    "merchantMessage": "Approved",
    "monetToken": "MONETTOKEN",
    "odometer": 65403,
    "pan": "970348******3910",
    "par": "PAR",
    "panSequenceNumber": "00",
    "refundId": "1234567890",
    "responseCode": "OK",
    "responseMessage": "potvrzeno",
    "reversal": false,
    "sequenceNumber": "001001614",
    "tipAmount": 100,
    "terminalIdAcquirer": "M1TNEXGO01",
    "terminalIdIssuer": "M1TNEXGO01",
    "tokens": [
        "fkdfkjbekjrhljb"
    ],
    "transactionId": "48a3ea7d-b82f-4b42-abbb-5043365e4faa",
    "transactionType": "SALE_ONLINE",
    "vehicleCode": "1A21234",
    "licensePlate": "EL100AC",
    "authorizationResponseCode": "00"
}
Resultaat:
  1. Bij een geslaagde aanroep wordt "responseCode": OK or Approved geretourneerd.

  2. Bij een mislukte aanroep wordt "responseCode": other value geretourneerd.

Opmerking: sla de geretourneerde waarde par op om de kaart-ID van de gebruiker op te halen.