Here at zaakpay we are committed to providing the best experience to merchants and developers alike. We have worked hard on providing developers with the easiest integration experience for any online payments products. Here you will find everything you need to get your website up and accepting payments!

The tabs below will provide you with all your integration needs!

  • Beginners: Follow the steps here in case you are using any of our integration kits
  • Advanced: If you’re trying to build an integration kit from the scratch, you’ve got it all here!
  • UI Customization: Add our catchy buttons on our site, and customize your site with other options!
  • Transact API: The API that helps you process online transactions
  • Check API: Use the API to check the status of your latest transactions
  • Update API: settle, cancel or refund transactions.
  • API Responses: Appendix to all Zaakpay API responses

Sign up

Sign up for a business account on Zaakpay. After signing up & verifying your account follow the steps below:

  • Login to zaakpay.
  • Click the My Account tab.
  • Select the integration sub-menu item under the My Account tab.
  • Select the URLs & Keys tab from the navigation.
  • Fill in details like the domain you'll be posting from and your return URL. Here the domain is the domain where you'll be posting data to zaakpay from and the response URL for transact API is the path to the response.ext file on your server.
  • Select the Transaction limits sub-menu item under the My Account tab and set your appropriate transaction limits.
  • Generate your secret key and note it down along with your merchant identification number.

Get Merchant ID & Secret Key

If you're using the integration kit, please replace the values of the secret key in the response.ext and posttozaakpay.ext files where ext=extension.

Checksum calculation before sending

For both integrity & data-authenticity verification before sending data to the API, you need to calculate a checksum of all the data that you send to Zaakpay. We use an HMAC SHA-256 algorithm to calculate the checksum of ALL data that is posted to the API. We require data to be posted to our server in NVP (Name-Value Pairs) format.
To calculate the checksum please follow the process below:

  • Create a list of all mandatory and optional fields which you're passing to the API.
  • Create a concatenated string of all data values in your list, with single quotes around each item.
  • Calculate the checksum using the HMAC SHA-256 algorithm using the concatenated string as data and your generated secret key.
  • The resulting checksum calculated should be posted to the Zaakpay API along with other data.

For example:
Let's suppose we need to post the following data to the API. The following parameters are just for illustration.
You'll need to calculate checksum on all parameters except "checksum" in actuality.

  • merchantIdentifier - b19e8f103bce406cbd
  • orderId - 223453
  • buyerEmail - a@b.com
  • amount - 20000
Now, we have to create a concatenated strip of all the values, in the order in which they'll be sent to the API, with single quotes around each item. The string therefore will be:
  • 'b19e8f103bce406cbd''223453''a@b.com''20000'
Now you can calculate the checksum based on this concatenated string and the secret key generated in your account under the URLs & Keys tab.

For more on HMAC implementations for various platforms please take a look at the following links: The links provided below are for referential purposes only. The final checksum should be converted into HEXADECIMAL character set.

Form Pre-filling

Since you are sending payment information to zaakpay, you need to prefill form parameters as hidden fields as a part of a form.
Here is an example of what a form sending information to zaakpay looks like:

<form action="https://api.zaakpay.com/transact" method="post"> 
    <input type="hidden" name="merchantIdentifier" value="b19e8f103bce406cbd"> 
    <input type="hidden" name="checksum" value="796d672eb63e1dfa4a0bc844e8d3468ebcd6d612dc39588814b7b00ce669c1c2"> 
    <input type="hidden" name="orderId" value="444221414"> 
    <input type="hidden" name="returnUrl" value=""> 
    <input type="hidden" name="buyerEmail" value="a@b.com"> 
    <input type="hidden" name="buyerFirstName" value="kumar"> 
    <input type="hidden" name="buyerLastName" value="prasant"> 
    <input type="hidden" name="buyerAddress" value="lsa"> 
    <input type="hidden" name="buyerCity" value="noida"> 
    <input type="hidden" name="buyerState" value="u.p."> 
    <input type="hidden" name="buyerCountry" value="India"> 
    <input type="hidden" name="buyerPincode" value="201012"> 
    <input type="hidden" name="buyerPhoneNumber" value="9871041425"> 
    <input type="hidden" name="txnType" value="1"> 
    <input type="hidden" name="zpPayOption" value="1"> 
    <input type="hidden" name="mode" value="1"> 
    <input type="hidden" name="currency" value="rupee"> 
    <input type="hidden" name="amount" value="200000"> 
    <input type="hidden" name="merchantIpAddress" value="127.0.0.1"> 
    <input type="hidden" name="purpose" value="1"> 
    <input type="hidden" name="productDescription" value="test product"> 
    <input type="hidden" name="product1Description" value=""> 
    <input type="hidden" name="product2Description" value=""> 
    <input type="hidden" name="product3Description" value=""> 
    <input type="hidden" name="product4Description" value=""> 
    <input type="hidden" name="shipToAddress" value=""> 
    <input type="hidden" name="shipToCity" value=""> 
    <input type="hidden" name="shipToState" value=""> 
    <input type="hidden" name="shipToCountry" value=""> 
    <input type="hidden" name="shipToPincode" value=""> 
    <input type="hidden" name="shipToPhoneNumber" value=""> 
    <input type="hidden" name="shipToFirstname" value=""> 
    <input type="hidden" name="shipToLastname" value=""> 
    <input type="hidden" name="txnDate" value="2011-08-30"> 
    </form> 
    

Please check the respective API documentation to see all the parameters which you can pass to the API.

Testing!

You are done!


Set the parameter mode=0 and try a few transactions using Zaakpay!

If everything works as it should, after a payment is completed you should be directed back to your website along with POST data about the result & other parameters of the transaction.

This part is handled by the response.ext file, which displays all the received information and also verifies the checksum to verify the integrity of the information received.

You should take the response.ext as a starting point and accordingly display the end result to your customers and other things.

For Example:
In case of a successful responseCode & successful checksum verification you can display a success page to the customer and show his order has been placed successfully. You can also keep a copy of the transaction details in your database by updating it for each response received here.

Top 5 developer questions.

Please explain the various transaction states;

State Description
0 Scheduled - has not started yet, will start at a later date. Not used in Webpay product
1 Initiated - has now started. User will now be shown the card page.
2 Processing - the user has been shown the card page and we are now waiting for input from him. He is entering the card number and it is being sent to the bank
3 Authorized - the user entered the card number and 3dsecure in the page, it was sent to the bank, and the bank has approved the transaction. The money has been blocked from the user's account.
4 On Hold - transaction temporarily stopped by zaakpay - merchant cannot capture it.
5 InComplete - user left the transaction without filling in info.
6 Declined - bank has refused to approve transaction.
7 Captured - the merchant has shipped the product, and now asks for the money to be transferred to his account. the bank has approved the request (but money not moved yet).
8 Cancelled by Merchant - merchant has cancelled the transaction. request does not go to bank, it just stops merchant from capturing transaction.

read more

How does checksum work? What is checksum not matching error?

We use a checksum to make sure the transaction parameters you've sent from your site are the same as the ones we receive and process. This checksum is sent along with each request you sent. This safeguards against hacking attacks.
read more

How do I test my setup? When am I in Sandbox, Live mode?

When you sign up on our site and retrieve the merchant id and secret key, you are in sandbox (test) mode. You can complete your integration and test out as many transactions as you like without any actual money being moved.
read more

When I send txn request to Zaakpay, I get sent back to my return URL without displaying the card page.

This means there was some data error in the details you sent. When this happens, the API server sends back the response which includes response codes and descriptions. See the example response/handler page given in the kits - it parses these values. These response values will give you details on what parameters in your data have the issues.
read more

What is 'Amount Not Valid' error?

After logging into the Zaakpay site, you'll see a tab labelled 'Integration'. Here you can set the maximum and minimum allowed transaction amount limits. By default the minimum is set to 10 Rs. If your transaction amount is outside these limits, you will get an invalid amount error. You can fix it by adjusting these limits, and then by requesting transactions within the limits you've set.
read more