Same Device (Inject)

Integrate our PAY.POS application on your own device.

We suggest that you start within the app the merchant is using. This generates a simple transaction that can be send to your backend and to PAY.POS. You can also first start a payment in your backend and send the reference via the merchant application to the PAY.POS.

If PAY.POS is opened by an inject and PAY.POS is activated it reads the card data and encrypts the data. If a PINcode is needed, it will ask for the PIN and encrypt that as well. It sends the data to the Transaction Gateway Unit where the transaction is routed via the different schemes to the Issuing bank where the payment is completed. If the Payment fails, we return to the original application or URL (via the returnUrl) where the next action can be performed.

After the payment we asynchronously send a data request to the Exchange URL. And transfer the Payment to the Global Management System where the reporting engine collects the necessary data to report, clear and settle the funds to your account.


Inject an order

The fastest way to start a payment is via the direct inject. You can start a transaction by sending it to Pay.POS.

Keep it simple at the start

transaction = {
	"description": "Field 6.2 for EUR 30,02",
	"reference": "FIELD6.2",
	"returnUrl": "https:\/\/cpoc.buddy.nl",  // Or YOURAPP://UUID
		"amount": {
		"value": 123,
		"currency": "EUR"
	}
}

But you are allowed to use the full order object

transaction = {
	"serviceId": "SL-1234-1234",
	"description": "Field 6.2 for EUR 30,02",
	"reference": "FIELD6.2",
	"returnUrl": "https:\/\/cpoc.buddy.nl",  // Or YOURAPP://UUID
	"exchangeUrl": "https:\/\/demo.pay.nl\/exchange.php",
	"amount": {
		"value": 4321,
		"currency": "EUR"
	},
	"integration": {
		"testMode": true
	},
	"customer": {
		"firstName": "John",
		"lastName": "Doe",
		"phone": "0031612345678",
		"birthDate": "1999-02-15",
		"gender": "m",
		"email": "[email protected]",
		"ipAddress": "213.126.82.230",
		"trust": 5,
		"reference": "NL87654321",
		"company": {
			"countryCode": "nl",
			"coc": "12345678",
			"vat": "NL0123456789",
			"name": "CompanyName"
		}
	},
	"order": {
		"countryCode": "NL",
		"deliveryDate": "2022-12-30",
		"invoiceDate": "2022-12-30",
		"deliveryAddress": {
			"firstName": "John",
			"lastName": "Doe",
			"streetName": "Deliverylane",
			"streetNumber": "70",
			"streetNumberExtension": "A",
			"zipCode": "5678CD",
			"city": "Amsterdam",
			"countryCode": "NL"
		},
		"invoiceAddress": {
			"firstName": "Samanta",
			"lastName": "Doe - Jones",
			"streetName": "Invoicestreet",
			"streetNumber": "2",
			"streetNumberExtension": "B",
			"zipCode": "SW36LQ",
			"city": "London",
			"countryCode": "GB"
		},
		"products": [{
			"id": "TEST_01",
			"description": "Caramels sweet roll",
			"type": "article",
			"price": {
				"value": 1,
				"currency": "EUR"
			},
			"quantity": 2,
			"vatCode": "H"
		}, {
			"id": "TEST_02",
			"description": "Cookie tart sugar",
			"type": "article",
			"price": {
				"value": 3,
				"currency": "EUR"
			},
			"quantity": 1,
			"vatCode": "H"
		}, {
			"id": "TEST_03",
			"description": "Lollipop chocolate bar",
			"type": "article",
			"price": {
				"value": 1,
				"currency": "EUR"
			},
			"quantity": 5,
			"vatCode": "H"
		}]
	},
	"notification": {
		"type": "email",
		"recipient": "[email protected]"
	},
	"stats": {
		"object": "POS System",
		"info": "Campagne 99",
		"tool": "Google",
		"extra1": "Customer 6985615",
		"extra2": "Invoice 21.3695",
		"extra3": "Shop Amsterdam"
	}
}

Brand the PAY.POS

To change the icon and the colour you can send an image (JPG or PNG format) in base64. To change the colours of the loading icons and the buttons youcan also send in buttonTextColor

<a href='paycpoc://?data=ab9c9a73-d986-ce76-1937-508381ac626e&layout={
    "icon": "data:image/png;base64,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",
    "buttonTextColor": "F75513"
  }'>Link to the APP
</a>

TIP through an inject

It is also possible to provide the user with an option to leave a tip. To do this you have to slightly alter your inject request:

{
  "description": "Field 6.2 for EUR 30,02",
  "reference": "FIELD6.2",
  "returnUrl": "https:\/\/cpoc.buddy.nl",  // Or YOURAPP://UUID
  "amount": {
    "value": 123,
    "currency": "EUR"
  },
  "integration": {
    "tipMode":{ 
      "enabled":true,
      "amountSettings": [2.33, 15.6, 20.2]
    },
  }
}

We added the integration -> tipMode section. If you set the enabled property to true the user will be asked if they want to leave a tip.

tipMode fields:

FieldTypeDescription
enabledbooleanIndicates if the tip mode should be offered to the end user.
amountSettingsArray[number]An array containing slots for tip options. (Limited at 3 slots for now). The value is a percentage and limited to a value between 0 and 100

For now we offer three slots (as a maximum) for you to provide the user with custom tip options. See integration-> tipMode-> amountSettings each of these values is a percentage with a maximum value of 100 and minimum of 0.

Example

If tipMode is enabled, we will append a new object in the returnURL called amountInfo. The value will look something like:

amountInfo=eyJwYXltZW50Ijp7ImFtb3VudCI6MjQwMCwiY3VycmVuY3kiOiJFVVIifSwidGlwIjp7ImFtb3VudCI6NDg1LCJjdXJyZW5jeSI6IkVVUiJ9fQ==

