FAQ
General
- You are trying to move a site to production from a staging site or
- You have recently added or removed SSL (your site changed from http to https or the other way around) or
- You have moved your site from or to a subdirectory

Building a custom plugin to suit your needs does not have to be hard. I do it all the time! And the most common comment I hear is "I didn't know you could do that!"
- Complete this form to provide job details.
- I'll contact you to discuss your needs and options
- I'll send a proposal*
- You'll sign a simple contract (to protect us both) and send a deposit
- I'll build your vision
eCheck
add_filter('gf_echeck_subscription_pre_create', 'az_change_subscription', 10, 4); function az_change_subscription($subscription, $submission_data, $feed, $form) { // change these values to match your form id and field id $form_id = 22; $field_id = 10; if ($form['id'] == $form_id && isset($_POST['input_' . $field_id]) && !empty($_POST['input_' . $field_id])) { $subscription->startDate = date('Y-m-d', strtotime(sanitize_text_field($_POST['input_' . $field_id]))); } return $subscription; }
When setting up your form, you need a way to tell Gravity Forms which feed to process.
This is my recommendation:
- Add a Payment Method radio button to your form with two options: Credit Card, eCheck
- Enable Conditional Logic in your Credit Card and eCheck fields and set your Credit Card field to be conditional upon the Credit Card choice and eCheck upon the eCheck choice (Advanced Tab on your field)
- In your feed settings, enable Conditional Logic and set the condition based upon the customers choice of payment as well
- You need to go through this with both the Credit Card and eCheck fields so that only one feed is processed at a time.
This is the error from Authorize.net. So we know that you are reaching Authorize.net but there is an issue with the credentials you sent. Please make sure you have entered valid credentials in your Forms>Settings>CIM page. That is the main Settings page under Forms - Not the feed settings under each individual form. (I know - it's confusing. But that is how Gravity Forms is set up and it works great once you're set up. :/) Here is an example from the CIM plugin but they all look similar.
- Login to your Merchant Interface at https://account.authorize.net
- Click Settings in the main left side menu
- Click Payment Form
- Click Form Fields
- Uncheck the field provided in the Error 33 text. (optional)
- Click Submit
There is a hook for that:
$transaction = apply_filters('gf_echeck_transaction_pre_capture', $transaction, $submission_data, $form, $entry);
So an example might look like:
add_filter( 'gf_echeck_transaction_pre_capture', 'set_invoice_number_for_echeck', 10, 1 );
function set_invoice_number_for_echeck( $transaction ) {
// You might want to do some other sanitizing or even validate it before sending. This is just cleaned by with rgpost.
$value = rgpost( 'input_2' );
$transaction->setField( 'invoice_num', $value );
return $transaction;
}
eTapestry
- Go to your Forms>Settings>eTapestry Payment and Check Serial Key to make sure your active serial key is registered.
- On the Payment plugin settings, enter your credentials for the BB Checkout field. The instructions for finding those in your eTapestry account are in the field settings information
- Go to your payment form(s) and replace the existing credit card and eft/echeck fields with BB Checkout fields. Each BB Checkout field has a setting for specifying whether it is for eft or credit card. See screenshot attached
- Re-establish any conditions under which the BB Checkout fields will show if applicable. (This was likely already set up if you had both credit cards and checks fields on your form so you just need to apply the same conditions to your BB Checkout field.) If you only accept one payment type, you only need one BB Checkout field and no conditions need apply.
add_filter('eTapPayment_bbcheckout_fields', function($fields, $form){
// can check form['id'] first if desired.
$fields['autosubmit'] = true;
return $fields;
}, 10, 2);
Screenshots:
Settings in the BB Checkout field. Select the transaction type and if the field is required. If you have more than one BB Checkout field in your form, be sure to set a conditional to only show the correct field (usually based upon a Payment Method radio button selected by the user).

BBPS Public Key: found on Management...My Organization...Preferences page (bottom of Preferences tile)
BBMS Merchant Account Id: found at Management...My Organization...eCommerce (see Merchant Account Id for the desired BBMS processor).
Once you've entered correct credentials, you will see the BB Checkout field in your form's Pricing Fields section. Add this to your form and follow the instructions in the field to designate it as credit card or check. You can add two BB Checkout fields to your form. Just use a radio button for the Payment Method and conditionally show the correct BB Checkout field based on the user's choice.
add_filter('eTapMapping_gift_transaction', 'custom_filter_gift', 10, 2); function custom_filter_gift( $transaction, $entry){$my_field_no = '8'; // change to your field id number if ( ! empty( $entry[ $my_field_no ] ) ){ $transaction['note'] = sanitize_text_field($entry[ $my_field_no ]); } return $transaction; } Modify a constituent or tribute user defined field created with a Gravity Forms date field to match the etapestry required date format mm/dd/yyyy (You can also change your field from a date field to a text field with a Date input mask. This will match eTapestry's format requirement.)
add_filter('eTapMapping_defined_values', 'custom_filter_udfs', 10, 2);function custom_filter_udfs( $defined_values, $entry ){ //var_dump( $defined_values );die(); // uncomment while testing to see array structure and get reference no if ( ! empty( $defined_values ) ){ $reference_no = '3188.0.2675'; // hard code this to match your mapped account foreach ( $defined_values as $k => $a ){ if ( $reference_no == $a['fieldRef'] ){ // This is our date field so format the date $defined_values[$k]['value'] = date('m/d/Y', strtotime( $a['value'] ) ); break; } } } //var_dump($defined_values);die(); //uncomment to test to see if the array was properly changed (not for live sites!) return $defined_values; }
- Are your credentials correct? You should be able to log into your eTapestry account using the same username and password.
- Is the url correct?
- Have you asked for API access from eTapestry? eTapestry API access is not automatic. So make sure you have explicitly added it to your account
add_filter('eTapMapping_donor','my_modify_donor_fields',10,3); // for Mapping plugin add_filter('eTapPayment_donor','my_modify_donor_fields',10,3); // for Payment plugin /** * Change state to county * @param array $donor * @param array $data * @param array $feed * @return array modified $donor */ function my_modify_donor_fields($donor,$data,$feed){ // change state to county if (!empty($donor['state']) && $donor['country'] == 'GB'){ // your country code $donor["county"] = $donor['state'] ; unset($donor['state']); } return $donor; }Please visit https://app.etapestry.com/hosted/files/api3/objects/Account.html to see all country adaptations. Address field rules are at the bottom of the page.
add_filter('eTapPayment_donor','my_donor_changes',10,3); /** * Add salutations * @param array $donor * @param array $data * @param array $feed * @return array modified donor */ function modify_donor_fields($donor,$data,$feed){ if (!empty($donor['city']) && $donor['country'] == 'AU'){ $donor["suburb"] = $donor['city'] ; unset($donor['city']); } // salutations $donor['shortSalutation'] = $donor["firstName"]; if (isset($donor['title'])){ $donor['longSalutation'] = $donor['title'].' '.$donor['lastName']; $donor['envelopeSalutation'] = $donor['title'].' '.$donor["firstName"].' '.$donor["lastName"]; } else { $donor['longSalutation'] = $donor['firstName'].' '.$donor['lastName']; $donor['envelopeSalutation'] = $donor["firstName"].' '.$donor["lastName"]; } return $donor; }
add_filter('eTapPayment_transaction', 'custom_filter_gift', 10, 4);function custom_filter_gift( $transaction, $feed, $data, $entry){ if ( $entry['form_id'] != "16" ) { // change to your form ID or remove this condition to apply to all your forms with an eTap Payment feed return $transaction; } $my_field_no = "8"; // change to your field id number if ( ! empty( $entry[ $my_field_no ] ) ){ $transaction['note'] = sanitize_text_field( $entry[$my_field_no] ); // choose appropriate filter for your field } return $transaction; }
add_filter('eTapMapping_donor','my_modify_donor_fields',10,3); // for Mapping plugin add_filter('eTapPayment_donor','my_modify_donor_fields',10,3); // for Payment plugin /** * Change city to suburb for AU residents * @param array $donor * @param array $data * @param array $feed * @return array modified $donor */ function my_modify_donor_fields($donor,$data,$feed){ // change city to suburb for AU if (!empty($donor['city']) && $donor['country'] == 'AU'){ $donor["suburb"] = $donor['city'] ; unset($donor['city']); } return $donor; }
add_filter('eTapMapping_phone_type', function($entry){return 'Mobile';});
add_filter( 'eTapPayment_sendIP', '__return_false' );