Test your app-to-app integration
Overview
| Phase | Goal |
|---|---|
| 1 - Mock app | Build Intent integration on any Android device - no Peach Payments terminal required |
| 2 - UAT terminal | Test on Sunmi hardware with UAT Payment App |
| 3 - Production | Publish POS APK to Sunmi; Peach Payments enables on fleet |
Phase 1 - Mock Payments App (any Android device)
Use the Mock Payments App to develop and test your POS against simulated Payment App responses before you have a terminal.
- Download and install the Mock APK on any Android phone or tablet.
- Install your POS app on the same device.
- No UAT account required for mock-only development.
- No Maven registry token required - add
com.peach:intent_apifrom the public GitLab Maven repository.
Run through sale, refund, void, and lookup callbacks against the mock host.
Phase 2 - UAT terminal
- Request a UAT account and login PIN from support.
- Download and install the UAT Payment App APK on your Sunmi device.
- Install your POS app on the same terminal.
- Log in to the UAT Payment App with your PIN.
To run test (tap) payments, you should use the Visa CDET app, which creates virtual test cards on your phone.
UAT approval rules
| Amount | Result |
|---|---|
Round values (for example, R 100.00, R 50.00) | UAT approval |
Non-round values (for example, R 10.51) | Decline (emulator behaviour) |
These amounts apply unless you use a magic test amount, which overrides the round and non-round rules.
Use non-round amounts to test decline handling in your POS. For errors during failed flows, see Intent error codes.
Magic test amounts
| Amount | Expected behaviour |
|---|---|
50.05 ZAR (exact amount) | First a failed transaction, then an approved transaction |
Ends in .55 | An array of failed transactions |
Ends in .65 | Tap the card - first a failed transaction, then a successful transaction |
Ends in .51 | Declined sale |
Ends in .69 | Timeout - expect a failed transaction |
Suggested UAT test matrix
| Scenario | |
|---|---|
| ☐ | Sale - approved (round amount) |
| ☐ | Sale - declined (non-round amount) |
| ☐ | Sale - 50.05 ZAR - first failed, then approved transaction |
| ☐ | Sale - amount ending .55 - array of failed transactions |
| ☐ | Sale - amount ending .65, tap card - first failed, then successful transaction |
| ☐ | Sale - amount ending .51 - declined |
| ☐ | Sale - amount ending .69 - timeout, expect a failed transaction |
| ☐ | Sale - cancel before card tap |
| ☐ | Refund (if applicable) |
| ☐ | Partial refund |
| ☐ | Refund without a valid supervisor PIN |
| ☐ | Network loss before transaction completion |
| ☐ | Network loss after authorisation |
| ☐ | POS app crash |
| ☐ | Payment App closed before the successful screen |
| ☐ | Recovery / lastTransaction() |
| ☐ | Duplicate webhook delivery |
| ☐ | Full-day Reconciliation API recovery |
| ☐ | merchantTransactionId visible in Dashboard |
| ☐ | disableReceiptingOnOutcome auto-return to POS |
| ☐ | Webhook handling (if applicable) |
For each failure scenario, record whether the successful screen appears, which webhook is emitted, what the Reconciliation API returns, and whether a refund is required.
Phase 3 - production handoff
When the test matrix is complete, proceed to Deploy your POS app (Sunmi).
Peach Payments confirms readiness and enables your app on merchant terminals.
Updated 5 days ago