Sample code for 30+ languages & platforms
Android™

Generate an E-way Bill

See more HTTP Misc Examples

Demonstrates how to send an HTTP POST request to generate an e-way bill.

Chilkat Android™ Downloads

Android™
// Important: Don't forget to include the call to System.loadLibrary
// as shown at the bottom of this code sample.
package com.test;

import android.app.Activity;
import com.chilkatsoft.*;

import android.widget.TextView;
import android.os.Bundle;

public class SimpleActivity extends Activity {

  private static final String TAG = "Chilkat";

  // Called when the activity is first created.
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    boolean success = false;

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // This example uses the previously obtained access token that was retrieved
    // in this example:  Get EWAY Auth Token using Gstin, username, password, and app_key

    CkJsonObject jsonAuth = new CkJsonObject();
    success = jsonAuth.LoadFile("qa_data/tokens/ewayAuth.json");
    if (success == false) {
        Log.i(TAG, jsonAuth.lastErrorText());
        return;
        }

    // The jsonAuth contains something like this:
    // {
    //   "authToken": "IBTeFtxNfVurg71LTzZ2r0xK7",
    //   "decryptedSek": "5g1TyTie7yoslU3DrbYATa7mWyPazlODE7cEh5Vy4Ho="
    // }

    // Generate the JSON data for the e-way bill.
    // The following code can be generated by pasting representative JSON into this online tool:
    // Generate JSON Code
    CkJsonObject jsonData = new CkJsonObject();
    jsonData.UpdateString("supplyType","O");
    jsonData.UpdateString("subSupplyType","1");
    jsonData.UpdateString("docType","INV");
    jsonData.UpdateString("docNo","AW1234-2");
    jsonData.UpdateString("docDate","05/04/2018");
    jsonData.UpdateString("fromGstin","09ABDC24212B1FK");
    jsonData.UpdateString("fromTrdName","willy");
    jsonData.UpdateString("fromAddr1","3RD CROSS NO 200  19  A");
    jsonData.UpdateString("fromAddr2","GROUND FLOOR OZZY ROAD");
    jsonData.UpdateString("fromPlace","BUSY TOWN");
    jsonData.UpdateNumber("fromPincode","640033");
    jsonData.UpdateNumber("actFromStateCode","05");
    jsonData.UpdateNumber("fromStateCode","05");
    jsonData.UpdateString("toGstin","01AAAASCC10BBBB");
    jsonData.UpdateString("toTrdName","mthustra");
    jsonData.UpdateString("toAddr1","Shrek Ogre");
    jsonData.UpdateString("toAddr2","Basadronsil");
    jsonData.UpdateString("toPlace","Grifl Blagar");
    jsonData.UpdateNumber("toPincode","699988");
    jsonData.UpdateNumber("actToStateCode","29");
    jsonData.UpdateNumber("toStateCode","02");
    jsonData.UpdateNumber("totalValue","5609889");
    jsonData.UpdateNumber("cgstValue","0");
    jsonData.UpdateNumber("sgstValue","0");
    jsonData.UpdateNumber("igstValue","168296.67");
    jsonData.UpdateNumber("cessValue","224395.56");
    jsonData.UpdateString("transporterId","09ABDC24212B1FK");
    jsonData.UpdateString("transporterName","");
    jsonData.UpdateString("transDocNo","12332");
    jsonData.UpdateNumber("transMode","1");
    jsonData.UpdateString("transDistance","656");
    jsonData.UpdateString("transDocDate","10/04/2018");
    jsonData.UpdateString("vehicleNo","PBN4567");
    jsonData.UpdateString("vehicleType","R");
    jsonData.put_I(0);
    jsonData.UpdateString("itemList[i].productName","Wheat");
    jsonData.UpdateString("itemList[i].productDesc","Wheat");
    jsonData.UpdateNumber("itemList[i].hsnCode","1001");
    jsonData.UpdateNumber("itemList[i].quantity","4");
    jsonData.UpdateString("itemList[i].qtyUnit","BOX");
    jsonData.UpdateNumber("itemList[i].cgstRate","0");
    jsonData.UpdateNumber("itemList[i].sgstRate","0");
    jsonData.UpdateNumber("itemList[i].igstRate","3");
    jsonData.UpdateNumber("itemList[i].cessRate","4");
    jsonData.UpdateNumber("itemList[i].cessAdvol","0");
    jsonData.UpdateNumber("itemList[i].taxableAmount","5609889");

