Transactions & Refunds
Every x402 order — successful, failed, or expired — shows up on the Transactions page inside the AIOT Payments app. From there you can drill into a single order and, if needed, issue a refund.
Finding a transaction
Open Apps → AIOT Payments → Transactions. Each row shows:
- Shopify order name (e.g.
#1042) — links to the order in your Shopify admin - Shopify customer email
- Fiat total (the price the shopper saw at checkout)
- USDC amount (what landed in your wallet)
- Transaction hash (links to BscScan)
- Status pill:
completed,failed,expired,pending - Timestamp
Screenshot:
/screenshots/transactions.png— the Transactions list with mixed statuses. (Placeholder; awaiting live capture.)
Filtering
- Status filter — narrow to a single state (e.g. show only
failed) - Date range — default is last 30 days; expand as needed
- Search — match by Shopify order name, customer email, or transaction hash
Click any row to open the transaction detail pane with the full session history, Permit2 signature, and a link to the Shopify order.
Issuing a refund
Refunds on BSC are initiated from the merchant side — your wallet sends USDC back to the shopper’s wallet. The app doesn’t custody funds, so it can only walk you through the process; the signature and broadcast happen in your wallet.
1. Open the RefundDialog
From the Transactions page, click a completed row and click Issue refund. This opens the RefundDialog modal.
Screenshot:
/screenshots/refunds.png— the RefundDialog with amount + reason fields. (Placeholder; awaiting live capture.)
2. Fill in the refund
- Amount — full or partial, in USDC (prepopulated with the full order amount)
- Reason — free-text field that gets attached to the Shopify order note
- Refund destination — prefilled with the payer’s wallet address from the original payment
3. Broadcast
Click Sign and send. The app opens your connected wallet (the same wallet configured as your settlement wallet) and asks you to sign a standard USDC transfer transaction. Confirm in the wallet, wait for the block, and the refund appears in the transaction detail pane with a BscScan link.
4. Shopify side-effects
The app automatically:
- Creates a Shopify refund record on the original order
- Updates the order status to
refunded(orpartially_refundedfor partials) - Appends a note to the order with the refund tx hash
- Emails the customer via Shopify’s standard refund notification
Refunds are final. Once broadcast, USDC is in the shopper’s wallet and cannot be recovered. Double-check the destination address in the RefundDialog before signing — the payer’s address is embedded in the original Permit2 signature and should be trusted, but never hurts to verify.
When a payment fails
Failed payments don’t need a refund — nothing settled. The session is marked failed, the Shopify draft order expires without being closed, and no USDC moved. Nothing to clean up.
If your customer is convinced they paid (saw a signature in their wallet), check:
- The transaction hash on BscScan — was there actually a Permit2 transfer?
- The session status on the Transactions page — is it
failedor justexpired? - The customer’s wallet — is their USDC balance unchanged from before the signature?
Related
- Admin dashboard
- Analytics — revenue and refund charts
- Configure wallet