For integration details please see the main document here.
Here's an implementation for Visual Basic
Imports System.Net.Http
Imports System.Security.Cryptography
Imports System.Text
Imports Newtonsoft.Json
Imports Jose
Module ShipXGraphQLJWTExample
Sub Main()
' 1. Prepare GraphQL payload
Dim query As String = "query { me { id name } }"
Dim variables As Object = New With {}
Dim payload As String = JsonConvert.SerializeObject(New With {Key .query = query, Key .variables = variables})
' 2. Generate payloadHash (SHA256)
Dim sha256 As SHA256 = SHA256.Create()
Dim hashBytes As Byte() = sha256.ComputeHash(Encoding.UTF8.GetBytes(payload))
Dim payloadHash As String = BitConverter.ToString(hashBytes).Replace("-", "").ToLower()
' 3. Prepare JWT payload
Dim iat As Integer = CInt(DateTimeOffset.UtcNow.ToUnixTimeSeconds())
Dim exp As Integer = iat + 600 ' 10 minutes
Dim jwtPayload As New Dictionary(Of String, Object) From {
{"iat", iat},
{"exp", exp},
{"portalCompanyUuid", "your-portal-company-uuid"},
{"baseCompanyUuid", "your-base-company-uuid"},
{"payloadHash", payloadHash}
}
' 4. Sign JWT (using a shared secret for HMAC SHA256)
Dim secret As String = "your-secret-key"
Dim token As String = JWT.Encode(jwtPayload, Encoding.UTF8.GetBytes(secret), JwsAlgorithm.HS256)
' 5. Send HTTP request with Authorization header
Dim client As New HttpClient()
client.DefaultRequestHeaders.Add("Authorization", "Bearer " & token)
Dim content As New StringContent(payload, Encoding.UTF8, "application/json")
Dim response = client.PostAsync("https://shipx.cc/graphql", content).Result
Dim responseBody As String = response.Content.ReadAsStringAsync().Result
Console.WriteLine("Status: " & response.StatusCode)
Console.WriteLine("Response: " & responseBody)
End Sub
End ModuleNotes:
- You need the Jose.JWT and Newtonsoft.Json packages.
- Replace "your-portal-company-uuid", "your-base-company-uuid", and "your-secret-key" with your actual values.
- The JWT iat and exp are set as required.
- The JWT is included in the Authorization header as Bearer <token>.
- The GraphQL payload is sent as JSON in the request body.