One-Click Shopping

One-Click Shopping as the name suggests is the feature that offer end-customers to have a faster checkout experience. To process this, we have been offering our server tokenization methodology.

To know more about tokenization, refer this >>link<<

It is a typical scenario where the tokenization is used in abundance. The token usage is handled here for the customers to have a seamless checkout experience without re-entering their card/account details in the shop again and thus increasing the conversion rate.

Supported Payment Methods

  • Credit/Debit Cards
  • Direct Debit SEPA
  • Direct Debit ACH
  • SEPA Direct Debit with Payment Guarantee
  • Instalment by SEPA Direct Debit
  • Apple Pay
  • Google Pay

Creating Token

Follow the steps below to initiate the tokenization process, identifying the response and storing them.

Step 1: Notifying Novalnet server to create token

Pass the parameter transaction.create_token in your payment request (based on your integration type) to create token. As per your integration type, refer the steps below,

  • If you are using the hosted payment page integration, refer this >>link<< for the parameter details.
  • If you are using the direct API integration, refer this >>link<< for the parameter details.

Step 2: Storing the token on successful response (for future use)

The token is created only if the payment request performed in the above mentioned step1 is successful. In your payment response, check for the parameter result.status is SUCCESS.

For the erroneous results, please check the error details through the parameter result.status_text. To know more about the status codes and their descriptions, refer this >>link<<

Upon the successful result, you can find the newly generated token in the response parameter transaction.payment_data.token for the future use.

Executing follow up payments using tokenization (without customer interaction)

To use the token based on your business model, the token has to be created (as detailed in the step Creating Token). With the secure token already created, it is not necessary to transmit the payment details instead the token has to be passed in transaction.payment_data.token to complete the payment.

Tokenization Followup
<?php

    // Need to enter your payment access key value here
    $payment_access_key = '###YOUR_PAYMENT_ACCESS_KEY###';

    // Now, have to encode the $payment_access_key value with the base64 encode
    $encoded_data        = base64_encode($payment_access_key);

    // Action Endpoint 
    $endpoint           = 'https://payport.novalnet.de/v2/payment';

    // Build the Headers array
    $headers = [

      // The Content-Type should be "application/json"
        'Content-Type:application/json',
        
        // The charset should be "utf-8"
        'Charset:utf-8', 
        
        // Optional
        'Accept:application/json', 
        
        // The formed authenticate value (case-sensitive)
        'X-NN-Access-Key:' . $encoded_data
    ];

    $data = [];

    // Build Merchant Data
    $data['merchant'] = [
      // Your API signature value
      'signature' => '###YOUR_API_SIGNATURE###', 
            
      // Your corresponding tariff ID
      'tariff'    => '###YOUR_TARIFF_ID###'
    ];

    // Build Customer Data
    $data['customer'] = [

        // Shopper's first name
        'first_name'  => 'Norbert',
        
        // Shopper's last name
        'last_name'   => 'Maier', 
        
        // Shopper's email
        'email'       => '###YOUR_MAIL###', 

        // Shopper's Ip address
        'customer_ip' => '###CUSTOMER_IP###',
        
        // Shopper's customer number from the shop
        'customer_no' => '###CUSTOMER_NUMBER###',
        
        // Shopper's Telephone number
        'tel'         => '+49 089 123456',
        
        // Shopper's Mobile number 
        'mobile'      => '+49 174 7781423',
        
        // Shopper's birthdate value YYYY-MM-DD - Decomment it based on your usage
        // 'birth_date'  => '1992-06-10',
        
        // Shopper's gender - Decomment it based on your usage
        // 'gender'      => 'u',

        // Shopper's company vat ID value - Decomment it based on your usage
        // 'vat_id'      => 'DE123456',
        
        // Shopper's company regestration number - Decomment it based on your usage
        // 'reg_no'      => 'HRB1234',
        
        // Shopper's company tax ID value - Decomment it based on your usage
        // 'tax_id'      => '123/123/123',
        
        // Shopper's session value - Decomment it based on your usage
        // 'session'     => 'fedgrgst5653653hdgfsvgdsf622627e',
        
        // Shopper's fax number - Decomment it based on your usage
        // 'fax'         => '+49 89 654321',

        // Shopper's billing address
        'billing'     => [
        
        // House number
        'house_no'     => '9',
        
        // Street
        'street'       => 'Hauptstr',
        
        // City
        'city'         => 'Kaiserslautern',
        
        // zip
        'zip'          => '66862',
        
        // Country's ISO code
        'country_code' => 'DE',
        
        // Name of the company - Decomment it based on your usage
            'company'   => 'ABC GmbH'
        ],
        
        /* 
        // Optional child object - Decomment it based on your usage
        'shipping' => [
        
        // First name
            'first_name'    => 'Norbert',
            
            // Last name
            'last_name'     => 'Maier',
            
            // Email
            'email'         => 'test@novalnet.de',
        
            // Street
        'street'        => 'Hauptstr',
        
        // House number
        'house_no'      => '9',
        
        // City
        'city'          => 'Kaiserslautern',
        
        // zip
        'zip'           => '66862',
        
        // Country's ISO code
        'country_code'  => 'DE',
        
        // Name of the company
            'company'       => 'A.B.C. Gerüstbau GmbH',
            
            // Telephone number
            'tel'           => '+49 089 123456',

            // Mobile number
            'mobile'        => '+49 174 7781423'
        ]
        */
    ];

    // Build Transaction Data
    $data['transaction'] = [

        // The Payment type of the transaction
        'payment_type'     => '###PAYMENT_TYPE###',
        
        // The transaction Amount in smaller currency unit
        'amount'           => '###TRANSACTION_AMOUNT###',
        
        // The transaction currency's ISO code
        'currency'         => '###TRANSACTION_CURRENCY###',
        
        // The mode of the transaction
        'test_mode'        => '###TEST_MODE###',
        
        // The mode of the transaction
        'order_no'         => '###TRANSACTION_ORDER_NUMBER###',
        
        // The Hook URL value for this particular transaction
        'hook_url'         => '###YOUR_HOOK_URL###',
        
        // Build Payment Data
        'payment_data'     => [
        
        // The created payment token
        'token' => '###PAYMENT_TOKEN###'   
        ]
    ];

    // Instalment data
    //$data['instalment'] = [

      // The interval between each cycle
      //'interval' => '1m',

      // Total number of cycles
      //'cycles' => '3'
    //];

    /* 
    // Subscription Data, used for processing Novalnet`s subscription - Optional object - Decomment it based on your usage
    $data['subscription'] = [

        // The interval between each cycle
        'interval'       => '1m',

        // Subscription trial interval if applicable
        'trial_interval' => '3m',

        // Subscription trial interval amount if applicable
        'trial_amount'   => '150'
    ];
    */

    /* 
    // Marketplace data, used for the affiliate`s marketplace model - Optional object - Decomment it based on your usage
    $data['marketplace'] = [

      // To submit amount for several affiliates to be booked
      'tx_split' => [
        '2261' => '20',
        '2271' => '30'
      ],  
    ];
    */

    /*
    // Affiliate Data, used for the affiliate`s revenue split model - Optional object - Decomment it based on your usage
    $data['affiliate'] = [
      
      // To submit shares for several affiliates for the same transaction
      'subvendors'=> [
        '2261' => '20',
        '2271' => '30'
      ]
    ];
    */

    // Custom Data - Optional object
    $data['custom'] = [
      
      // Shopper's selected language in shop
      "lang" => "EN",
      
      // Custom parameter's key - Optional object - Decomment it based on your usage
      // 'input1'    => 'your internal reference parameter name',
      
      // Custom parameter's value - Optional object - Decomment it based on your usage
      // 'inputval1' => 'your internal reference parameter value'
    ];

    // Convert the array to JSON string
    $json_data = json_encode($data);

    // Handle Response
    $response = send_request($json_data, $endpoint, $headers);

    function send_request($data, $url, $headers) {

        // Initiate cURL
        $curl = curl_init();
        
        // Set the url
        curl_setopt($curl, CURLOPT_URL, $url);
        
        // Set the result output to be a string
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        
        // Set the POST value to true (mandatory)
        curl_setopt($curl, CURLOPT_POST, true);
        
        // Set the post fields
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        
        // Set the headers
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

        // Execute cURL
        $result = curl_exec($curl);

        // Handle cURL error
        if (curl_errno($curl)) {
            echo 'Request Error:' . curl_error($curl);
            return $result;
        }
        
        // Close cURL
        curl_close($curl);  
        
        // Decode the JSON string
        $result = json_decode($result);

        return $result;
    }
    ?>
