Not exactly being exploited, it's common for people to mark Partially Paid as Paid and then proceed, which is a mistake.
There are payment statuses on the API that you need to account for -
https://nowpayments.zendesk.com/hc/en-us/articles/18395434917149-Payment-statuses
Waiting - Occurs when Payment is Created
Confirming / Confirmed - First Blockchain appearance of a Deposit
Partially paid - The customer did not pay the full amount shown. For example, you asked for 115.555 USDT and customer paid 115 USDT or even 1 USDT
Finished - Full completion. Money sent. This is the ONLY status that is important when you should consider the payment as finished.
If the status is
Partially_Paid and you mark this payment as completed, it is on your system. You should upgrade your system to ONLY accept Finished Payments via the IPN and keep polling the API in the backend till the other statuses show up.
Unfortunately, this is a very common issue.