Sample code for 30+ languages & platforms
B4X

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 B4X Downloads

B4X
Dim success As Boolean = 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

Dim jsonAuth As ChilkatJsonObject
jsonAuth.Initialize
success = jsonAuth.LoadFile("qa_data/tokens/ewayAuth.json")
If success = False Then
    Log(jsonAuth.LastErrorText)
    Return
End If


'  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
Dim jsonData As ChilkatJsonObject
jsonData.Initialize
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.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..
Dim jsonRequestBody As ChilkatJsonObject
jsonRequestBody.Initialize
jsonRequestBody.UpdateString("action", "GENEWAYBILL")

'  Setup the encryptor using the decryptedSek from the jsonAuth
Dim crypt As ChilkatCrypt2
crypt.Initialize("crypt")
crypt.CryptAlgorithm = "aes"
crypt.CipherMode = "ecb"
crypt.KeyLength = 256
crypt.SetEncodedKey(jsonAuth.StringOf("decryptedSek"), "base64")
crypt.EncodingMode = "base64"

'  Encrypt the jsonData and add it to our JSON request body
jsonRequestBody.UpdateString("data", crypt.EncryptStringENC(jsonData.Emit))

Dim http As ChilkatHttp
http.Initialize("http")

'  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.Accept = "application/json"

'  POST the request to generate an e-way bill:
Dim resp As ChilkatHttpResponse
resp.Initialize
success = http.HttpJson("POST", "http://ewb.wepgst.com/api/EWayBill", jsonRequestBody, "application/json", resp)
If success = False Then
    Log(http.LastErrorText)
    Return
End If


Dim respStatusCode As Int = resp.StatusCode
Log("response status code =" & respStatusCode)
Log("response body:")
Log(resp.BodyStr)

If respStatusCode <> 200 Then
    Log("Failed in some unknown way.")
    Return
End If


'  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.
Dim json As ChilkatJsonObject
json.Initialize
json.Load(resp.BodyStr)

Dim status As Int = json.IntOf("status")
Log("status = " & status)

If status <> 1 Then
    '  Failed.  Base64 decode the error
    '  {"status":"0","error":"eyJlcnJvckNvZGVzIjoiMTA4In0="}
    '  For an invalid password, the error is: {"errorCodes":"108"}
    Dim sbError As ChilkatStringBuilder
    sbError.Initialize
    json.StringOfSb("error", sbError)
    sbError.Decode("base64", "utf-8")
    Log("error: " & sbError.GetAsString)
    Return
End If


json.EmitCompact = False
Log("JSON response:")
Log(json.Emit)

Dim bdData As ChilkatBinData
bdData.Initialize
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"}

Dim jsonBill As ChilkatJsonObject
jsonBill.Initialize
jsonBill.Load(bdData.GetString("utf-8"))

Dim ewayBillNo As Int = jsonBill.IntOf("ewayBillNo")
Log("ewayBillNo = " & ewayBillNo)

Dim ewayBillDate As String = jsonBill.StringOf("ewayBillDate")
Log("ewayBillDate = " & ewayBillDate)

Dim validUpto As String = jsonBill.StringOf("validUpto")
Log("validUpto = " & validUpto)

'  Sample output:

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