Skip to main content

Deep Link transaction result redirect

After the user completes the steps in the banking app, Tingee automatically redirects the user back to the partner's app or website along with the transaction result.

Tingee appends the transaction result directly to redirectUrl as a query string.

Query Parameters​

The parameters appended to the redirect URL.

ParameterTypeDescription
amountnumberAmount in the transaction's QR code.
bankNamestringReceiving bank code (e.g. MBB).
bankBinstringReceiving bank BIN.
accountNumberstringRecipient account number.
contentstringTransfer description.
deepLinkStatusstringStatus: success, pending (processing), failed.
transactionDatenumberRedirect time (timestamp in ms).
clientIdstringPartner client ID.
signaturestringHMAC SHA512 signature that ensures the data has not been tampered with.

Verification rules​

For security, the partner must verify the received signature. The signature is generated as follows:

  1. Take all URL parameters (except signature), with amount and transactionDate as numbers and the remaining parameters as strings.
  2. Sort the keys alphabetically and serialize them to a JSON string (no whitespace, no escaping of unicode characters or /). Example: {"accountNumber":"0123456789","amount":100000,"bankBin":"970422","bankName":"MBB","clientId":"YOUR_CLIENT_ID","content":"Thanh toan don hang","deepLinkStatus":"success","transactionDate":1736930449000}.
  3. Sign that JSON string with HMAC SHA512 using the partner's secretKey; the result is hex-encoded.

Verification code samples​

import { createHmac } from 'crypto';

function verifySignature(query: Record<string, string>, secretKey: string): boolean {
const { signature, ...data } = query;

// Sort keys alphabetically; amount and transactionDate are numbers
const sorted: Record<string, any> = {};
for (const key of Object.keys(data).sort()) {
sorted[key] = key === 'amount' || key === 'transactionDate' ? Number(data[key]) : data[key];
}

const computedSig = createHmac('sha512', secretKey)
.update(JSON.stringify(sorted))
.digest('hex');

return computedSig === signature;
}

Sample redirect URL​

Tingee redirects the user to the following URL:

https://partner.vn/callback?deepLinkStatus=success&transactionDate=1736930449000&clientId=YOUR_CLIENT_ID&amount=100000&bankName=MBB&bankBin=970422&accountNumber=0123456789&content=Thanh%20toan%20don%20hang&signature=91a2a8b7d...

Important notes
  • If your original redirectUrl already contains a query string, Tingee automatically adds & so that your existing URL structure is not broken.
  • Always check the deepLinkStatus field to know whether the transaction succeeded or failed before continuing your business logic.
  • We recommend logging the full callback URL for auditing when needed.