curl --location --request POST 'https://payport.novalnet.de/v2/payment' -H 'Content-Type: application/json' -H 'Charset:utf-8' -H 'Accept: application/json' -H 'X-NN-Access-Key: ###YOUR_ENCODED_PAYMENT_ACCESS_KEY###' -d '{"merchant":{"signature":"###YOUR_API_SIGNATURE###","tariff":"###YOUR_TARIFF_ID###"},"customer":{"first_name":"Norbert","last_name":"Maier","email":"###YOUR_MAIL###","customer_ip":"###CUSTOMER_IP###","customer_no":"###CUSTOMER_NUMBER###","tel":"+49 089 123456","mobile":"+49 174 7781423","billing":{"house_no":"9","street":"Hauptstr","city":"Kaiserslautern","zip":"66862","country_code":"DE", "company": "ABC GmbH"}},"transaction":{"payment_type":"###PAYMENT_TYPE###","amount":"###TRANSACTION_AMOUNT###","currency":"###TRANSACTION_CURRENCY###","test_mode":"###TEST_MODE###","order_no":"###TRANSACTION_ORDER_NUMBER###","hook_url":"###YOUR_HOOK_URL###","payment_data":{"token":"###PAYMENT_TOKEN###"}},"custom":{"lang":"EN"}}';
#!/usr/bin/node

    const https = require('https');
    // data sent in the body of the request
    const postData = JSON.stringify({
      "merchant": {
        "signature": "###YOUR_API_SIGNATURE###",
        "tariff": "###YOUR_TARIFF_ID###"
      },
      "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
        "token": "###PAYMENT_TOKEN###"
        }
      },
      "custom": {
        "lang": "EN"
      }
    });

    const options = {
      hostname: 'payport.novalnet.de',
      port: 443,
      path: '/v2/payment',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(postData),
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
      },
    };

    const req = https.request(options, (res) => {
      console.log('statusCode:', res.statusCode);
      // console.log('headers:', res.headers);

      res.on('data', (d) => {
        process.stdout.write(d);
      });
    });

    req.on('error', (e) => {
      console.error('ERROR: ',e);
    });

    // Write data to request body
    req.write(postData);
    req.end();
