Payment
Prerequisites
- Go register your Merchant Portal account and follow the steps to get access to your Nello Pay API credentials and Webhook API.
- Have an active bank account in the country you are choosing to integrate in to test your connection.
Initiate your first payment
Follow the steps below to initiate your first payment:
- Complete the setup of your Merchant Portal account
- Add Neonomics to your website as a payment option
- Handle the user click of the pay button
- Create your first Checkout Request
1. Complete the setup of your Merchant Portal account
Follow our step-by-step onboarding guide to get started with Nello Pay.
2. Add Nello Pay as a payment option
Place a pay button or link on a page you wish your customers to complete payment using Neonomics.
Payment button
Adding a button to initiate the payment process is one way you can enable payments for your end users. Below you can see some examples of what the payment button should look like.
The Pay Button has to follow the Neonomics Design Toolkit
Download Neonomics brand assets here 👉🏻 Neonomics Brand Assets
3. Handle the user click of the pay button
Server-side plugin
This plugin that triggers the call towards the Neonomics Checkout endpoint.
Clicking the already added "Pay by Bank" button trigger the execution of the code below. This is an example of how the server-side can initiate the process for creating a checkout request.
<?php
$curl = curl_init();
$YOUR_DOMAIN = "http://localhost";
$postData = [
"referenceId" => "46cc77a44f0f40f8b7877c78d8bbd8e0", //Your Reference
"amount" => 20.00,
"currency" => "NOK",
"successUrl" => "$YOUR_DOMAIN/success",
"failUrl" => "$YOUR_DOMAIN/fail",
"cancelUrl" => "$YOUR_DOMAIN/cancel",
"remittanceInfo" => "Sweatshirt Order #85" // Remittance Information
"language" => "EN"
"country" => "NO"
];
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://checkout.sandbox.neonomics.io/api/v1/checkout-requests', CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode($postData),
CURLOPT_HTTPHEADER => array(
'api-key: 09e4201c-9ddb-4b65-bc95-975b7373qwer', // Your Api Key
'Content-Type: application/json',
'Accept: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
$redirectUrl = json_decode($response, true)['redirectUrl']
; header("Location: $redirectUrl");
?>
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import org.json.JSONObject;
import static spark.Spark.*;
public class PayWithNeonomics {
public static void main(String[] args) {
PayWithNeonomicsSevice payWithNeonomicsSevice = new PayWithNeonomicsSevice();
port(80);
post("/pay-with-neonomics", (request, response) -> {
String redirectUrl = payWithNeonomicsSevice.createCheckoutRequest();
response.redirect(redirectUrl);
return "";
});
}
static class PayWithNeonomicsSevice {
public String createCheckoutRequest() throws UnirestException {
JSONObject requestBody = new JSONObject();
requestBody.put("referenceId", "a6128c9f-8155-4e2e"); // Your Reference
requestBody.put("amount", 12.24);
requestBody.put("currency", "NOK");
requestBody.put("remittanceInfo","Sweatshirt Order #85");
requestBody.put("country", "NO");
requestBody.put("successUrl", "https://-yourDomain-.com/order/a6128c9f-81554e2e-b24f-7a65555b93c6/success");
requestBody.put("failUrl", "https://-yourDomain-.com/order/a6128c9f-8155-4e2eb24f-7a65555b93c6/fail");
requestBody.put("cancelUrl", "https://-yourDomain-.com/order/a6128c9f-8155-4e2eb24f-7a65555b93c6/cancel");
requestBody.put("language", "EN");
String redirectUrl = Unirest.post("https://checkout.sandbox.neonomics.io/api/v1/checkout-requests")
.header("api-key", "4d3aacdb-54c1-4348-b09f-ed439590ae0f") // Your API Key
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.body(requestBody)
.asJson().getBody().getObject()
.getString("redirectUrl").toString();
return redirectUrl;
}
}
}
4. Create your first Checkout Request
Client’s system calls Nello Pay via REST API in order to create CheckoutRequest.
Rest API Specification
The specification is intended to provide information about integration endpoint and fields.
Endpoint: Create CheckoutRequest
Method: POST
HTTP Path: /api/v1/checkout-requests
Sandbox Environment: https://checkout.sandbox.neonomics.io/
Live Environment: https://checkout.neonomics.io/
Checkout Request
JSON Object with the next fields:
Only one of the two RemittanceInfo parameters can be populated, not both.
Parameters | Description |
---|---|
referenceId
type: STRING
required: | May be order id in client's system |
endToEndId | If not provided it will be generated. Max length is 35 characters. |
amount | Amount to be paid by debtor |
currency | Currency enum - currency of transferring money. |
creditorAccount | Should be used when the creditor (payee) should be a different account than the one registered in the Merchant Portal. |
country | Country enum - displays available banks in set country for end users to pay with. |
language | Language code for the language in which the UI should be rendered. |
paymentScheduledDate | Date for scheduled Payment in YYYY-MM-DD format. Should not contain dates older than current date. |
maxScheduledDate | Can be provided when the |
scheduledDateEditable | Value "TO_SET_DATE" to enable date-picker (if user should be able to edit the payment scheduled date) and "FIXED" to disable it. If it is not provided, feature is enabled by default. |
successUrl | URL for user redirection in case of success. |
failUrl | URL for user redirection in case of failed payment. |
cancelUrl | URL redirection for user checkout cancellation. |
remittanceInfo | Message that is put to remittance information of the payment (max size: 140 characters). This is unstructured information. |
remittanceInfoStructured | Containing data to execute structured payment. It is an unique identification for the payment, issued by the creditor in accordance with a national standard (e.g. "KID" in Norway, "INVOICE" in Finland, "OCR" in Sweden. |
clientName | The display name of the client that is initiated the payment, this is displayed to the end user in the checkout. |
creditorAddress | This field is mandatory for cross-border payments. Containing Creditor address fields. |
Building your JSON objects
Lets build your Checkout Request
Request header:
api-key: 31mkl-hfy23-312kj-f8qw…
Request Body for non structured remittance info:
{
referenceId: "41212",
remittanceInfo: "Ord #41212",
amount: 20,
currency: "EUR",
creditorAccount: {
creditorName: "Bob Huws",
iban: "NO9386011117947"
},
successUrl: "https://merchant.neonomics.io/order/41212/success",
failUrl: "https://merchant.neonomics.io/order/41212/fail",
cancelUrl: "https://merchant.neonomics.io/order/41212/cancel",
language: "EN",
country: "NO"
}
Response body:
{
redirectUrl: "https://checkout.neonomics.io/api/v1/checkoutrequests/JkuOIJHLSjhasodLJGHD.../app",
id: "0a15025d-824a-19c6-8182-7d5ab472002f"
}
Request Body for structured remittance info:
{
referenceId: "41212",
remittanceInfoStructured: {
reference: "1234",
referenceIssuer: "John Doe",
referenceType: "KID"
},
amount: 20,
currency: "EUR",
creditorAccount: {
creditorName: "Bob Huws",
iban: "NO9386011117947"
},
successUrl: "https://merchant.neonomics.io/order/41212/success",
failUrl: "https://merchant.neonomics.io/order/41212/fail",
cancelUrl: "https://merchant.neonomics.io/order/41212/cancel",
language: "EN",
country: "NO"
}
Request Body for cross-border payments
{
referenceId: "41212",
remittanceInfoStructured: {
reference: "123456",
referenceIssuer: "John Doe",
referenceType: "OCR"
},
amount: 20,
currency: "EUR",
creditorAccount: {
creditorName: "Bob Huws",
iban: "NO9386011117947"
},
successUrl: "https://merchant.neonomics.io/order/41212/success",
failUrl: "https://merchant.neonomics.io/order/41212/fail",
cancelUrl: "https://merchant.neonomics.io/order/41212/cancel",
language: "EN",
country: "SE",
creditorAddress: {
creditorStreetName: "Bogstadveien",
creditorBuildingNumber: "23",
creditorPostalCode: "0404",
creditorCity: "Begen",
creditorCountry: "Norway"
}
}
Updated about 2 months ago