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