#!/usr/bin/python3

    import http.client
    import json

    CONN = http.client.HTTPSConnection("payport.novalnet.de")
    PAYLOAD = json.dumps({
        "merchant": {
            "signature": "###YOUR_API_SIGNATURE###",
            "tariff": "###YOUR_TARIFF_ID###"
        },
        "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
        },
        "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
          "token": "###PAYMENT_TOKEN###"
        }
        },
        "custom": {
            "lang": "EN"
        }
    })
    HEADERS = {
        'Content-Type': 'application/json',
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
    }
    CONN.request("POST", "/v2/payment", PAYLOAD, HEADERS)
    RES = CONN.getresponse()
    DATA = RES.read()
    print(DATA.decode("utf-8"))
#!/usr/lib/ruby

    require "uri"
    require "json"
    require "net/http"

    url = URI("https://payport.novalnet.de/v2/payment")

    https = Net::HTTP.new(url.host, url.port)
    https.use_ssl = true

    request = Net::HTTP::Post.new(url)
    request["Content-Type"] = "application/json"
    request["Accept"] = "application/json"
    request["Charset"] = "utf-8"
    request["X-NN-Access-Key"] = "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###"
    request.body = JSON.dump({
      "merchant": {
        "signature": "###YOUR_API_SIGNATURE###",
        "tariff": "###YOUR_TARIFF_ID###"
      },
      "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
            "token": "###PAYMENT_TOKEN###"
        }
      },
      "custom": {
        "lang": "EN"
      }
    })

    response = https.request(request)
    puts response.read_body
package main

    import (
      "fmt"
      "strings"
      "net/http"
      "io/ioutil"
    )

    func main() {

      url := "https://payport.novalnet.de/v2/payment"
      method := "POST"

      payload := strings.NewReader(`{"merchant":{"signature":"###YOUR_API_SIGNATURE###", "tariff" : "###YOUR_TARIFF_ID###"},"customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
            "token": "###PAYMENT_TOKEN###"
        }
      },"custom":{"lang":"EN"}}`)

      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, payload)

      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Content-Type", "application/json")
      req.Header.Add("Accept", "application/json")
      req.Header.Add("Charset", "utf-8")
      req.Header.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")

      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()

      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
/* List of required libraries (see also the import statements below): 
    - commons-logging-1.2.jar    
    - httpasyncclient-4.1.5.jar  
    - httpclient-4.3.3.jar  
    - httpcore-4.4.16.jar   
    - httpcore-nio-4.4.16.jar  
    - httpmime-4.5.14.jar      
    - json-20230227.jar  
    - unirest-java-3.9.00.jar
    */
    import java.io.*;

    import org.json.JSONArray;
    import org.apache.http.auth.*;
    import org.apache.http.nio.conn.*; 
    import org.apache.http.concurrent.*;
    import org.apache.http.nio.reactor.*;
    import org.apache.commons.logging.*;
    import org.apache.http.entity.mime.content.*; 
    import kong.unirest.*;


    public class TokenizationRequest {
      public static void main(String []args) throws Exception{
        Unirest.config().connectTimeout(1000).socketTimeout(2000);

        HttpResponse<String> response = Unirest.post("https://payport.novalnet.de/v2/payment")
          .header("Content-Type", "application/json")
          .header("Charset", "utf-8")
          .header("Accept", "application/json")
          .header("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")
          .body("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}},\"custom\":{\"lang\":\"EN\"}}")
          .asString();
        
        System.out.println(response.getBody());
      }
    }
using System;
    using System.Net.Http;

    namespace TokenizationRequest
    {
      public class TokenizationRequest {

        public string check_Tokenization_request() {

          var client = new HttpClient();
          var request = new HttpRequestMessage(HttpMethod.Post, "https://payport.novalnet.de/v2/payment");

          request.Headers.Add("Charset", "utf-8");
          request.Headers.Add("Accept", "application/json");
          request.Headers.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###");
          var content = new StringContent("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}},\"custom\":{\"lang\":\"EN\"}}", null, "application/json");

          request.Content = content;
          var response = client.SendAsync(request).Result;
          response.EnsureSuccessStatusCode();
          var responseText = response.Content.ReadAsStringAsync().Result;
          Console.WriteLine(responseText);
          return responseText;
        }
        public static void Main() {
          var testRequest = new TokenizationRequest();
          testRequest.check_Tokenization_request(); 
        }

      }
    }
