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 Module


Notes:

  • 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.