Code Sample: Decrypting a Webhook Payload
The Webhook data payload is encrypted for security purposes, and it can be decrypted using accessToken
below:
Javascript
NPM Package: https://www.npmjs.com/package/jsonwebtoken
Sample code
import jwt from "jsonwebtoken";
const webhookData = "eyJhbGciOiJIUzI1NiJ9.eyJ3ZWJob29rRGF0YSI6eyJpZCI6ImUxOTNkNGQ0LTYzOWUtNDYwYS04YmFmLWQyN2Y0YjY4Yjg4MSIsIndhbGxldEFkZHJlc3MiOiIweEQ5MDJkN2VCRjdiYzVlQ2E5RUVBMjJhNkVlOUYxQTMwRUJlQkVGZUUiLCJjcmVhdGVkQXQiOiIyMDI0LTA1LTA3VDExOjA5OjIwLjIxM1oiLCJzdGF0dXMiOiJBV0FJVElOR19QQVlNRU5UX0ZST01fVVNFUiIsImZpYXRDdXJyZW5jeSI6IkdCUCIsInVzZXJJZCI6IjcyNmQ5MTQ0LWRjOTctNDUxZS05YjkxLTk4ZWE0YzE0MGU1YyIsImNyeXB0b0N1cnJlbmN5IjoiRVRIIiwiaXNCdXlPclNlbGwiOiJCVVkiLCJmaWF0QW1vdW50Ijo1MywiaXBBZGRyZXNzIjoiMzUuMTc3LjE1OC45IiwiYW1vdW50UGFpZCI6MCwicGF5bWVudE9wdGlvbklkIjoiZ2JwX2JhbmtfdHJhbnNmZXIiLCJ3YWxsZXRMaW5rIjoiaHR0cHM6Ly9zZXBvbGlhLmV0aGVyc2Nhbi5pby9hZGRyZXNzLzB4RDkwMmQ3ZUJGN2JjNWVDYTlFRUEyMmE2RWU5RjFBMzBFQmVCRUZlRSIsInF1b3RlSWQiOiI4MDNhNzY2OS00YWNlLTRhNGYtYTM3My05Y2QzOWYwOGQzNzMiLCJvcmRlclByb2Nlc3NpbmdUeXBlIjoiTk9STUFMIiwiYWRkcmVzc0FkZGl0aW9uYWxEYXRhIjpmYWxzZSwibmV0d29yayI6ImV0aGVyZXVtIiwiY29udmVyc2lvblByaWNlIjowLjAwMDQwMjcxNTMwNTcwMzc1NywiY3J5cHRvQW1vdW50IjowLjAxOTAyMDI0LCJ0b3RhbEZlZUluRmlhdCI6NS43NywiZmlhdEFtb3VudEluVXNkIjo2Ni40NSwiY291bnRyeUNvZGUiOiJGUiIsInN0YXRlQ29kZSI6IkZyYW5jZSIsInVzZXJLeWNUeXBlIjoiU1RBTkRBUkQiLCJjYXJkUGF5bWVudERhdGEiOnsib3JkZXJJZCI6ImUxOTNkNGQ0LTYzOWUtNDYwYS04YmFmLWQyN2Y0YjY4Yjg4MSIsInBheW1lbnRJZCI6IjY2M2EwYmUxOTIwMTE4NmFjYjYyY2ZhMCIsInBnRGF0YSI6eyJwYXltZW50T3B0aW9ucyI6W3siY3VycmVuY3kiOiJHQlAiLCJpZCI6ImdicF9iYW5rX3RyYW5zZmVyIiwibmFtZSI6IkJhbmsgVHJhbnNmZXIgRGV0YWlscyIsImZpZWxkcyI6W3sibmFtZSI6Ik5hbWUiLCJ2YWx1ZSI6IlRyYW5zYWsgTGltaXRlZCJ9LHsibmFtZSI6IkFjY291bnQgIyIsInZhbHVlIjoiMDM3NjU4MzEifSx7Im5hbWUiOiJTb3J0IENvZGUiLCJ2YWx1ZSI6IjAwMDAwMCJ9LHsibmFtZSI6IkJhbmsiLCJ2YWx1ZSI6Ik1vZHVsciJ9LHsibmFtZSI6IkFkZHJlc3MiLCJ2YWx1ZSI6IlNjYWxlIFNwYWNlLCA1OCBXb29kIExhbmUsIExvbmRvbiwgVzEyIDdSWiJ9XX1dLCJsaXF1aWRpdHlQcm92aWRlciI6Ik1PRFVMUiIsInN0YXR1cyI6IkNSRUFURUQifSwibGlxdWlkaXR5UHJvdmlkZXIiOiJNT0RVTFIiLCJ1cGRhdGVkQXQiOiIyMDI0LTA1LTA3VDExOjA5OjIyLjA0MloifSwiY29udmVyc2lvblByaWNlRGF0YSI6eyJfaWQiOiI0OGFjY2Y1YS0wNzIyLTQxNDEtYTNjMi05OThiYWY4NTI5YjciLCJpZCI6IjQ4YWNjZjVhLTA3MjItNDE0MS1hM2MyLTk5OGJhZjg1MjliNyIsImNyZWF0ZWRBdCI6IjIwMjQtMDUtMDdUMTE6MDk6MjAuMTgzWiIsImZpYXRDdXJyZW5jeSI6IkdCUCIsImNyeXB0b0N1cnJlbmN5IjoiRVRIIiwicGF5bWVudE1ldGhvZCI6ImdicF9iYW5rX3RyYW5zZmVyIiwiZmlhdEFtb3VudCI6NTMsIm5ldHdvcmsiOiJldGhlcmV1bSIsImNyeXB0b0Ftb3VudCI6MC4wMTkwMjAyNCwiaXNCdXlPclNlbGwiOiJCVVkiLCJjb252ZXJzaW9uUHJpY2UiOjAuMDAwNDAyNzE1MzA1NzAzNzU3LCJtYXJrZXRDb252ZXJzaW9uUHJpY2UiOjAuMDAwNDA0NzgzNzI5ODc5MTk4LCJzbGlwcGFnZSI6MC41MSwiY3J5cHRvTGlxdWlkaXR5UHJvdmlkZXIiOiJ0cmFuc2FrIiwiZmlhdExpcXVpZGl0eVByb3ZpZGVyIjoiY29pbmJhc2UiLCJwYXJ0bmVyQXBpS2V5IjoiZDc5NjcxYTQtYjAyMS00YTRmLWE0NDQtNjg2MmE2ODBhOTRiIiwic291cmNlVG9rZW5BbW91bnQiOjAuMDE5MDIwMjQzODg4Mzg4NDQ1LCJzb3VyY2VUb2tlbiI6IkVUSCIsIm5vdGVzIjpbXSwiZmlhdEZlZUFtb3VudCI6NS43NywiZmVlRGVjaW1hbCI6MC4xMDg4Njc5MjQ1MjgzMDE4OCwic3dhcHMiOlt7InNvdXJjZUN1cnJlbmN5IjoiR0JQIiwiZGVzdGluYXRpb25DdXJyZW5jeSI6IlVTRFQiLCJzb3VyY2VBbW91bnQiOjUzLCJkZXN0aW5hdGlvbkFtb3VudCI6NjYuNDUzNTk5MjU3MzQyMTgsInBheW1lbnRNZXRob2QiOiJnYnBfYmFua190cmFuc2ZlciIsImxpcXVpZGl0eVByb3ZpZGVyIjoiY29pbmJhc2UiLCJjb252ZXJzaW9uUHJpY2UiOjEuMjUzODQxNDk1NDIxNTUwNCwiZmVlSW5Tb3VyY2VBbW91bnQiOjAsIm5ldHdvcmtGZWVJblNvdXJjZUFtb3VudCI6MCwibWFya2V0Q29udmVyc2lvblByaWNlIjoxLjI1Mzg0MTQ5NTQyMTU1MDQsImlzTm9uQ3VzdG9kaWFsIjpmYWxzZSwiaXNGaWF0bGlxdWlkaXR5UHJvdmlkZXIiOnRydWUsImlzRmlhdFBhcnRuZXJEaXJlY3RDcnlwdG9EZXBvc2l0IjpmYWxzZSwiaXNGaWF0UGFydG5lckFjY291bnRXYWxsZXREZXBvc2l0IjpmYWxzZSwibGlxdWlkaXR5UHJvdmlkZXJEYXRhIjpmYWxzZSwib3JpZ2luYWxEZXN0aW5hdGlvbkFtb3VudCI6NjYuNDUzNTk5MjU3MzQyMTh9LHsic291cmNlQ3VycmVuY3kiOiJVU0RUIiwiZGVzdGluYXRpb25DdXJyZW5jeSI6IkVUSCIsInNvdXJjZUFtb3VudCI6NjYuNDUzNTk5MjU3MzQyMTgsImRlc3RpbmF0aW9uQW1vdW50IjowLjAyMTM0MzkxMTIwMjI5OTEyMiwibGlxdWlkaXR5UHJvdmlkZXIiOiJ0cmFuc2FrIiwiY29udmVyc2lvblByaWNlIjowLjAwMDMyMTE4NTE3OTQ0NTk1NjQsIm5ldHdvcmtGZWVJblNvdXJjZUFtb3VudCI6MCwibmV0d29ya0ZlZUluRGVzdGluYXRpb25BbW91bnQiOjAsIm1hcmtldENvbnZlcnNpb25QcmljZSI6MC4wMDAzMjExODUxNzk0NDU5NTY0LCJsaXF1aWRpdHlQcm92aWRlckRhdGEiOmZhbHNlLCJpc05vbkN1c3RvZGlhbCI6ZmFsc2V9LHsic291cmNlQ3VycmVuY3kiOiJFVEgiLCJkZXN0aW5hdGlvbkN1cnJlbmN5IjoiRVRIIiwic291cmNlQW1vdW50IjowLjAyMTM0MzkxMTIwMjI5OTEyMiwiZGVzdGluYXRpb25BbW91bnQiOjAuMDIxMzQzOTExMjAyMjk5MTIyLCJsaXF1aWRpdHlQcm92aWRlciI6InRyYW5zYWsiLCJjb252ZXJzaW9uUHJpY2UiOjEsImlzQ3J5cHRvbGlxdWlkaXR5UHJvdmlkZXIiOnRydWUsIm5ldHdvcmtGZWVJblNvdXJjZUFtb3VudCI6MC4wMDE0OTIzNSwibmV0d29ya0ZlZUluRGVzdGluYXRpb25BbW91bnQiOjAuMDAxNDkyMzUsIm1hcmtldENvbnZlcnNpb25QcmljZSI6MSwibGlxdWlkaXR5UHJvdmlkZXJEYXRhIjpmYWxzZSwiaXNGaWF0UGFydG5lckFjY291bnRXYWxsZXREZXBvc2l0IjpmYWxzZX1dLCJmZWVzIjpbeyJuYW1lIjoiTmV0d29yay9FeGNoYW5nZSBmZWUiLCJ2YWx1ZSI6My43MSwiaWQiOiJuZXR3b3JrX2ZlZSIsImlkcyI6WyJuZXR3b3JrX2ZlZSJdfSx7Im5hbWUiOiJUcmFuc2FrIGZlZSIsInZhbHVlIjoyLjA2LCJpZCI6InRyYW5zYWtfZmVlIiwiaWRzIjpbInRyYW5zYWtfZmVlIiwicGFydG5lcl9mZWUiXX1dLCJmaWF0QW1vdW50SW5Vc2QiOjY2LjQ1LCJpbnRlcm5hbEZlZXMiOlt7Im5hbWUiOiJOZXR3b3JrL0V4Y2hhbmdlIGZlZSIsImlkIjoibmV0d29ya19mZWUiLCJ2YWx1ZSI6My43MX0seyJuYW1lIjoiVHJhbnNhayBmZWUiLCJpZCI6InRyYW5zYWtfZmVlIiwidmFsdWUiOjF9LHsibmFtZSI6IlRyYW5zYWsgZmVlIiwiaWQiOiJwYXJ0bmVyX2ZlZSIsInZhbHVlIjoxLjA2fV0sImNvc3QiOnsiZXRoUHJpY2VJbkxvY2FsQ3VycmVuY3kiOjI0NzAuNDU1MDI2MTksImdhc0Nvc3RpbkxvY2FsQ3VycmVuY3kiOjMuNzA1NjgyNTM5Mjg0OTk5NywidHJhbnNha01pbmltdW1GZWUiOjEsInRyYW5zYWtGZWVBbW91bnQiOjEsImZpYXRMaXF1aWRpdHlQcm92aWRlckZlZSI6MCwiZ2FzQ29zdGluTG9jYWxDdXJyZW5jeUJ5RmlhdFBhcnRuZXIiOjAsImdhc0Nvc3RpbkxvY2FsQ3VycmVuY3lCeUNyeXB0b1BhcnRuZXIiOjAsInBhcnRuZXJGZWVEZWNpbWFsIjowLjAyLCJwYXJ0bmVyRmVlSW5Mb2NhbEN1cnJlbmN5IjoxLjA2LCJ0b3RhbEZlZURlY2ltYWwiOjAuMTA4ODY3OTI0NTI4MzAxODgsInRvdGFsRmVlQW1vdW50Ijo1Ljc3LCJnYXNDdXJyZW5jeSI6IkVUSCIsImdhc0luTmF0aXZlVG9rZW4iOjAuMDAxNSwiZ2FzQ3VycmVuY3lSYXRlSW5Vc2QiOjAuMDAwMzIyODMxNjIwNzExNTg1NDcsInRvdGFsQW1vdW50Q2hhcmdlZEJ5VHJhbnNhayI6NS43NjU2ODI1MzkyODUwMDF9fSwicGFydG5lckZlZUluTG9jYWxDdXJyZW5jeSI6MS4wNiwic3RhdHVzSGlzdG9yaWVzIjpbXX0sImV2ZW50SUQiOiJPUkRFUl9DUkVBVEVEIiwiY3JlYXRlZEF0IjoiMjAyNC0wNS0wN1QxMTowOToyMi4wOTFaIn0.W07qJG6jlyzid-JrnY7G4CsUOqk8wtcvfrdygGzt5N4";
const accessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBUElfS0VZIjoiZDc5NjcxYTQtYjAyMS00YTRmLWE0NDQtNjg2MmE2ODBhOTRiIiwiaWF0IjoxNzE1MDgxMzI1LCJleHAiOjE3MTU2ODYxMjV9.NJw7DRIpYZnT2N5pLDkGzd1jybIim_1VWtu930xba7s";
const decodedData = jwt.verify(webhookData, accessToken);
console.log(decodedData);
Java
dependencies {
// Other dependencies...
// JWT dependencies
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
}
<dependencies>
<!-- Other dependencies... -->
<!-- JWT dependencies -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.5</version>
</dependency>
</dependencies>
Sample code
package com.transak.webhookjavamaven;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import javax.crypto.SecretKey;
public class WebhookJavaMavenApplication {
public static void main(String[] args) {
String secret = "REFRESH_ACCESS_TOKEN";
String jwt = "data field in the Webhook Response";
// Decode the secret
SecretKey key = Keys.hmacShaKeyFor(secret.getBytes());
// Parse the JWT
Claims claims = Jwts.parserBuilder()
.setSigningKey(key)
.build()
.parseClaimsJws(jwt)
.getBody();
// Output the claims
System.out.println("Claims: " + claims);
}
}
Sample decrypted payload data
{
"webhookData": {
"id": "181b6159-2192-4f68-8647-f48e6e8f58c7",
"walletAddress": "0xD902d7eBF7bc5eCa9EEA22a6Ee9F1A30EBeBEFeE",
"createdAt": "2024-08-23T10:33:09.426Z",
"status": "COMPLETED",
"fiatCurrency": "EUR",
"userId": "243a8ce2-9cc6-41a9-aaeb-b0deeb0b19a3",
"cryptoCurrency": "ETH",
"isBuyOrSell": "BUY",
"fiatAmount": 32,
"ipAddress": "35.177.158.9",
"amountPaid": 32,
"paymentOptionId": "sepa_bank_transfer",
"walletLink": "https://sepolia.etherscan.io/address/0xD902d7eBF7bc5eCa9EEA22a6Ee9F1A30EBeBEFeE",
"quoteId": "0b9edf4d-2de1-4f2e-bdb6-07bc61c380f5",
"orderProcessingType": "NORMAL",
"addressAdditionalData": false,
"network": "ethereum",
"conversionPrice": 0.00041416655266757863,
"cryptoAmount": 0.01211023,
"totalFeeInFiat": 2.76,
"fiatAmountInUsd": 35.57,
"countryCode": "IN",
"stateCode": "Karnataka",
"orderChannelType": "WIDGET",
"userKycType": "STANDARD",
"cardPaymentData": {
"orderId": "181b6159-2192-4f68-8647-f48e6e8f58c7",
"paymentId": "66c8656bb38a7908fadc77db",
"pgData": {
"paymentOptions": [
{
"currency": "EUR",
"id": "sepa_bank_transfer",
"name": "Bank Transfer Details",
"fields": [
{
"name": "Bank Name",
"value": "Transak Limited"
},
{
"name": "IBAN",
"value": "GB69MOCK00000003743944"
},
{
"name": "Bank Name",
"value": "Modulr"
},
{
"name": "Bank Address",
"value": "Scale Space, 58 Wood Lane, London, W12 7RZ"
}
]
}
],
"liquidityProvider": "MODULR",
"status": "CREATED"
},
"liquidityProvider": "MODULR",
"updatedAt": "2024-08-23T10:33:58.753Z",
"status": "CAPTURED",
"processedOn": "2024-08-23T10:33:57.000Z"
},
"statusHistories": [
{
"status": "PENDING_DELIVERY_FROM_TRANSAK",
"createdAt": "2024-08-23T10:33:59.408Z",
"message": "*๐ธ Payment reconciled successfully. Received 32 EUR",
"isEmailSentToUser": false,
"partnerEventId": "ORDER_PROCESSING"
}
],
"isFirstOrder": false,
"updatedAt": "2024-08-23T10:34:06.371Z",
"completedAt": "2024-08-23T10:34:39.412Z",
"transactionHash": "DUMMY_TX_ID",
"transactionLink": "https://sepolia.etherscan.io/tx/DUMMY_TX_ID",
"conversionPriceData": {
"_id": "139474c7-99c5-4232-9a05-c6ccd6a973ed",
"id": "139474c7-99c5-4232-9a05-c6ccd6a973ed",
"createdAt": "2024-08-23T10:34:06.352Z",
"fiatCurrency": "EUR",
"cryptoCurrency": "ETH",
"paymentMethod": "sepa_bank_transfer",
"fiatAmount": 32,
"network": "ethereum",
"cryptoAmount": 0.01211023,
"isBuyOrSell": "BUY",
"conversionPrice": 0.00041416641727771563,
"marketConversionPrice": 0.00041628949369556297,
"slippage": 0.51,
"cryptoLiquidityProvider": "transak",
"fiatLiquidityProvider": "coinbase",
"partnerApiKey": "d79671a4-b021-4a4f-a444-6862a680a94b",
"sourceTokenAmount": 0.012110226041200406,
"sourceToken": "ETH",
"notes": [],
"fiatFeeAmount": 2.76,
"feeDecimal": 0.08625,
"swaps": [
{
"sourceCurrency": "EUR",
"destinationCurrency": "USDT",
"sourceAmount": 32,
"destinationAmount": 35.57563545494966,
"paymentMethod": "sepa_bank_transfer",
"liquidityProvider": "coinbase",
"conversionPrice": 1.111738607967177,
"feeInSourceAmount": 0,
"networkFeeInSourceAmount": 0,
"marketConversionPrice": 1.111738607967177,
"isNonCustodial": false,
"isFiatliquidityProvider": true,
"isFiatPartnerDirectCryptoDeposit": false,
"isFiatPartnerAccountWalletDeposit": false,
"liquidityProviderData": false,
"originalDestinationAmount": 35.57563545494966
},
{
"sourceCurrency": "USDT",
"destinationCurrency": "ETH",
"sourceAmount": 35.57563545494966,
"destinationAmount": 0.0132533253528869,
"liquidityProvider": "transak",
"conversionPrice": 0.0003725393849863884,
"networkFeeInSourceAmount": 0,
"networkFeeInDestinationAmount": 0,
"marketConversionPrice": 0.0003725393849863884,
"liquidityProviderData": false,
"isNonCustodial": false
},
{
"sourceCurrency": "ETH",
"destinationCurrency": "ETH",
"sourceAmount": 0.0132533253528869,
"destinationAmount": 0.0132533253528869,
"liquidityProvider": "transak",
"conversionPrice": 1,
"isCryptoliquidityProvider": true,
"networkFeeInSourceAmount": 0.000067651170404,
"networkFeeInDestinationAmount": 0.000067651170404,
"marketConversionPrice": 1,
"liquidityProviderData": false,
"isFiatPartnerAccountWalletDeposit": false
}
],
"fees": [
{
"name": "Transak fee",
"value": 2.6,
"id": "transak_fee",
"ids": [
"transak_fee",
"partner_fee"
]
},
{
"name": "Network/Exchange fee",
"value": 0.16,
"id": "network_fee",
"ids": [
"network_fee"
]
}
],
"fiatAmountInUsd": 35.57,
"internalFees": [
{
"name": "Network/Exchange fee",
"id": "network_fee",
"value": 0.16
},
{
"name": "Transak fee",
"id": "transak_fee",
"value": 1
},
{
"name": "Transak fee",
"id": "partner_fee",
"value": 1.6
}
],
"cost": {
"ethPriceInLocalCurrency": 2402.17448469,
"gasCostinLocalCurrency": 0.16334786495892,
"transakMinimumFee": 1,
"transakFeeAmount": 1,
"fiatLiquidityProviderFee": 0,
"gasCostinLocalCurrencyByFiatPartner": 0,
"gasCostinLocalCurrencyByCryptoPartner": 0,
"partnerFeeDecimal": 0.05,
"partnerFeeInLocalCurrency": 1.6,
"totalFeeDecimal": 0.08625,
"totalFeeAmount": 2.76,
"gasCurrency": "ETH",
"gasInNativeToken": 0.000068,
"gasCurrencyRateInUsd": 0.0003744603090795391,
"totalAmountChargedByTransak": 2.76334786495892
}
},
"partnerFeeInLocalCurrency": 1.6
},
"eventID": "ORDER_COMPLETED",
"createdAt": "2024-08-23T10:34:40.070Z"
}
Updated about 1 month ago