Tokenization Followup
<?php

    // Need to enter your payment access key value here
    $payment_access_key = '###YOUR_PAYMENT_ACCESS_KEY###';

    // Now, have to encode the $payment_access_key value with the base64 encode
    $encoded_data        = base64_encode($payment_access_key);

    // Action Endpoint 
    $endpoint           = 'https://payport.novalnet.de/v2/payment';

    // Build the Headers array
    $headers = [

      // The Content-Type should be "application/json"
        'Content-Type:application/json',
        
        // The charset should be "utf-8"
        'Charset:utf-8', 
        
        // Optional
        'Accept:application/json', 
        
        // The formed authenticate value (case-sensitive)
        'X-NN-Access-Key:' . $encoded_data
    ];

    $data = [];

    // Build Merchant Data
    $data['merchant'] = [

      // Your API signature value
        'signature' => '###YOUR_API_SIGNATURE###', 
        
        // Your corresponding tariff ID
        'tariff'    => '###YOUR_TARIFF_ID###'
    ];

    // Build Customer Data
    $data['customer'] = [

        // Shopper's first name
        'first_name'  => 'Norbert',
        
        // Shopper's last name
        'last_name'   => 'Maier', 
        
        // Shopper's email
        'email'       => '###YOUR_MAIL###', 

        // Shopper's Ip address
        'customer_ip' => '###CUSTOMER_IP###',
        
        // Shopper's customer number from the shop
        'customer_no' => '###CUSTOMER_NUMBER###',
        
        // Shopper's Telephone number
        'tel'         => '+49 089 123456',
        
        // Shopper's Mobile number 
        'mobile'      => '+49 174 7781423',
        
        // Shopper's birthdate value YYYY-MM-DD - Decomment it based on your usage
        // 'birth_date'  => '1992-06-10',
        
        // Shopper's gender - Decomment it based on your usage
        // 'gender'      => 'u',

        // Shopper's company vat ID value - Decomment it based on your usage
        // 'vat_id'      => 'DE123456',
        
        // Shopper's company regestration number - Decomment it based on your usage
        // 'reg_no'      => 'HRB1234',
        
        // Shopper's company tax ID value - Decomment it based on your usage
        // 'tax_id'      => '123/123/123',
        
        // Shopper's session value - Decomment it based on your usage
        // 'session'     => 'fedgrgst5653653hdgfsvgdsf622627e',
        
        // Shopper's fax number - Decomment it based on your usage
        // 'fax'         => '+49 89 654321',

        // Shopper's billing address
        'billing'     => [
        
        // House number
        'house_no'     => '9',
        
        // Street
        'street'       => 'Hauptstr',
        
        // City
        'city'         => 'Kaiserslautern',
        
        // zip
        'zip'          => '66862',
        
        // Country's ISO code
        'country_code' => 'DE',
        
        // Name of the company - Decomment it based on your usage
            'company'   => 'ABC GmbH'
        ],
        
        /* 
        // Optional child object - Decomment it based on your usage
        'shipping' => [
        
        // First name
            'first_name'    => 'Norbert',
            
            // Last name
            'last_name'     => 'Maier',
            
            // Email
            'email'         => 'test@novalnet.de',
        
            // Street
        'street'        => 'Hauptstr',
        
        // House number
        'house_no'      => '9',
        
        // City
        'city'          => 'Kaiserslautern',
        
        // zip
        'zip'           => '66862',
        
        // Country's ISO code
        'country_code'  => 'DE',
        
        // Name of the company
            'company'       => 'A.B.C. Gerüstbau GmbH',
            
            // Telephone number
            'tel'           => '+49 089 123456',

            // Mobile number
            'mobile'        => '+49 174 7781423'
        ]
        */
    ];

    // Build Transaction Data
    $data['transaction'] = [

        // The Payment type of the transaction
        'payment_type'     => '###PAYMENT_TYPE###',
        
        // The transaction Amount in smaller currency unit
        'amount'           => '###TRANSACTION_AMOUNT###',
        
        // The transaction currency's ISO code
        'currency'         => '###TRANSACTION_CURRENCY###',
        
        // The mode of the transaction
        'test_mode'        => '###TEST_MODE###',
        
        // The mode of the transaction
        'order_no'         => '###TRANSACTION_ORDER_NUMBER###',
        
        // The date on which the purchase is initiated
        'order_date'       => '###TRANSACTION_ORDER_DATE###',
        
        // The amount in which the purchase is initiated
        'order_amount'     => '###TRANSACTION_ORDER_AMOUNT###',
        
        // The order reference of the initial purchase
        'order_reference'  => '###TRANSACTION_ORDER_REFERENCE###',
        
        // The Hook URL value for this particular transaction
        'hook_url'         => '###YOUR_HOOK_URL###',
        
        // Build Payment Data
        'payment_data'     => [
        
        // The created payment token
        'token' => '###PAYMENT_TOKEN###'   
        ]
    ];

    // Instalment data
    //$data['instalment'] = [

      // The interval between each cycle
      //'interval' => '1m',

      // Total number of cycles
      //'cycles' => '3'
    //];

    /* 
    // Subscription Data, used for processing Novalnet`s subscription - Optional object - Decomment it based on your usage
    $data['subscription'] = [

        // The interval between each cycle
        'interval'       => '1m',

        // Subscription trial interval if applicable
        'trial_interval' => '3m',

        // Subscription trial interval amount if applicable
        'trial_amount'   => '150'
    ];
    */

    /* 
    // Marketplace data, used for the affiliate`s marketplace model - Optional object - Decomment it based on your usage
    $data['marketplace'] = [

      // To submit amount for several affiliates to be booked
      'tx_split' => [
        '2261' => '20',
        '2271' => '30'
      ],  
    ];
    */

    /*
    // Affiliate Data, used for the affiliate`s revenue split model - Optional object - Decomment it based on your usage
    $data['affiliate'] = [
      
      // To submit shares for several affiliates for the same transaction
      'subvendors'=> [
        '2261' => '20',
        '2271' => '30'
      ]
    ];
    */

    // Custom Data - Optional object
    $data['custom'] = [
      
      // Shopper's selected language in shop
      "lang" => "EN",
      
      // Custom parameter's key - Optional object - Decomment it based on your usage
      // 'input1'    => 'your internal reference parameter name',
      
      // Custom parameter's value - Optional object - Decomment it based on your usage
      // 'inputval1' => 'your internal reference parameter value'
    ];

    // Convert the array to JSON string
    $json_data = json_encode($data);

    // Handle Response
    $response = send_request($json_data, $endpoint, $headers);

    function send_request($data, $url, $headers) {

        // Initiate cURL
        $curl = curl_init();
        
        // Set the url
        curl_setopt($curl, CURLOPT_URL, $url);
        
        // Set the result output to be a string
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        
        // Set the POST value to true (mandatory)
        curl_setopt($curl, CURLOPT_POST, true);
        
        // Set the post fields
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        
        // Set the headers
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

        // Execute cURL
        $result = curl_exec($curl);

        // Handle cURL error
        if (curl_errno($curl)) {
            echo 'Request Error:' . curl_error($curl);
            return $result;
        }
        
        // Close cURL
        curl_close($curl);  
        
        // Decode the JSON string
        $result = json_decode($result);

        return $result;
    }
    ?>
