Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(AutoIt) Get E-way Bill System Access TokenSends a request to get an E-way bill system access token.
; 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") Local $bSuccess = $oPubkey.LoadFromFile("qa_data/pem/eway_publickey.pem") If ($bSuccess <> True) 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.ImportPublicKeyObj($oPubkey) If ($bSuccess <> True) 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 <> True) 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 <> True) 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... Local $oResp = $oHttp.PostJson2("http://ewb.wepgst.com/api/Authenticate","application/json",$oJsonBody.Emit()) If ($oHttp.LastMethodSuccess <> True) 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=" ; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.