When teams add USDT or other stablecoin payments to a store, the first implementation usually looks simple: show a wallet address, wait for a transaction, then mark the order as paid.

That works for a demo. It breaks down in production.

The hard part is not generating a payment request. The hard part is keeping order state honest when real customers behave like real customers:

they choose the wrong network

they send a partial amount