curl --location --request POST 'https://payport.novalnet.de/v2/payment' -H 'Content-Type: application/json' -H 'Charset:utf-8' -H 'Accept: application/json' -H 'X-NN-Access-Key: ###YOUR_ENCODED_PAYMENT_ACCESS_KEY###' -d '{"merchant":{"signature":"###YOUR_API_SIGNATURE###","tariff":"###YOUR_TARIFF_ID###"},"customer":{"first_name":"Norbert","last_name":"Maier","email":"###YOUR_MAIL###","customer_ip":"###CUSTOMER_IP###","customer_no":"###CUSTOMER_NUMBER###","tel":"+49 089 123456","mobile":"+49 174 7781423","billing":{"house_no":"9","street":"Hauptstr","city":"Kaiserslautern","zip":"66862","country_code":"DE", "company": "ABC GmbH"}},"transaction":{"payment_type":"###PAYMENT_TYPE###","amount":"###TRANSACTION_AMOUNT###","currency":"###TRANSACTION_CURRENCY###","test_mode":"###TEST_MODE###","order_no":"###TRANSACTION_ORDER_NUMBER###","order_date":"###TRANSACTION_ORDER_DATE###","order_amount":"###TRANSACTION_ORDER_AMOUNT###","order_reference":"###TRANSACTION_ORDER_REFERENCE###","hook_url":"###YOUR_HOOK_URL###","payment_data":{"token":"###PAYMENT_TOKEN###"}},"custom":{"lang":"EN"}}';
#!/usr/bin/node
    // refund request script using the standard https library

    const https = require('https');
    // data sent in the body of the request
    const postData = JSON.stringify({
      "merchant": {
        "signature": "###YOUR_API_SIGNATURE###",
        "tariff": "###YOUR_TARIFF_ID###"
      },
      "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "order_date":"###TRANSACTION_ORDER_DATE###",
        "order_amount":"###TRANSACTION_ORDER_AMOUNT###",
        "order_reference":"###TRANSACTION_ORDER_REFERENCE###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
        "token": "###PAYMENT_TOKEN###"
        }
      },
      "custom": {
        "lang": "EN"
      }
    });

    const options = {
      hostname: 'payport.novalnet.de',
      port: 443,
      path: '/v2/payment',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(postData),
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
      },
    };

    const req = https.request(options, (res) => {
      console.log('statusCode:', res.statusCode);
      // console.log('headers:', res.headers);

      res.on('data', (d) => {
        process.stdout.write(d);
      });
    });

    req.on('error', (e) => {
      console.error('ERROR: ',e);
    });

    // Write data to request body
    req.write(postData);
    req.end();
#!/usr/bin/python3

    import http.client
    import json

    CONN = http.client.HTTPSConnection("payport.novalnet.de")
    PAYLOAD = json.dumps({
        "merchant": {
            "signature": "###YOUR_API_SIGNATURE###",
            "tariff": "###YOUR_TARIFF_ID###"
        },
        "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
        },
        "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "order_date":"###TRANSACTION_ORDER_DATE###",
        "order_amount":"###TRANSACTION_ORDER_AMOUNT###",
        "order_reference":"###TRANSACTION_ORDER_REFERENCE###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
          "token": "###PAYMENT_TOKEN###"
        }
        },
        "custom": {
            "lang": "EN"
        }
    })
    HEADERS = {
        'Content-Type': 'application/json',
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
    }
    CONN.request("POST", "/v2/payment", PAYLOAD, HEADERS)
    RES = CONN.getresponse()
    DATA = RES.read()
    print(DATA.decode("utf-8"))
#!/usr/lib/ruby

    require "uri"
    require "json"
    require "net/http"

    url = URI("https://payport.novalnet.de/v2/payment")

    https = Net::HTTP.new(url.host, url.port)
    https.use_ssl = true

    request = Net::HTTP::Post.new(url)
    request["Content-Type"] = "application/json"
    request["Accept"] = "application/json"
    request["Charset"] = "utf-8"
    request["X-NN-Access-Key"] = "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###"
    request.body = JSON.dump({
      "merchant": {
        "signature": "###YOUR_API_SIGNATURE###",
        "tariff": "###YOUR_TARIFF_ID###"
      },
      "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
      "order_date":"###TRANSACTION_ORDER_DATE###",
      "order_amount":"###TRANSACTION_ORDER_AMOUNT###",
      "order_reference":"###TRANSACTION_ORDER_REFERENCE###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
            "token": "###PAYMENT_TOKEN###"
        }
      },
      "custom": {
        "lang": "EN"
      }
    })

    response = https.request(request)
    puts response.read_body
package main

    import (
      "fmt"
      "strings"
      "net/http"
      "io/ioutil"
    )

    func main() {

      url := "https://payport.novalnet.de/v2/payment"
      method := "POST"

      payload := strings.NewReader(`{"merchant":{"signature":"###YOUR_API_SIGNATURE###", "tariff" : "###YOUR_TARIFF_ID###"},"customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "order_date":"###TRANSACTION_ORDER_DATE###",
        "order_amount":"###TRANSACTION_ORDER_AMOUNT###",
        "order_reference":"###TRANSACTION_ORDER_REFERENCE###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
            "token": "###PAYMENT_TOKEN###"
        }
      },"custom":{"lang":"EN"}}`)

      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, payload)

      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Content-Type", "application/json")
      req.Header.Add("Accept", "application/json")
      req.Header.Add("Charset", "utf-8")
      req.Header.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")

      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()

      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
