Sample code for 30+ languages & platforms
PowerBuilder

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

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_Pubkey
string ls_Password
oleobject loo_Rsa
string ls_EncPassword
oleobject loo_Prng
string ls_App_key
string ls_EncAppKey
oleobject loo_JsonBody
oleobject loo_Http
oleobject loo_Resp
integer li_RespStatusCode
oleobject loo_Json
integer li_Status
oleobject loo_SbError
string ls_AuthToken
oleobject loo_Crypt
oleobject loo_BdSek
oleobject loo_JsonEwayAuth
oleobject loo_Fac

li_Success = 0

// 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
loo_Pubkey = create oleobject
li_rc = loo_Pubkey.ConnectToNewObject("Chilkat.PublicKey")
if li_rc < 0 then
    destroy loo_Pubkey
    MessageBox("Error","Connecting to COM object failed")
    return
end if
li_Success = loo_Pubkey.LoadFromFile("qa_data/pem/eway_publickey.pem")
if li_Success = 0 then
    Write-Debug loo_Pubkey.LastErrorText
    destroy loo_Pubkey
    return
end if

// Encrypt the password using the RSA public key provided by eway..
ls_Password = "my_wepgst_password"
loo_Rsa = create oleobject
li_rc = loo_Rsa.ConnectToNewObject("Chilkat.Rsa")

loo_Rsa.Charset = "utf-8"
loo_Rsa.EncodingMode = "base64"

li_Success = loo_Rsa.UsePublicKey(loo_Pubkey)
if li_Success = 0 then
    Write-Debug loo_Rsa.LastErrorText
    destroy loo_Pubkey
    destroy loo_Rsa
    return
end if

// Returns the encrypted password as base64 (because the EncodingMode = "base64")
ls_EncPassword = loo_Rsa.EncryptStringENC(ls_Password,0)
if loo_Rsa.LastMethodSuccess = 0 then
    Write-Debug loo_Rsa.LastErrorText
    destroy loo_Pubkey
    destroy loo_Rsa
    return
end if

// 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.
loo_Prng = create oleobject
li_rc = loo_Prng.ConnectToNewObject("Chilkat.Prng")

// Generate a random string containing some numbers, uppercase, and lowercase.
ls_App_key = loo_Prng.RandomString(32,1,1,1)

Write-Debug "app_key = " + ls_App_key

// RSA encrypt the app_key.
ls_EncAppKey = loo_Rsa.EncryptStringENC(ls_App_key,0)
if loo_Rsa.LastMethodSuccess = 0 then
    Write-Debug loo_Rsa.LastErrorText
    destroy loo_Pubkey
    destroy loo_Rsa
    destroy loo_Prng
    return
end if

// Prepare the JSON body for the HTTP POST that gets the access token.
loo_JsonBody = create oleobject
li_rc = loo_JsonBody.ConnectToNewObject("Chilkat.JsonObject")

loo_JsonBody.UpdateString("action","ACCESSTOKEN")
// Use your username instead of "09ABDC24212B1FK".
loo_JsonBody.UpdateString("username","09ABDC24212B1FK")
loo_JsonBody.UpdateString("password",ls_EncPassword)
loo_JsonBody.UpdateString("app_key",ls_EncAppKey)

loo_Http = create oleobject
li_rc = loo_Http.ConnectToNewObject("Chilkat.Http")

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

// POST the JSON...
loo_Resp = create oleobject
li_rc = loo_Resp.ConnectToNewObject("Chilkat.HttpResponse")

li_Success = loo_Http.HttpJson("POST","http://ewb.wepgst.com/api/Authenticate",loo_JsonBody,"application/json",loo_Resp)
if li_Success = 0 then
    Write-Debug loo_Http.LastErrorText
    destroy loo_Pubkey
    destroy loo_Rsa
    destroy loo_Prng
    destroy loo_JsonBody
    destroy loo_Http
    destroy loo_Resp
    return
end if

li_RespStatusCode = loo_Resp.StatusCode
Write-Debug "response status code =" + string(li_RespStatusCode)
Write-Debug "response body:"
Write-Debug loo_Resp.BodyStr

if li_RespStatusCode <> 200 then
    Write-Debug "Failed in some unknown way."
    destroy loo_Pubkey
    destroy loo_Rsa
    destroy loo_Prng
    destroy loo_JsonBody
    destroy loo_Http
    destroy loo_Resp
    return
end if

// 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.
loo_Json = create oleobject
li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject")

loo_Json.Load(loo_Resp.BodyStr)

li_Status = loo_Json.IntOf("status")
Write-Debug "status = " + string(li_Status)

if li_Status <> 1 then
    // Failed.  Base64 decode the error
    // {"status":"0","error":"eyJlcnJvckNvZGVzIjoiMTA4In0="}
    // For an invalid password, the error is: {"errorCodes":"108"}
    loo_SbError = create oleobject
    li_rc = loo_SbError.ConnectToNewObject("Chilkat.StringBuilder")

    loo_Json.StringOfSb("error",loo_SbError)
    loo_SbError.Decode("base64","utf-8")
    Write-Debug "error: " + loo_SbError.GetAsString()
    destroy loo_Pubkey
    destroy loo_Rsa
    destroy loo_Prng
    destroy loo_JsonBody
    destroy loo_Http
    destroy loo_Resp
    destroy loo_Json
    destroy loo_SbError
    return
end if

// At this point, we know the request was entirely successful.
ls_AuthToken = loo_Json.StringOf("authtoken")

// Decrypt the sek key using our app_key.
loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2")

loo_Crypt.CryptAlgorithm = "aes"
loo_Crypt.CipherMode = "ecb"
loo_Crypt.KeyLength = 256
loo_Crypt.SetEncodedKey(ls_App_key,"us-ascii")
loo_Crypt.EncodingMode = "base64"

loo_BdSek = create oleobject
li_rc = loo_BdSek.ConnectToNewObject("Chilkat.BinData")

loo_BdSek.AppendEncoded(loo_Json.StringOf("sek"),"base64")
loo_Crypt.DecryptBd(loo_BdSek)

// 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.
loo_JsonEwayAuth = create oleobject
li_rc = loo_JsonEwayAuth.ConnectToNewObject("Chilkat.JsonObject")

loo_JsonEwayAuth.UpdateString("authToken",ls_AuthToken)
loo_JsonEwayAuth.UpdateString("decryptedSek",loo_BdSek.GetEncoded("base64"))
loo_JsonEwayAuth.EmitCompact = 0

loo_Fac = create oleobject
li_rc = loo_Fac.ConnectToNewObject("Chilkat.FileAccess")

loo_Fac.WriteEntireTextFile("qa_data/tokens/ewayAuth.json",loo_JsonEwayAuth.Emit(),"utf-8",0)

Write-Debug "Saved:"
Write-Debug loo_JsonEwayAuth.Emit()

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


destroy loo_Pubkey
destroy loo_Rsa
destroy loo_Prng
destroy loo_JsonBody
destroy loo_Http
destroy loo_Resp
destroy loo_Json
destroy loo_SbError
destroy loo_Crypt
destroy loo_BdSek
destroy loo_JsonEwayAuth
destroy loo_Fac