Documentação/Referência da API

API REFERENCE

Iniciar pagamento ou autorização

Aplica-se a pagamentos presenciais com POS

Esta API envia instruções de pagamento ou autorização do App do estabelecimento para o App de pagamento do POS.

O App do estabelecimento deve ser assinado, empacotado e enviado ao marketplace TMS.

Iniciar pagamento:

O terminal POS vem com o App de pagamento Switchio Pay pré-instalado. O App do estabelecimento deve interagir com o App de pagamento Switchio Pay para realizar o pagamento ou a autorização. Chame-o da seguinte forma:

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

ParâmetroTipoDescriçãoObrigatório
transactionIdStringID da transaçãoObrigatório
amountintValor em centavos; por exemplo, 1.5EUR equivale a 150Obrigatório
currencyCodeintCódigo de moeda ISO4217; por exemplo, 978 para eurosObrigatório
invoiceNumberstringID exclusivo personalizado, com até 20 caracteresObrigatório

Sample code:

 /**
     * 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 ===");
    }

Request example:

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

Response example:

{
    "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"
}
Response result:
  1. Se a chamada for bem-sucedida, "responseCode": OK or Approved será retornado.
  2. Se a chamada falhar, "responseCode": other value será retornado.

Observação: para obter o identificador do cartão do usuário, salve o valor par retornado.