Sample code for 30+ languages & platforms
PowerShell

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

PowerShell
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"

$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

$jsonAuth = New-Object Chilkat.JsonObject
$success = $jsonAuth.LoadFile("qa_data/tokens/ewayAuth.json")
if ($success -eq $false) {
    $($jsonAuth.LastErrorText)
    exit
}

# 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
$jsonData = New-Object Chilkat.JsonObject
$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..
$jsonRequestBody = New-Object Chilkat.JsonObject
$jsonRequestBody.UpdateString("action","GENEWAYBILL")

# Setup the encryptor using the decryptedSek from the jsonAuth
$crypt = New-Object Chilkat.Crypt2
$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()))

$http = New-Object Chilkat.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:
$resp = New-Object Chilkat.HttpResponse
$success = $http.HttpJson("POST","http://ewb.wepgst.com/api/EWayBill",$jsonRequestBody,"application/json",$resp)
if ($success -eq $false) {
    $($http.LastErrorText)
    exit
}

$respStatusCode = $resp.StatusCode
$("response status code =" + $respStatusCode)
$("response body:")
$($resp.BodyStr)

if ($respStatusCode -ne 200) {
    $("Failed in some unknown way.")
    exit
}

# 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.
$json = New-Object Chilkat.JsonObject
$json.Load($resp.BodyStr)

$status = $json.IntOf("status")
$("status = " + $status)

if ($status -ne 1) {
    # Failed.  Base64 decode the error
    # {"status":"0","error":"eyJlcnJvckNvZGVzIjoiMTA4In0="}
    # For an invalid password, the error is: {"errorCodes":"108"}
    $sbError = New-Object Chilkat.StringBuilder
    $json.StringOfSb("error",$sbError)
    $sbError.Decode("base64","utf-8")
    $("error: " + $sbError.GetAsString())
    exit
}

$json.EmitCompact = $false
$("JSON response:")
$($json.Emit())

$bdData = New-Object Chilkat.BinData
$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"}

$jsonBill = New-Object Chilkat.JsonObject
$jsonBill.Load($bdData.GetString("utf-8"))

$ewayBillNo = $jsonBill.IntOf("ewayBillNo")
$("ewayBillNo = " + $ewayBillNo)

$ewayBillDate = $jsonBill.StringOf("ewayBillDate")
$("ewayBillDate = " + $ewayBillDate)

$validUpto = $jsonBill.StringOf("validUpto")
$("validUpto = " + $validUpto)

# Sample output:

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