Checkout Payment Integration
To create a checkout page for a transaction, send the following request header and body parameters via POST.
POST/checkout
Checkout and pay for the transaction
HEADER PARAMETERS
Content-Type
optional
string
Default content type of the API.
Authorization
required
string
Unique identifier of the integrator.
REQUEST BODY SCHEMA: application/json
payload
required
string
Generated JSON Web Token (JWT) from transaction data signed with integrator's secret using HS256 algorithm.
Secret
issued key used for signing the payload data
Transaction Data
is a JSON-formatted data as shown below
{
"data":{
"customer":{
"first_name":"Abel",
"last_name":"Maclead",
"billing_address":{
"line1":"#88",
"line2":"Boston Ave",
"city_municipality":"Philadelphia",
"zip":"19132",
"state_province_region":"PA",
"country_code":"US"
},
"shipping_address":{
"line1":"#88",
"line2":"Boston Ave",
"city_municipality":"Philadelphia",
"zip":"19132",
"state_province_region":"PA",
"country_code":"US"
},
"contact":{
"email":"amaclead@domain.com",
"mobile":"+1415552671"
}
},
"payment":{
"description":"Payment for a product",
"amount":1000.50,
"currency":"USD",
"option":"{generatedOptionKey}",
"merchant_reference_id":"INV-100001_TEST",
"other_references":[
"REF1", "REF2"
]
},
"route":{
"callback_url":"https://tlpe.io/thankyou",
"notify_user":true
},
"time_offset":"+08:00"
}
}
See API Reference > Transaction Body Payload Data for a more guided requirement.
Custom parameters can be added depending on the acquirer or payment
processor/brand being used in the request. Include custom_parameters
object in the request body if supported.
"custom_parameters": {
"custom_name_1": "custom value here",
"custom_name_1": "custom value here"
},
For guidance, you may coordinate with your AltPayNet’s sales representative if custom parameters is supported for your account.
Info
For option parameter value, get the generated code from Payment Options endpoint response.
After the payment transaction, page will be redirected to the callback URL set in the payload
where a URL parameter transaction_id will be appended.
Example:
https://tlpe.io/thankyou?transaction_id={transactionId}
Request Samples
curl
-X POST "https://test-api.tlpe.io/checkout" \
-H "Content-Type: application/json" \
-H "Authorization: {integratorToken}" \
-d "{
"payload": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJkYXRhIjp7ImN1c3RvbWVyIjp7ImZpcnN0X25hbWUiOiJ7
Zmlyc3ROYW1lfSIsImxhc3RfbmFtZSI6IntsYXN0TmFtZX0i
LCJiaWxsaW5nX2FkZHJlc3MiOnsibGluZTEiOiJ7YWRkcmVz
c0xpbmUxfSIsImxpbmUyIjoie2FkZHJlc3NMaW5lMn0iLCJj
aXR5X211bmljaXBhbGl0eSI6IntjaXR5fSIsInppcCI6Int6
aXBDb2RlfSIsInN0YXRlX3Byb3ZpbmNlX3JlZ2lvbiI6Intz
dGF0ZX0iLCJjb3VudHJ5X2NvZGUiOiJ7Y291bnRyeUNvZGV9
In0sInNoaXBwaW5nX2FkZHJlc3MiOnsibGluZTEiOiJ7YWRk
cmVzc0xpbmUxfSIsImxpbmUyIjoie2FkZHJlc3NMaW5lMn0i
LCJjaXR5X211bmljaXBhbGl0eSI6IntjaXR5fSIsInppcCI6
Int6aXBDb2RlfSIsInN0YXRlX3Byb3ZpbmNlX3JlZ2lvbiI6
IntzdGF0ZX0iLCJjb3VudHJ5X2NvZGUiOiJ7Y291bnRyeUNv
ZGV9In0sImNvbnRhY3QiOnsiZW1haWwiOiJ7ZW1haWxBZGRy
ZXNzfSIsIm1vYmlsZSI6Inttb2JpbGVOdW1iZXJ9In19LCJw
YXltZW50Ijp7ImRlc2NyaXB0aW9uIjoie3RyYW5zYWN0aW9u
RGVzY3JpcHRpb259IiwiYW1vdW50IjoxMDAsImN1cnJlbmN5
Ijoie2N1cnJlbmN5Q29kZX0iLCJvcHRpb24iOiJ7Z2VuZXJh
dGVkT3B0aW9uS2V5fSIsIm1lcmNoYW50X3JlZmVyZW5jZV9p
ZCI6IntyZWZlcmVuY2V9Iiwib3RoZXJfcmVmZXJlbmNlcyI6
WyJ7cmVmZXJlbmNlMX0iLCJ7cmVmZXJlbmNlMn0iXX0sInJv
dXRlIjp7ImNhbGxiYWNrX3VybCI6IntjYWxsYmFja1VybH0i
LCJub3RpZnlfdXNlciI6dHJ1ZX19fQ.21qPOEoXodlV_pmMe
_7xvuH9QGLnyIcq0nmnj_8fwAc"
}"
public Dictionary<string, dynamic> Checkout()
{
Dictionary<string, dynamic> responseData;
string payload = "{\"payload\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7ImN1c3RvbWVyIjp7ImZpcnN0X25hbWUiOiJKb2huIiwibGFzdF9uYW1lIjoiRG9lIiwiYmlsbGluZ19hZGRyZXNzIjp7ImxpbmUxIjoiVmljZW50ZSBNYWRyaWdhbCBCdWlsZGluZyIsImxpbmUyIjoiQXlhbGEgQXZlbnVlIiwiY2l0eV9tdW5pY2lwYWxpdHkiOiJNYWthdGkgQ2l0eSIsInppcCI6IjEyMzQiLCJzdGF0ZV9wcm92aW5jZV9yZWdpb24iOiJNZXRybyBNYW5pbGEiLCJjb3VudHJ5X2NvZGUiOiJQSCJ9LCJzaGlwcGluZ19hZGRyZXNzIjp7ImxpbmUxIjoiVmljZW50ZSBNYWRyaWdhbCBCdWlsZGluZyIsImxpbmUyIjoiQXlhbGEgQXZlbnVlIiwiY2l0eV9tdW5pY2lwYWxpdHkiOiJNYWthdGkgQ2l0eSIsInppcCI6IjEyMzQiLCJzdGF0ZV9wcm92aW5jZV9yZWdpb24iOiJNZXRybyBNYW5pbGEiLCJjb3VudHJ5X2NvZGUiOiJQSCJ9LCJjb250YWN0Ijp7ImVtYWlsIjoiam9obmRvZUBkb21haW4uY29tIiwibW9iaWxlIjoiKzYzOTEyMzQ1Njc4OSJ9fSwicGF5bWVudCI6eyJkZXNjcmlwdGlvbiI6IlBheW1lbnQgZm9yIGEgcHJvZHVjdCIsImFtb3VudCI6MTAwMC41LCJjdXJyZW5jeSI6IlBIUCIsIm9wdGlvbiI6ImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKOS5leUpwYzNNaU9pSlVURkJGSWl3aWMzVmlJam9pVkV4UVJTQkNZWE5sSUZKdmRYUmxjaUJCZFhSb1pXNTBhV05oZEdsdmJpSXNJbUYxWkNJNklsUk1VRVVnUW1GelpTQlNiM1YwWlhJaUxDSmxlSEFpT2pFMk1qYzNOREl6T1Rrc0ltbGhkQ0k2TVRZeU56VTJPVFU1T1N3aWFuUnBJam9pWlRjek5qSmpaRGt0TlRkaU5DMDBabUptTFRnNU9UTXROakUxTWpjMFpEQmhOamd6SWl3aVpHRjBZU0k2SWpVME1qVTFOakZoTFdZM01XVXROR1E1WlMwNU1UVXlMVGxsTlRBNU5XWXdOV1V5TlNKOS5aRmxhelkzNjJCT2hiM0gtYjlRWE1WZ285cnpSSi1ZZk1DVG85UGRHbTdRIiwibWVyY2hhbnRfcmVmZXJlbmNlX2lkIjoiSU5WLTEyMyIsIm90aGVyX3JlZmVyZW5jZXMiOlsiUkVGMSIsIlJFRjIiXX0sInJvdXRlIjp7ImNhbGxiYWNrX3VybCI6Imh0dHBzOi8vYWx0cGF5bmV0LmNvbSIsIm5vdGlmeV91c2VyIjp0cnVlfSwidGltZV9vZmZzZXQiOiIrMDg6MDAifX0.oBq0qjCCYldD21BBh501mSFokKG7FY3RnqunhKtfnAU\"}";
string url = "https://test-api.tlpe.io/checkout";
byte[] buffer = Encoding.ASCII.GetBytes(payload);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.Headers["Authorization"] = "{integratorToken}";
request.ContentType = "application/json";
Stream PostData = request.GetRequestStream();
PostData.Write(buffer, 0, buffer.Length);
PostData.Close();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
StringReader sr = new StringReader(reader.ReadToEnd());
JsonReader jreader = new JsonTextReader(sr);
JsonSerializer jss = new JsonSerializer();
responseData = jss.Deserialize<Dictionary<string, dynamic>>(jreader);
reader.Close();
responseStream.Close();
}
return responseData;
}
Public Function Checkout() As Dictionary(Of String, Object)
Dim payload As String = "{""payload"":""eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7ImN1c3RvbWVyIjp7ImZpcnN0X25hbWUiOiJKb2huIiwibGFzdF9uYW1lIjoiRG9lIiwiYmlsbGluZ19hZGRyZXNzIjp7ImxpbmUxIjoiVmljZW50ZSBNYWRyaWdhbCBCdWlsZGluZyIsImxpbmUyIjoiQXlhbGEgQXZlbnVlIiwiY2l0eV9tdW5pY2lwYWxpdHkiOiJNYWthdGkgQ2l0eSIsInppcCI6IjEyMzQiLCJzdGF0ZV9wcm92aW5jZV9yZWdpb24iOiJNZXRybyBNYW5pbGEiLCJjb3VudHJ5X2NvZGUiOiJQSCJ9LCJzaGlwcGluZ19hZGRyZXNzIjp7ImxpbmUxIjoiVmljZW50ZSBNYWRyaWdhbCBCdWlsZGluZyIsImxpbmUyIjoiQXlhbGEgQXZlbnVlIiwiY2l0eV9tdW5pY2lwYWxpdHkiOiJNYWthdGkgQ2l0eSIsInppcCI6IjEyMzQiLCJzdGF0ZV9wcm92aW5jZV9yZWdpb24iOiJNZXRybyBNYW5pbGEiLCJjb3VudHJ5X2NvZGUiOiJQSCJ9LCJjb250YWN0Ijp7ImVtYWlsIjoiam9obmRvZUBkb21haW4uY29tIiwibW9iaWxlIjoiKzYzOTEyMzQ1Njc4OSJ9fSwicGF5bWVudCI6eyJkZXNjcmlwdGlvbiI6IlBheW1lbnQgZm9yIGEgcHJvZHVjdCIsImFtb3VudCI6MTAwMC41LCJjdXJyZW5jeSI6IlBIUCIsIm9wdGlvbiI6ImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKOS5leUpwYzNNaU9pSlVURkJGSWl3aWMzVmlJam9pVkV4UVJTQkNZWE5sSUZKdmRYUmxjaUJCZFhSb1pXNTBhV05oZEdsdmJpSXNJbUYxWkNJNklsUk1VRVVnUW1GelpTQlNiM1YwWlhJaUxDSmxlSEFpT2pFMk1qZ3dORFV5T1RBc0ltbGhkQ0k2TVRZeU56ZzNNalE1TUN3aWFuUnBJam9pWTJaa01qWXdOemt0Wm1SbU5DMDBZV1EzTFRrNE4yUXRZV0l3TW1WaFlUbGlNamMySWl3aVpHRjBZU0k2SWpVME1qVTFOakZoTFdZM01XVXROR1E1WlMwNU1UVXlMVGxsTlRBNU5XWXdOV1V5TlNKOS5hYk5FR3RFWkRrb2RZWGVhT3YwbmsyaFZtaXYxR3Nmc0NocGtuXzJFUV9BIiwibWVyY2hhbnRfcmVmZXJlbmNlX2lkIjoiSU5WLTEyMyIsIm90aGVyX3JlZmVyZW5jZXMiOlsiUkVGMSIsIlJFRjIiXX0sInJvdXRlIjp7ImNhbGxiYWNrX3VybCI6Imh0dHBzOi8vYWx0cGF5bmV0LmNvbSIsIm5vdGlmeV91c2VyIjp0cnVlfSwidGltZV9vZmZzZXQiOiIrMDg6MDAifX0.j775ElAYZuwUwRsD1rLcKTaHc_J3GGFtdpJcQD3ne3Q""}"
Dim url As String = "https://test-api.tlpe.io/checkout"
Dim request As WebRequest = WebRequest.Create(url)
request.Method = "POST"
request.Headers.Add("Authorization", "{integratorToken}")
request.ContentType = "application/json"
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(payload)
request.ContentLength = byteArray.Length
Dim dataStream As Stream = request.GetRequestStream()
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Dim response As WebResponse = request.GetResponse()
Dim responseStream = response.GetResponseStream()
Dim reader As New StreamReader(responseStream)
Dim responseReader As StringReader = New StringReader(reader.ReadToEnd())
Dim jreader As JsonReader = New JsonTextReader(responseReader)
reader.Close()
responseStream.Close()
response.Close()
Dim jss As New JsonSerializer()
Dim responseData As Dictionary(Of String, Object) = jss.Deserialize(Of Dictionary(Of String, Object))(jreader)
Return responseData
End Function
import http.client
import json
conn = http.client.HTTPSConnection('test-api.tlpe.io')
payload = json.dumps({'payload': '{generatedOptionKey}'})
headers = {'Authorization': '{integratorToken}',
'Content-Type': 'application/json'}
conn.request('POST', '/checkout', payload, headers)
res = conn.getresponse()
data = res.read()
print data.decode('utf-8')
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://test-api.tlpe.io/checkout',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"payload":"{generatedOptionKey}"
}',
CURLOPT_HTTPHEADER => array(
'Authorization: {integratorToken}',
'Content-Type: application/json'
) ,
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
require 'rest-client'
require 'json'
response = RestClient::Request.execute(
method: :post,
url: "https://test-api.tlpe.io/checkout",
payload: '{"payload": "{checkoutPayload}"}',
headers: { authorization: '{integratorToken}', content_type: 'application/json', accept: 'application/json'}
)
responseJson = JSON.parse(response)
puts JSON.pretty_generate(responseJson)
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://test-api.tlpe.io/checkout',
'headers': {
'Content-Type': 'application/json',
'Authorization': '{integratorToken}'
},
body: JSON.stringify({
"payload": "{encoded data}"
})
};
request(options, function(error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
200 Successful Response
RESPONSE SCHEMA: application/json
401 Erroneous Response
RESPONSE SCHEMA: application/json
Response Samples
{
"timestamp":"2020-07-14T08:08:04.815+0000",
"status":200,
"message":"Request processed successfully",
"path":"/checkout",
"data":{
"transaction_id":"{transactionID}",
"status_code":"OK.01.00",
"status_description":"Transaction ready for payment",
"payment_url":"{paymentUrl}"
}
}
{
"timestamp":"2020-07-14T08:08:04.815+0000",
"status":401,
"message":"Unauthorized client request",
"path":"/checkout",
"data":{
"status_code":"ER.02.10",
"status_description":"Unauthorized client request"
}
}
See API Reference > Response Messages for a guided reference.