Since the developer and administrator of the system, which has processed more than 600,000 PayPal payments over the past three years, relying solely on IPN, let us make some mistakes for slipping cracks.
Real data:
Total transactions No IPN Invalid IPN Duplicate IPN
year 1 170,000 + 2 101 0
year 2 205,000 + 54 15 3
year 3 230,000 + 20 24 13
Fortunately, our system is structured with PDT (Transfer Data Transfer) as a “backup”, so we did not lose any transaction data or receive customer dissatisfaction. Note: PDT cannot be relied upon solely for real - at the beginning of this year there was a serious problem with the reliability of the return of PDT.
The most common “invalid” IPN reviews are the HTML error page or truncated results ... I can provide samples if necessary.
The best choice is a combination of both IPN and PDT (with the data from your basket stored in your database, like you). Either IPN processes or the PDT process can create a transaction (and delete the "cart" data record in the database). The second process, which should arrive, will not have a “basket” record from which a transaction can be written.
NOTE. - as you noted in your final decision to use a custom field - keep in mind that there is a length limit for a custom field, and it can be truncated when returned to you.
source share