This value is coded in base64, if you decode this, you will get this JSON format

{
   "payment":{
      "amount":2400,
      "currency":"EUR"
   },
   "tip":{
      "amount":485,
      "currency":"EUR"
   }
}

Using another Service/sales location

You can provide the PAY.POS with an alternative service/sales location than the one that the PAY.POS is currently activated on.

To set this up you require two elements:

FieldExample valueDescription
serviceIdSL-1234-1234The sales location ID you want to start the payment for.
secret6ba7ef49e89c4178a1eabff5a7ab82d9The secret you retrieve from the sales location

Use these values in the deeplink, e.g.

paycpoc://?transaction=<PARTIAL_TRANSACTION_OBJECT>
&service={"serviceId": "SL-1234-1234", "secret": "6ba7ef49e89c4178a1eabff5a7ab82d9"}


Sending logs through deeplink

You can send logs through a deeplink from your own app.

paycpoc://?transaction={"returnUrl":"https://google.com"}&command=sendLogs

After the payment

We will load the returnURL. This can be a website or another app installed on the device. We will append the returnURL with additional parameters.

Field

Type

Description

orderId

MV-CODE

ID of the transaction in the TGU

statusAction

PAID CANCELLED ERROR NFC_READ OFFLINE EXPIRED

Status of the transaction

reference

Alphanummeric

Your reference of the transaction

statusCode

100 / -63 / -64

Nummeric detailed reasoncode for statuus

ticket

Plain text - Base 64

Printable ticket for the cardholder

activationCode

-####-####

Code that is valid for 24 hours, to activate the terminal via my.pay.nl or the

Terminal:Create

API

amountInfo

Plain text - Base 64

Decodable JSON string with the different objects that sum up to the total paid amount

nfcCardID

String (64)

If an external Card ID is scanned, we return the ID of that card.


Status actions

Status

Meaning

PAID

Payment was successful.

CANCELLED

Cancel button has been hit or payment has been DECLINED. if DECLINED, you will get the statusCode & orderId

ERROR

An error occurred during payment.

NFC_READ

NFC_READ is triggered when a Mifare card is scanned. It allows merchants to offer their own (prepaid) cards using the nfcCardID parameter. While the merchant still initiates a transaction, the standard payment flow is skipped, and we immediately redirect back to the merchant’s app. The merchant is responsible for handling acceptance or rejection of the transaction.

Note: This status is not triggered when a regular bank card is used.

OFFLINE

Card has been read ofline, transaction will be performed at a later date. (Expires after 28 days).

EXPIRED

Transaction reached it's expiration limit. (45 sec by default).


Ticket example

Below you will find the source base64 of the ticket and the ASCII variant that showcases the result when the base64 is decoded.

ICAgICAgICAgICAgIENsYXNzaWMgRmxvd2VyIFN0b3JlIEIuVi4gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIEVuc2NoZWRlICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkF1dG9tYWF0OiAgICAyMjE5MDA5MSAgICAgVmVya29wZXI6ICAgICAxMDczNTMxMwpCZXRhbGluZzogICAgICAgICAgICAgICAgIE1WLTExMTEtMTExMS0xMTExLTExMTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIE1BRVNUUk8gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIChBMDAwMDAwMDAwMDAwMSkgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAwMDAxNjY2KioqKioqKioqMDAxMjMgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKS2FhcnQgdm9sZ25yOiAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkdlbGRpZyB0b3Q6IDI3MDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKRGF0dW06IDIyLTEyLTIwMjQgMDk6MzAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApBdXRoLiBjb2RlOiAxMTBYMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVG90YWFsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsMDEgRVVSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAozRjAwMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA=
             Classic Flower Store B.V.                    
                    Enschede                    
------------------------------------------------
Automaat:    22190091     Verkoper:     10735313
Betaling:                 MV-1111-1111-1111-1111
                                                
                     MAESTRO                    
                                                
                (A0000000000001)                
                                                
               0001666*********00123              
                                                
Kaart volgnr: 00                                
Geldig tot: 2706                                
                                                
Datum: 22-12-2024 09:30                         
                                                
Auth. code: 110X24                             
                                                
Totaal:                                 0,01 EUR
                                                
3F0002                                          
                                                
------------------------------------------------
                                                

Activation by Inject

If you open the APP, that is not activated yet via an inject, we will provide the activationCode

APP-DEEPLINK://?statusAction=ACTIVATE&reference={order.reference}&activationCode=####-####-####

you can use the Terminal:Create API to activate the terminal. After Activation you restart the Payment.

Refunds

In order to do refunds you need to check the following:

  • Refunds are enabled on your TH-code: Contact PayNL support to do this

  • Refunds are enabled on your Sales Location: If you do not see this option, contact PayNL support

Once this is done, you can inject a Refund using the following:

paycpoc://?transaction={"type":"REFUND","amount":{"value":1,"currency":"EUR"}}

Frequently asked questions

Can I integrate SoftPOS using a browser-to-app (Browser2App) approach? While it is technically possible to integrate SoftPOS via a browser-to-app (Browser2App) implementation, you may face some potential limitations and user experience issues.

For optimal performance and a seamless user journey, we recommend using app-to-app (App2App) integration If Browser2App is currently your only viable option, you may encounter issues such as multiple browser tabs opening after each transaction. To help mitigate this, we suggest exploring Progressive Web Apps (PWAs) using resources like web.dev's PWA. If you want to convert the website to an app, consider using tools like Capacitor to convert your web application into a native mobile app. In summary, for the best SoftPOS experience, App2App integration would be the preferred and most effective method.