/* List of required libraries (see also the import statements below): 
    - commons-logging-1.2.jar    
    - httpasyncclient-4.1.5.jar  
    - httpclient-4.3.3.jar  
    - httpcore-4.4.16.jar   
    - httpcore-nio-4.4.16.jar  
    - httpmime-4.5.14.jar      
    - json-20230227.jar  
    - unirest-java-3.9.00.jar
    */
    import java.io.*;

    import org.json.JSONArray;
    import org.apache.http.auth.*;
    import org.apache.http.nio.conn.*; 
    import org.apache.http.concurrent.*;
    import org.apache.http.nio.reactor.*;
    import org.apache.commons.logging.*;
    import org.apache.http.entity.mime.content.*; 
    import kong.unirest.*;


    public class TokenizationCreate {
      public static void main(String []args) throws Exception{
        Unirest.config().connectTimeout(1000).socketTimeout(2000);

        HttpResponse<String> response = Unirest.post("https://payport.novalnet.de/v2/payment")
          .header("Content-Type", "application/json")
          .header("Charset", "utf-8")
          .header("Accept", "application/json")
          .header("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")
          .body("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\","order_date":"###TRANSACTION_ORDER_DATE###","order_amount":"###TRANSACTION_ORDER_AMOUNT###","order_reference":"###TRANSACTION_ORDER_REFERENCE###",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}},\"custom\":{\"lang\":\"EN\"}}")
          .asString();
        
        System.out.println(response.getBody());
      }
    }
using System;
    using System.Net.Http;

    namespace TokenizationCreateRequest
    {
      public class TokenizationCreate {

        public string check_Tokenization_create_request() {

          var client = new HttpClient();
          var request = new HttpRequestMessage(HttpMethod.Post, "https://payport.novalnet.de/v2/payment");

          request.Headers.Add("Charset", "utf-8");
          request.Headers.Add("Accept", "application/json");
          request.Headers.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###");
          var content = new StringContent("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\","order_date":"###TRANSACTION_ORDER_DATE###","order_amount":"###TRANSACTION_ORDER_AMOUNT###","order_reference":"###TRANSACTION_ORDER_REFERENCE###",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}},\"custom\":{\"lang\":\"EN\"}}", null, "application/json");

          request.Content = content;
          var response = client.SendAsync(request).Result;
          response.EnsureSuccessStatusCode();
          var responseText = response.Content.ReadAsStringAsync().Result;
          Console.WriteLine(responseText);
          return responseText;
        }
        public static void Main() {
          var testRequest = new TokenizationCreate();
          testRequest.check_Tokenization_create_request(); 
        }

      }
    }
Tokenization Followup
<?php

    // Need to enter your payment access key value here
    $payment_access_key = '###YOUR_PAYMENT_ACCESS_KEY###';

    // Now, have to encode the $payment_access_key value with the base64 encode
    $encoded_data        = base64_encode($payment_access_key);

    // Action Endpoint 
    $endpoint           = 'https://payport.novalnet.de/v2/payment';

    // Build the Headers array
    $headers = [

      // The Content-Type should be "application/json"
        'Content-Type:application/json',
        
        // The charset should be "utf-8"
        'Charset:utf-8', 
        
        // Optional
        'Accept:application/json', 
        
        // The formed authenticate value (case-sensitive)
        'X-NN-Access-Key:' . $encoded_data
    ];

    $data = [];

    // Build Merchant Data
    $data['merchant'] = [

      // Your API signature value
        'signature' => '###YOUR_API_SIGNATURE###', 
        
        // Your corresponding tariff ID
        'tariff'    => '###YOUR_TARIFF_ID###'
    ];

    // Build Customer Data
    $data['customer'] = [

        // Shopper's first name
        'first_name'  => 'Norbert',
        
        // Shopper's last name
        'last_name'   => 'Maier', 
        
        // Shopper's email
        'email'       => '###YOUR_MAIL###', 

        // Shopper's Ip address
        'customer_ip' => '###CUSTOMER_IP###',
        
        // Shopper's customer number from the shop
        'customer_no' => '###CUSTOMER_NUMBER###',
        
        // Shopper's Telephone number
        'tel'         => '+49 089 123456',
        
        // Shopper's Mobile number 
        'mobile'      => '+49 174 7781423',
        
        // Shopper's birthdate value YYYY-MM-DD - Decomment it based on your usage
        // 'birth_date'  => '1992-06-10',
        
        // Shopper's gender - Decomment it based on your usage
        // 'gender'      => 'u',

        // Shopper's company vat ID value - Decomment it based on your usage
        // 'vat_id'      => 'DE123456',
        
        // Shopper's company regestration number - Decomment it based on your usage
        // 'reg_no'      => 'HRB1234',
        
        // Shopper's company tax ID value - Decomment it based on your usage
        // 'tax_id'      => '123/123/123',
        
        // Shopper's session value - Decomment it based on your usage
        // 'session'     => 'fedgrgst5653653hdgfsvgdsf622627e',
        
        // Shopper's fax number - Decomment it based on your usage
        // 'fax'         => '+49 89 654321',

        // Shopper's billing address
        'billing'     => [
        
        // House number
        'house_no'     => '9',
        
        // Street
        'street'       => 'Hauptstr',
        
        // City
        'city'         => 'Kaiserslautern',
        
        // zip
        'zip'          => '66862',
        
        // Country's ISO code
        'country_code' => 'DE',
        
        // Name of the company - Decomment it based on your usage
            'company'   => 'ABC GmbH'
        ],
        
        /* 
        // Optional child object - Decomment it based on your usage
        'shipping' => [
        
        // First name
            'first_name'    => 'Norbert',
            
            // Last name
            'last_name'     => 'Maier',
            
            // Email
            'email'         => 'test@novalnet.de',
        
            // Street
        'street'        => 'Hauptstr',
        
        // House number
        'house_no'      => '9',
        
        // City
        'city'          => 'Kaiserslautern',
        
        // zip
        'zip'           => '66862',
        
        // Country's ISO code
        'country_code'  => 'DE',
        
        // Name of the company
            'company'       => 'A.B.C. Gerüstbau GmbH',
            
            // Telephone number
            'tel'           => '+49 089 123456',

            // Mobile number
            'mobile'        => '+49 174 7781423'
        ]
        */
    ];

    // Build Transaction Data
    $data['transaction'] = [

        // The Payment type of the transaction
        'payment_type'     => '###PAYMENT_TYPE###',
        
        // The transaction Amount in smaller currency unit
        'amount'           => '30000',
        
        // The transaction currency's ISO code
        'currency'         => '###TRANSACTION_CURRENCY###',
        
        // The mode of the transaction
        'test_mode'        => '###TEST_MODE###',
        
        // The mode of the transaction
        'order_no'         => '###TRANSACTION_ORDER_NUMBER###',
        
        // The Hook URL value for this particular transaction
        'hook_url'         => '###YOUR_HOOK_URL###',
        
        // Build Payment Data
        'payment_data'     => [
        
        // The created payment token
        'token' => '###PAYMENT_TOKEN###'   
        ]
    ];

    // Instalment data
    $data['instalment'] = [

      // The interval between each cycle
      'interval' => '1m',

      // Total number of cycles
      'cycles' => '3'
    ];

    /* 
    // Subscription Data, used for processing Novalnet`s subscription - Optional object - Decomment it based on your usage
    $data['subscription'] = [

        // The interval between each cycle
        'interval'       => '1m',

        // Subscription trial interval if applicable
        'trial_interval' => '3m',

        // Subscription trial interval amount if applicable
        'trial_amount'   => '150'
    ];
    */

    /* 
    // Marketplace data, used for the affiliate`s marketplace model - Optional object - Decomment it based on your usage
    $data['marketplace'] = [

      // To submit amount for several affiliates to be booked
      'tx_split' => [
        '2261' => '20',
        '2271' => '30'
      ],  
    ];
    */

    /*
    // Affiliate Data, used for the affiliate`s revenue split model - Optional object - Decomment it based on your usage
    $data['affiliate'] = [
      
      // To submit shares for several affiliates for the same transaction
      'subvendors'=> [
        '2261' => '20',
        '2271' => '30'
      ]
    ];
    */

    // Custom Data - Optional object
    $data['custom'] = [
      
      // Shopper's selected language in shop
      "lang" => "EN",
      
      // Custom parameter's key - Optional object - Decomment it based on your usage
      // 'input1'    => 'your internal reference parameter name',
      
      // Custom parameter's value - Optional object - Decomment it based on your usage
      // 'inputval1' => 'your internal reference parameter value'
    ];

    // Convert the array to JSON string
    $json_data = json_encode($data);

    // Handle Response
    $response = send_request($json_data, $endpoint, $headers);

    function send_request($data, $url, $headers) {

        // Initiate cURL
        $curl = curl_init();
        
        // Set the url
        curl_setopt($curl, CURLOPT_URL, $url);
        
        // Set the result output to be a string
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        
        // Set the POST value to true (mandatory)
        curl_setopt($curl, CURLOPT_POST, true);
        
        // Set the post fields
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        
        // Set the headers
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

        // Execute cURL
        $result = curl_exec($curl);

        // Handle cURL error
        if (curl_errno($curl)) {
            echo 'Request Error:' . curl_error($curl);
            return $result;
        }
        
        // Close cURL
        curl_close($curl);  
        
        // Decode the JSON string
        $result = json_decode($result);

        return $result;
    }
    ?>
curl --location --request POST 'https://payport.novalnet.de/v2/payment' -H 'Content-Type: application/json' -H 'Charset:utf-8' -H 'Accept: application/json' -H 'X-NN-Access-Key: ###YOUR_ENCODED_PAYMENT_ACCESS_KEY###' -d '{"merchant":{"signature":"###YOUR_API_SIGNATURE###","tariff":"###YOUR_TARIFF_ID###"},"customer":{"first_name":"Norbert","last_name":"Maier","email":"###YOUR_MAIL###","customer_ip":"###CUSTOMER_IP###","customer_no":"###CUSTOMER_NUMBER###","tel":"+49 089 123456","mobile":"+49 174 7781423","billing":{"house_no":"9","street":"Hauptstr","city":"Kaiserslautern","zip":"66862","country_code":"DE", "company": "ABC GmbH"}},"transaction":{"payment_type":"###PAYMENT_TYPE###","amount":"30000","currency":"###TRANSACTION_CURRENCY###","test_mode":"###TEST_MODE###","order_no":"###TRANSACTION_ORDER_NUMBER###","hook_url":"###YOUR_HOOK_URL###","payment_data":{"token":"###PAYMENT_TOKEN###"}} ,"instalment":{"interval":"1m" , "cycles" : "3"} ,"custom":{"lang":"EN"}}';
#!/usr/bin/node

    const https = require('https');
    // data sent in the body of the request
    const postData = JSON.stringify({
      "merchant": {
        "signature": "###YOUR_API_SIGNATURE###",
        "tariff": "###YOUR_TARIFF_ID###"
      },
      "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
        "token": "###PAYMENT_TOKEN###"
        }
      },
      "instalment":{"interval":"1m" , "cycles" : "3"},
      "custom": {
        "lang": "EN"
      }
    });

    const options = {
      hostname: 'payport.novalnet.de',
      port: 443,
      path: '/v2/payment',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(postData),
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
      },
    };

    const req = https.request(options, (res) => {
      console.log('statusCode:', res.statusCode);
      // console.log('headers:', res.headers);

      res.on('data', (d) => {
        process.stdout.write(d);
      });
    });

    req.on('error', (e) => {
      console.error('ERROR: ',e);
    });

    // Write data to request body
    req.write(postData);
    req.end();
