I've got the same problem, due to inconsistencies between different checkout methods. Here's an IPN I get after a checkout with cart upload via a form POST to https://www.paypal.com/cgi-bin/webscr The form fields looks like this: amount_1: 11.9 quantity_1: 1 shipping_1: 1.9 cmd: _cart I would like to use a global shipping field instead of shipping_1, but there is none, as far as I know. In the resulting IPN, both mc_gross and mc_gross_1 include the fee listed in mc_shipping, while mc_shipping1 is not set: { "mc_gross": "13.80", "mc_shipping": "1.90", "notify_version": "3.8", "num_cart_items": "1", "payment_type": "instant", "quantity1": "1", "txn_type": "cart", "mc_gross_1": "13.80", ... } Now I do the same via a Paypal Plus checkout, using the JavaScript Rest API. Here, the shipping field is global, and yields a different IPN. Now, only mc_gross includes mc_shipping, mc_gross_1 is without shipping: { "mc_gross": "13.80", "mc_shipping": "1.90", "notify_version": "3.8", "num_cart_items": "1", "payment_type": "instant", "quantity1": "1", "txn_type": "cart", "mc_gross_1": "11.90", ... } It seems reasonable that using shipping vs shipping_1 causes different IPNs, but then I would expect that shipping_1 causes an mc_shipping_1 field instead of mc_shipping in the first IPN. The actual behavior feels very buggy, since the math required for parsing the IPNs is different. What's the best way to deal with this? If I can help with txn_ids or other details, please let me know. All the Best, Boris
... View more