    // The body of the HTTP POST will contain JSON that looks like this:
    // 	{
    // 	"action":"GENEWAYBILL",
    // 	"data": " iJiJGXq ... oUZp/25Y "
    // 	}

    // The "data" is the encrypted jsonData using our previously agreed-upon symmetric encryption key.
    // Let's begin build the JSON request body..
    CkJsonObject jsonRequestBody = new CkJsonObject();
    jsonRequestBody.UpdateString("action","GENEWAYBILL");

    // Setup the encryptor using the decryptedSek from the jsonAuth
    CkCrypt2 crypt = new CkCrypt2();
    crypt.put_CryptAlgorithm("aes");
    crypt.put_CipherMode("ecb");
    crypt.put_KeyLength(256);
    crypt.SetEncodedKey(jsonAuth.stringOf("decryptedSek"),"base64");
    crypt.put_EncodingMode("base64");

    // Encrypt the jsonData and add it to our JSON request body
    jsonRequestBody.UpdateString("data",crypt.encryptStringENC(jsonData.emit()));

    CkHttp http = new CkHttp();

    // Add the authtoken to the request header.
    // Be careful to be precise with uppercase/lowercase ("authtoken" vs "authToken")
    http.SetRequestHeader("authtoken",jsonAuth.stringOf("authToken"));
    http.SetRequestHeader("Gstin","09ABDC24212B1FK");
    http.put_Accept("application/json");

    // POST the request to generate an e-way bill:
    CkHttpResponse resp = new CkHttpResponse();
    success = http.HttpJson("POST","http://ewb.wepgst.com/api/EWayBill",jsonRequestBody,"application/json",resp);
    if (success == false) {
        Log.i(TAG, http.lastErrorText());
        return;
        }

    int respStatusCode = resp.get_StatusCode();
    Log.i(TAG, "response status code =" + String.valueOf(respStatusCode));
    Log.i(TAG, "response body:");
    Log.i(TAG, resp.bodyStr());

    if (respStatusCode != 200) {
        Log.i(TAG, "Failed in some unknown way.");
        return;
        }

    // When the response status code = 200, we'll have either
    // success response like this:
    //  {"status":"1","data":"..."}
    // 
    // or a failed response like this:
    // 
    // {"status":"0","error":"eyJlcnJvckNvZGVzIjoiMTA4In0="}

    // Load the response body into a JSON object.
    CkJsonObject json = new CkJsonObject();
    json.Load(resp.bodyStr());

    int status = json.IntOf("status");
    Log.i(TAG, "status = " + String.valueOf(status));

    if (status != 1) {
        // Failed.  Base64 decode the error
        // {"status":"0","error":"eyJlcnJvckNvZGVzIjoiMTA4In0="}
        // For an invalid password, the error is: {"errorCodes":"108"}
        CkStringBuilder sbError = new CkStringBuilder();
        json.StringOfSb("error",sbError);
        sbError.Decode("base64","utf-8");
        Log.i(TAG, "error: " + sbError.getAsString());
        return;
        }

    json.put_EmitCompact(false);
    Log.i(TAG, "JSON response:");
    Log.i(TAG, json.emit());

    CkBinData bdData = new CkBinData();
    bdData.AppendEncoded(json.stringOf("data"),"base64");
    crypt.DecryptBd(bdData);

    // Decrypts to 
    // {"ewayBillNo":331001121234,"ewayBillDate":"24/05/2018 04:38:00 PM","validUpto":"31/05/2018 11:59:00 PM"}

    CkJsonObject jsonBill = new CkJsonObject();
    jsonBill.Load(bdData.getString("utf-8"));

    int ewayBillNo = jsonBill.IntOf("ewayBillNo");
    Log.i(TAG, "ewayBillNo = " + String.valueOf(ewayBillNo));

    String ewayBillDate = jsonBill.stringOf("ewayBillDate");
    Log.i(TAG, "ewayBillDate = " + ewayBillDate);

    String validUpto = jsonBill.stringOf("validUpto");
    Log.i(TAG, "validUpto = " + validUpto);

    // Sample output:

    // ewayBillNo = 331001121234
    // ewayBillDate = 24/05/2018 04:55:00 PM
    // validUpto = 31/05/2018 11:59:00 PM

  }

  static {
      System.loadLibrary("chilkat");

      // Note: If the incorrect library name is passed to System.loadLibrary,
      // then you will see the following error message at application startup:
      //"The application <your-application-name> has stopped unexpectedly. Please try again."
  }
}