#!/usr/bin/python3

    import http.client
    import json

    CONN = http.client.HTTPSConnection("payport.novalnet.de")
    PAYLOAD = json.dumps({
        "merchant": {
            "signature": "###YOUR_API_SIGNATURE###",
            "tariff": "###YOUR_TARIFF_ID###"
        },
        "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
        },
        "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
          "token": "###PAYMENT_TOKEN###"
        }
        },
      "instalment":{"interval":"1m" , "cycles" : "3"},
        "custom": {
            "lang": "EN"
        }
    })
    HEADERS = {
        'Content-Type': 'application/json',
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
    }
    CONN.request("POST", "/v2/payment", PAYLOAD, HEADERS)
    RES = CONN.getresponse()
    DATA = RES.read()
    print(DATA.decode("utf-8"))
#!/usr/lib/ruby

    require "uri"
    require "json"
    require "net/http"

    url = URI("https://payport.novalnet.de/v2/payment")

    https = Net::HTTP.new(url.host, url.port)
    https.use_ssl = true

    request = Net::HTTP::Post.new(url)
    request["Content-Type"] = "application/json"
    request["Accept"] = "application/json"
    request["Charset"] = "utf-8"
    request["X-NN-Access-Key"] = "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###"
    request.body = JSON.dump({
      "merchant": {
            "signature": "###YOUR_API_SIGNATURE###",
            "tariff": "###YOUR_TARIFF_ID###"
        },
        "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
          "token": "###PAYMENT_TOKEN###"
        }
      },
      "instalment":{"interval":"1m" , "cycles" : "3"},
      "custom": {
        "lang": "EN"
      }
    })

    response = https.request(request)
    puts response.read_body
