Zero balance anti-fraud and validations integration
This article details the call the Pismo platform makes to a Zero balance issuer during step 5 in the Full and zero balance workflows. Zero balance issuers need to do their own account and limit checks as well as anti-fraud checks.
Zero balance issuers need to register a webhook URL for this process during setup. This webhook enables you to send an authorization response to the request that is detailed in the Zero balance anti-fraud and validations request webhook specification.
Basic card validations failure
Note that this webhook is not called if an authorization fails the card checks that Pismo does. In that case, Pismo just responds to the network.
Below is the sample payload that the Pismo platform sends to the card issuer. The example contains some simulated information in the fields. The missing values depend on the type of authorization request the Pismo platform receives from the card network.
Sample payload
{
"id": "99999999-aaaa-aaaa-1111-1234567abcde",
"entity": "transaction",
"fields": {
"mti": "0100",
"card_id": 1,
"account_id": 1,
"amount_transaction": 10.10,
"amount_local": 10.10,
"amount_settlement": 2.05,
"transaction_timestamp": "2021-11-05T16:00:00",
"processing_code": "000000",
"payment_card_brand": "Mastercard",
"currency": "986",
"merchant_id_code": "599999000009999",
"merchant_name": "MERCHANT NAME ",
"merchant_city": "MERCHANT CITY ",
"merchant_state_or_country_code": "USA",
"merchant_terminal_id": "",
"atc_chip": "",
"atc_database": "",
"cvv_data": "",
"entry_mode": "10",
"mcc": "5942",
"card_type": "PLASTIC",
"country_code": "",
"chip_validation": true,
"postal_code": "99999999",
"chip_cryptogram_information_data": "",
"chip_transaction_date": "",
"chip_transaction_type": "",
"chip_amount_authorized": "",
"chip_transaction_currency_code": "",
"chip_application_interchange_profile": "",
"chip_terminal_country_code": "",
"chip_cardholder_verification_method": "",
"chip_terminal_capabilities": "",
"chip_amount_other": "",
"chip_application_transaction_counter": "",
"cardholder_postal_code": "",
"transaction_type": "00",
"nsu": "999999",
"retrieval_reference_number": "999919319999",
"authorization_code": "ABC123",
"response_code": "00",
"terminal_capability": "2",
"tvr": "",
"cvr": "",
"number_of_installments": 1,
"network_score": 0,
"pos_postal_code": "99999999",
"acquirer_code": "016205",
"denial_code": "",
"financial_network_code": "MRW",
"banknet_reference_number": "ZZZ999",
"network_transaction_data": "",
"original_network_data": {},
"cvv_presence": false,
"password_present": false,
"account_type": "00",
"validation_results": [{}]
}
}
The expected response from the card issuer for the approved transaction:
{
"is_approved":true,
"response_code":"00"
}
The expected response from the card issuer for the declined transaction:
{
"is_approved":false,
"response_code":"57",
"limit_amount":null
}
Balance inquiry for Zero balance clients
Zero balance customers have the option to check a customer's current available credit limit. If a Zero balance webhook request is made with processing code 30 (balance inquiry), then the response should include an available_credit_limit
object:
{
"is_approved": true,
"response_code": "00",
"available_credit_limit": {
"amount": 10.0,
"currency_code": 986
}
}
Visa partial authorization
Partial authorization addresses insufficient fund declines at the point-of-sale. It provides an alternative to a declined transaction when the available Visa card or account balance is not sufficient to approve a transaction in full. Instead of a decline, the transaction is approved for a portion of the original amount requested. The remainder of the transaction amount may then be paid by other means using split tender functionality, where applicable.
Partial authorization response
Set the following fields in the partial_approval_info
object in the authorization response:
local_amount
- Amount that was partially approved in the transaction's local currency.settlement_amount
- Amount that was partially approved in the reconciliation currency.cardholder_amount
- Amount that was partially approved in the cardholder's currency.
Example response
{
"is_approved": true,
"response_code": "10",
"limit_amount": null,
"partial_approval_info": {
"local_amount": 10.00,
"settlement_amount": 2.00,
"cardholder_amount": 8.50
}
}
Decimal place precision
The number of decimal places is according to ISO 3166-1 and ISO 4217. For example, the Brazilian real needs to be precise to two decimal places and the United States dollar needs to be precise to two decimal places. This applies only to the partial authorization response.
A response_code
= "10" means that the transaction was partially approved, and the issuer needs to return the approved amounts fields. When these fields aren't returned or the amounts are negative, Pismo returns the ZBD
custom field and response_code
= 96.
Updated 4 months ago