Hesabe Request Handler

The following PHP Laravel code snippets demonstrate how the payment request process can be implemented

⚙️ Step by step integration

Request Validation

First, validate the incoming payment request data to ensure all required fields are present and properly formatted.

Important Note

Payment data containing the required fields in encrypted form must be submitted to the 'Checkout' endpoint for initiating the payment request.

Checkout.php
$validator = $this->validate($request, [
    'merchantCode' => 'required',
    'amount' => 'required|numeric|between:0.200,100000|regex:/^\d+(\.\d{1,3})?$/',
    'paymentType' => 'required|in:0,1,2,5,7,8,9,10,11,12,13,14,16', // '0' For indirect method only  
    'responseUrl' => 'required|url',
    'failureUrl' => 'required|url',
    'version' => 'required',
    'webhookUrl' => 'https://yourdomain.com/example' // [Optional Field] To get transaction response
]);

Read more about Hesabe Webhook URL

You can follow the Hesabe Webhook Request guide to get started.

Configuration Setup

Loading Encryption Keys, Access Code & API URL's from config

Checkout.php
$ivKey = HSB_IV_KEY;
$encryptionKey = HSB_ENCRYPTION_KEY;
$accessCode = HSB_ACCESS_CODE;
$checkoutApiUrl = HSB_CHECKOUT_API_URL;
$paymentUrl = HSB_PAYMENT_URL;

JSON Encoding

After validation, convert the request data to JSON format containing all the request keys and values.

Checkout.php
$requestDataJson = json_encode($request->input());

Data Encryption

Encrypt the JSON data using AES algorithm with the HesabeCrypt library for secure transmission.

Checkout.php
$encryptedData = HesabeCrypt::encrypt($requestDataJson, $encryptionKey, $ivKey);

API Request to Checkout Endpoint

Send the encrypted data to Hesabe's checkout API with proper headers including the access code.

Sandbox Checkout API

Below Checkout API strictly for sandbox testing only. Never use these sandbox URL's in production environment

https://sandbox.hesabe.com/checkout

Production Checkout API

Use the following Checkout API strictly for production transactions. Ensure that you never use these production URLs in the sandbox or testing environment

https://api.hesabe.com/checkout
Checkout.php
$baseUrl = "https://sandbox.hesabe.com";
$checkoutApiUrl = $baseUrl . "/checkout";  
$checkoutRequestData = new Request([ 'data' => $encryptedData ]);
$checkoutRequest = Request::create($checkoutApiUrl, 'POST', $checkoutRequestData->all());
$checkoutRequest->headers->set('accessCode', $accessCode);
$checkoutRequest->headers->set('Accept', 'application/json');   // Only for JSON response

Response Handling

Process the API response and extract the content for further processing.

Checkout.php
$checkoutResponse = Route::dispatch($checkoutRequest);
$checkoutResponseContent = $checkoutResponse->content();

Response Decryption

Decrypt the response using the same encryption keys and parse the JSON data.

Checkout.php
$decryptedResponse = HesabeCrypto::decrypt($checkoutResponseContent, $encryptionKey, $ivKey);
$responseDataJson = json_decode($decryptedResponse);

Payment Page Redirection

Extract the payment token from the response and redirect to Hesabe's payment URL.

Sandbox Payment API

Below payment API strictly for sandbox testing only. Never use these sandbox URL's in production environment

https://sandbox.hesabe.com/payment

Production Payment API

Use the following payment API strictly for production transactions. Ensure that you never use these production URLs in the sandbox or testing environment

https://api.hesabe.com/payment
Checkout.php
$paymentUrl = {{baseUrl}}/payment
$responseToken = $responseDataJson->response->data;
return Redirect::to($paymentUrl . '?data='. $responseToken);

Sample Transaction Response Structure

Here's an example of a successful payment response after decryption:

{
    "status": true,
    "code": 1,
    "message": "Transaction Success",
    "response": {
        "data": {
            "resultCode": "CAPTURED",
            "amount": 10,
            "paymentToken": "1569830677725743478",
            "paymentId": "100201927384634224",
            "paidOn": "2019-09-30 11:05:16",
            "orderReferenceNumber": null,
            "variable1": null,
            "variable2": null,
            "variable3": null,
            "variable4": null,
            "variable5": null,
            "method": 1
        }
    }
}

Transaction Response Parameters Reference

Here's an transaction response parameters details

FieldTypeDescription
status
BooleanPayment status (true for success; false for failure)
resultCode
StringSuccess transactions have values "CAPTURED", "ACCEPT", or "SUCCESS"
amount
NumericTransaction Amount
paymentToken
Numeric14-digit Payment Token returned from Hesabe
paymentId
AlphanumericPayment ID returned from Hesabe
paidOn
AlphanumericDate and Time of Payment
orderReferenceNumber
AlphanumericPayment ID returned from Hesabe
variable1
AlphanumericCustom user parameter which will be included in the response when it returns
variable2
AlphanumericCustom user parameter which will be included in the response when it returns
variable3
AlphanumericCustom user parameter which will be included in the response when it returns
variable4
AlphanumericCustom user parameter which will be included in the response when it returns
variable5
AlphanumericCustom user parameter which will be included in the response when it returns
method
NumericTransaction Payment method ID

For Any Technical Assistance

If you encounter any issues or need support during setup or integration, please contact our technical team for assistance.

Hesabe IT Support

Email address:itsupport@hesabe.com