package main

    import (
      "fmt"
      "strings"
      "net/http"
      "io/ioutil"
    )

    func main() {

      url := "https://payport.novalnet.de/v2/payment"
      method := "POST"

      payload := strings.NewReader(`{"merchant":{"signature":"###YOUR_API_SIGNATURE###", "tariff" : "###YOUR_TARIFF_ID###"},"customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
            "token": "###PAYMENT_TOKEN###"
        }
      },
      "instalment":{"interval":"1m" , "cycles" : "3"},"custom":{"lang":"EN"}}`)

      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, payload)

      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Content-Type", "application/json")
      req.Header.Add("Accept", "application/json")
      req.Header.Add("Charset", "utf-8")
      req.Header.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")

      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()

      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
/* List of required libraries (see also the import statements below): 
    - commons-logging-1.2.jar    
    - httpasyncclient-4.1.5.jar  
    - httpclient-4.3.3.jar  
    - httpcore-4.4.16.jar   
    - httpcore-nio-4.4.16.jar  
    - httpmime-4.5.14.jar      
    - json-20230227.jar  
    - unirest-java-3.9.00.jar
    */
    import java.io.*;

    import org.json.JSONArray;
    import org.apache.http.auth.*;
    import org.apache.http.nio.conn.*; 
    import org.apache.http.concurrent.*;
    import org.apache.http.nio.reactor.*;
    import org.apache.commons.logging.*;
    import org.apache.http.entity.mime.content.*; 
    import kong.unirest.*;


    public class TokenizationRequest {
      public static void main(String []args) throws Exception{
        Unirest.config().connectTimeout(1000).socketTimeout(2000);

        HttpResponse<String> response = Unirest.post("https://payport.novalnet.de/v2/payment")
          .header("Content-Type", "application/json")
          .header("Charset", "utf-8")
          .header("Accept", "application/json")
          .header("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")
          .body("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}}, \"instalment\":{\"interval\":\"1m\" , \"cycles\" : \"3\"},\"custom\":{\"lang\":\"EN\"}}")
          .asString();
        
        System.out.println(response.getBody());
      }
    }
using System;
    using System.Net.Http;

    namespace TokenizationRequest
    {
      public class TokenizationRequest {

        public string check_Tokenization_request() {

          var client = new HttpClient();
          var request = new HttpRequestMessage(HttpMethod.Post, "https://payport.novalnet.de/v2/payment");

          request.Headers.Add("Charset", "utf-8");
          request.Headers.Add("Accept", "application/json");
          request.Headers.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###");
          var content = new StringContent("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}},\"instalment\":{\"interval\":\"1m\" , \"cycles\" : \"3\"},\"custom\":{\"lang\":\"EN\"}}", null, "application/json");

          request.Content = content;
          var response = client.SendAsync(request).Result;
          response.EnsureSuccessStatusCode();
          var responseText = response.Content.ReadAsStringAsync().Result;
          Console.WriteLine(responseText);
          return responseText;
        }
        public static void Main() {
          var testRequest = new TokenizationRequest();
          testRequest.check_Tokenization_request(); 
        }

      }
    }