As there is a combination of factors at play here and 3 different parties involved, I will document the problem here so anyone can see and recreate it.
To summarize, the client website, http://delcf.org is a large community foundation which accepts donations on behalf of many other non-profits who have established funds with them. Currently there are over 1,000 of these funds and online donations are an important feature.
The WordPress site is being hosted on WP Engine and is using a custom child theme built from iThemes parent Builder theme, Everett. I have them setup with iThemes Exchange for eCommerce solution and the Authorize.net gateway. We are using guest checkout feature which prevents donors from having to create an account on the site, but because they do need to have official records for charitable contributions, we are using the iThemes Exchange – Gravity Forms Add-on by Iron Bound Designs, to present them with a custom form to collect name, address, and other information which is not normally available in regular WordPress user registrations or Exchange check-out process.
This all works together without a problem on the WP Engine staging site: http://dcforg.staging.wpengine.com but we are having a problem on the live site: http://delcf.org. Below are the steps to see the problem.
Note: Click on images for a larger size
From the fund page (which is a product in Exchange), click the “Donate Now” button.
The guest checkout form will appear where you supply email address and click “continue”
Now the Gravity Form will appear. This is a normal form defined in the regular way using the Gravity Forms plugin. It is called and made visible here in this process flow as a result of using the Exchange add-on for Gravity Forms by Iron Bound Designs.
Step 4 (live)
This is where you see the problem on the live site. Instead of being presented with the payment options of pay by check or credit card, you see only a box with ‘cancel’ in it.
Step 4 (staging)
However, on the staging site, you correctly see these payment options. The staging site URL for this fund is: http://dcforg.staging.wpengine.com/fund/1916-fund/ but you can pick any fund from the same equivalent pages as the live site: http://dcforg.staging.wpengine.com/give/ or http://dcforg.staging.wpengine.com/all-funds
The only difference between the live and staging is the caching that is happening on the live site with WP Engine. We are already excluding the following arguments from caching:
Arg = it-exchange-sw-ajax
Pages = ^/fund
The WP Engine support team believes there is an additional parameter or argument that needs to be added to the exclusion list but they do not know what that is as they are not the developer of the plugin.
Here is where I need help from the collective team…. We need to figure out what needs to be added to caching exclusion list. Is it a Gravity Forms specific thing or something in Exchange?