Sample code for 30+ languages & platforms
AutoIt

Get E-way Bill System Access Token

See more HTTP Misc Examples

Sends a request to get an E-way bill system access token.

Chilkat AutoIt Downloads

AutoIt
Local $bSuccess = False

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

; First load the public key provided by the E-way bill System
$oPubkey = ObjCreate("Chilkat.PublicKey")
$bSuccess = $oPubkey.LoadFromFile("qa_data/pem/eway_publickey.pem")
If ($bSuccess = False) Then
    ConsoleWrite($oPubkey.LastErrorText & @CRLF)
    Exit
EndIf

; Encrypt the password using the RSA public key provided by eway..
Local $sPassword = "my_wepgst_password"
$oRsa = ObjCreate("Chilkat.Rsa")
$oRsa.Charset = "utf-8"
$oRsa.EncodingMode = "base64"

$bSuccess = $oRsa.UsePublicKey($oPubkey)
If ($bSuccess = False) Then
    ConsoleWrite($oRsa.LastErrorText & @CRLF)
    Exit
EndIf

; Returns the encrypted password as base64 (because the EncodingMode = "base64")
Local $sEncPassword = $oRsa.EncryptStringENC($sPassword,False)
If ($oRsa.LastMethodSuccess = False) Then
    ConsoleWrite($oRsa.LastErrorText & @CRLF)
    Exit
EndIf

; Generate a random app_key.  This should be 32 bytes (us-ascii chars)
; We need 32 bytes because we'll be doing 256-bit AES ECB encryption, and 32 bytes = 256 bits.
$oPrng = ObjCreate("Chilkat.Prng")
; Generate a random string containing some numbers, uppercase, and lowercase.
Local $sApp_key = $oPrng.RandomString(32,True,True,True)

ConsoleWrite("app_key = " & $sApp_key & @CRLF)

; RSA encrypt the app_key.
Local $sEncAppKey = $oRsa.EncryptStringENC($sApp_key,False)
If ($oRsa.LastMethodSuccess = False) Then
    ConsoleWrite($oRsa.LastErrorText & @CRLF)
    Exit
EndIf

; Prepare the JSON body for the HTTP POST that gets the access token.
$oJsonBody = ObjCreate("Chilkat.JsonObject")
$oJsonBody.UpdateString("action","ACCESSTOKEN")
; Use your username instead of "09ABDC24212B1FK".
$oJsonBody.UpdateString("username","09ABDC24212B1FK")
$oJsonBody.UpdateString("password",$sEncPassword)
$oJsonBody.UpdateString("app_key",$sEncAppKey)

$oHttp = ObjCreate("Chilkat.Http")

; Add required headers.
; Use your ewb-user-id instead of "03AEXPR16A9M010"
$oHttp.SetRequestHeader "ewb-user-id","03AEXPR16A9M010"
; The Gstin should be the same as the username in the jsonBody above.
$oHttp.SetRequestHeader "Gstin","09ABDC24212B1FK"
$oHttp.Accept = "application/json"

; POST the JSON...
$oResp = ObjCreate("Chilkat.HttpResponse")
$bSuccess = $oHttp.HttpJson("POST","http://ewb.wepgst.com/api/Authenticate",$oJsonBody,"application/json",$oResp)
If ($bSuccess = False) Then
    ConsoleWrite($oHttp.LastErrorText & @CRLF)
    Exit
EndIf

Local $iRespStatusCode = $oResp.StatusCode
ConsoleWrite("response status code =" & $iRespStatusCode & @CRLF)
ConsoleWrite("response body:" & @CRLF)
ConsoleWrite($oResp.BodyStr & @CRLF)

If ($iRespStatusCode <> 200) Then
    ConsoleWrite("Failed in some unknown way." & @CRLF)
    Exit
EndIf

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

; Load the response body into a JSON object.
$oJson = ObjCreate("Chilkat.JsonObject")
$oJson.Load($oResp.BodyStr)

Local $iStatus = $oJson.IntOf("status")
ConsoleWrite("status = " & $iStatus & @CRLF)

If ($iStatus <> 1) Then
    ; Failed.  Base64 decode the error
    ; {"status":"0","error":"eyJlcnJvckNvZGVzIjoiMTA4In0="}
    ; For an invalid password, the error is: {"errorCodes":"108"}
    $oSbError = ObjCreate("Chilkat.StringBuilder")
    $oJson.StringOfSb("error",$oSbError)
    $oSbError.Decode("base64","utf-8")
    ConsoleWrite("error: " & $oSbError.GetAsString() & @CRLF)
    Exit
EndIf

; At this point, we know the request was entirely successful.
Local $sAuthToken = $oJson.StringOf("authtoken")

; Decrypt the sek key using our app_key.
$oCrypt = ObjCreate("Chilkat.Crypt2")
$oCrypt.CryptAlgorithm = "aes"
$oCrypt.CipherMode = "ecb"
$oCrypt.KeyLength = 256
$oCrypt.SetEncodedKey $sApp_key,"us-ascii"
$oCrypt.EncodingMode = "base64"

$oBdSek = ObjCreate("Chilkat.BinData")
$oBdSek.AppendEncoded($oJson.StringOf("sek"),"base64")
$oCrypt.DecryptBd($oBdSek)

; bdSek now contains the decrypted symmetric encryption key...
; We'll use it to encrypt the JSON payloads we send.

; Let's persist our authtoken and decrypted sek (symmetric encryption key).
; To send EWAY requests (such as to create an e-way bill), we'll just load 
; and use these pre-obtained credentials.
$oJsonEwayAuth = ObjCreate("Chilkat.JsonObject")
$oJsonEwayAuth.UpdateString("authToken",$sAuthToken)
$oJsonEwayAuth.UpdateString("decryptedSek",$oBdSek.GetEncoded("base64"))
$oJsonEwayAuth.EmitCompact = False

$oFac = ObjCreate("Chilkat.FileAccess")
$oFac.WriteEntireTextFile("qa_data/tokens/ewayAuth.json",$oJsonEwayAuth.Emit(),"utf-8",False)

ConsoleWrite("Saved:" & @CRLF)
ConsoleWrite($oJsonEwayAuth.Emit() & @CRLF)

; Sample output:
; {
;   "authToken": "IBTeFtxNfVurg71LTzZ2r0xK7",
;   "decryptedSek": "5g1TyTie7yoslU3DrbYATa7mWyPazlODE7cEh5Vy4Ho="
;