Skip to content

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);
});

Download Postman request here

200 Successful Response

RESPONSE SCHEMA: application/json

timestamp
string
Transaction timestamp

status
string
HTTP status code

message
string
HTTP status code message/description

path
string
Endpoint path used for the transaction

data
object
Contains transaction-related response

transaction_id
string
Payment reference number of the transaction

status_code
string
API status code

status_description
string
API status code message/description

payment_url
string
Payment URL of the transaction

401 Erroneous Response

RESPONSE SCHEMA: application/json

timestamp
string
Transaction timestamp

status
string
HTTP status code

message
string
HTTP status code message/description

path
string
Endpoint path used for the transaction

data
object
Contains transaction-related response

status_code
string
API status code

status_description
string
API status code message/description

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.