Thanks for the input Brian.
We don’t have a way to differentiate between a checkout canceled due to an invalid card swipe and an explicit cancel made by the user (using the back button).
Both checkouts are identical, example:
This is a Checkout canceled by swiping instead of using chip:
{
"id": "UKYYW10JBvcqO",
"amount_money": {
"amount": 100,
"currency": "USD"
},
"device_options": {
"device_id": "xxxxx",
"tip_settings": {
"allow_tipping": false
},
"skip_receipt_screen": false
},
"status": "CANCELED",
"created_at": "2020-08-01T19:57:24.292Z",
"updated_at": "2020-08-01T19:57:41.008Z",
"app_id": "xxxxxxxxx",
"deadline_duration": "PT1M",
"cancel_reason": "BUYER_CANCELED"
}
This is a Checkout canceled by tapping on the back button (buyer intentionally canceled)
{
"id": "fSSaVl7ndXqqO",
"amount_money": {
"amount": 100,
"currency": "USD"
},
"device_options": {
"device_id": "xxxxx",
"tip_settings": {
"allow_tipping": false
},
"skip_receipt_screen": false
},
"status": "CANCELED",
"created_at": "2020-08-01T19:59:04.483Z",
"updated_at": "2020-08-01T19:59:14.843Z",
"app_id": "sq0idp-xxxxx",
"deadline_duration": "PT1M",
"cancel_reason": "BUYER_CANCELED"
}
As you can see they are both identical, there is no way for us to detect the “soft” cancelation. We cannot simply trigger another checkout, because it could have been a legit cancelation.
We do provide feedback to the user in the kiosk screen, that’s really helpful for the customer, however in this case we cannot know for sure what the reason for the cancellation was.