ACK Receipt Format (Verifiable Credential)
ACK Receipts are structured as Verifiable Credentials. This provides several benefits:- Standardization: Leverages the mature W3C VC data model.
- Cryptographic Security: Receipts are digitally signed by a trusted Receipt Service, ensuring authenticity and integrity.
- Interoperability: Can be processed and verified by any system understanding the VC data model.
- Selective Disclosure: Allows for future extensions where only specific parts of the receipt might be shared (though typically the full receipt is needed for payment verification).
Receipt Verification Process
When an ACK Receipt is presented by a Client Agent to a Server Agent (e.g., when retrying a request after payment), the Server performs these verification steps:1
Validate Signature
Verify the cryptographic signature (
proof) on the VC using the public key
associated with the issuer’s DID. This ensures the receipt hasn’t been
tampered with since issuance.2
Confirm Issuer Trust
Check if the
issuer DID (e.g., did:web:receipts.example.com) is present
in the Server’s configured list of trusted Receipt Services for the relevant
context or payment method.3
Check Revocation Status
Verify that the receipt has not been revoked by the issuer. This typically
involves checking a revocation mechanism specified by the Receipt Service
(e.g., querying a status list endpoint).
4
Verify Payment Details
Examine the claims within
credentialSubject.paymentRequestToken,
credentialSubject.paymentOptionId, and credentialSubject.metadata to
ensure they match the service requirements:-
Is the original
paymentRequestTokenvalid and correctly signed? -
Is the
paymentOptionIdvalid and matches an expected payment option? -
Is the
recipientcorrect (e.g., does it match the Server Agent’s expected identifier)? -
Is the
amount,currency, anddecimalssufficient for the requested service? -
Does the
idmatch the one originally issued (if applicable in a Server-Initiated flow)? -
Are the credential
issuanceDateand settlementtimestampvalues recent enough, or has the receipt potentially expired based on policy?