Tower Plugins

  • Plugins
  • Development
  • Support
    • Account
    • Pre Sales Questions
    • Customer Support
    • Manage Serial Key Usage
    • How To Videos
    • Frequently Asked Questions
  • Testimonials
  • Cart
  • Plugins
  • Development
  • Support
    • Account
    • Pre Sales Questions
    • Customer Support
    • Manage Serial Key Usage
    • How To Videos
    • Frequently Asked Questions
  • Testimonials
  • Cart
HomeFAQ

FAQ

General

Serial key usage exceeded the allowed limit

Your purchase is good for one licensed url for one year.  If you received the message 'Serial key usage exceeded the allowed limit', it means you are trying to license more urls than your license provides. That said, you can transfer your license as long as it is valid (within the year's time). So if you receive this message 'Serial key usage exceeded the allowed limit' and
  • 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
Go to your account page and delete the original licensed url. Find the license you want to transfer, check the box, and click 'Remove Licensed Site URLs'. Then you can validate the new url. NOTE: Once a production url has been licensed, an additional site with 'localhost' or 'staging' in the url will be allowed. A staging site just can't be the initial url to be licensed. So validate the url on the production site first, then on your staging site to maintain an active staging site while in production.  

Where do I put the serial key?

Under Gravity Forms>Settings>Plugin Name There are also videos to guide you for eTapestry plugins which have a more two Login options. https://www.youtube.com/channel/UCW9d7PiY8_KxTDPxLBfim8Q/videos

What do you charge for plugin work?

My rates are $40 per hour for development on my timeline. Usually that means 30 days from a signed contract with a deposit. If you need something done fast (or fixed fast), I charge $60 per hour. If you need help like today! I charge $80 per hour and that assumes I can fit it in. In that case, you better call me :)

How do we get started building a custom plugin?

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!"

  1. Complete this form to provide job details.
  2. I'll contact you to discuss your needs and options
  3. I'll send a proposal*
  4. You'll sign a simple contract (to protect us both) and send a deposit
  5. I'll build your vision
There is no cost to get started. And I love solving problems! So let's see what we can do together to make your life easier and your business more profitable. * I do not charge for simple proposals. But if it will take a good deal of my time to design a plugin for you, I charge my hourly rate. You may then shop the proposal around if you wish.

Do you provide updates?

Your download link is good for 12 months (unless otherwise stated) so you can download any updates through that link. Before your support expires, you can reinstate your plugin at 50% off the current selling price.

Can I just overwrite the old plugin (with the new version) or do I need to re-set up?

You need to delete the old plugin and upload the new. You will not lose any data.

Will you develop additional features if we need them?

Feel free to request features. I add to the plugins when a feature request is popular. It it is a unique request, I will quote you for the work.

Will this plugin work with my version of Gravity Forms/ WordPress?

I post the versions I've tested on the plugin page and do my best to stay current on the very latest released versions of Gravity Forms and Wordpress. My oldest functioning plugin requires at least 1.9.12. But I use very core methods so odds are good it will continue to work as your plugins and site are updated. Submit a ticket to discuss if necessary or if you have any issues I need to fix.

Do you offer support after the purchase?

Yes! We offer incredible support for valid plugin purchases! ( Did you happen to check out the testimonials page? ) Just submit your question and we'll answer you in a jiffy.

How many sites may I use the plugin on?

Your plugin is only licensed for use on one site. If you would like a developer's license, please let me know.

Do you offer a refund?

The short answer is no. Please make sure the plugin description matches your needs as I do not refund for 'I thought it did xyz'. However, if for some reason, the plugin doesn't work in your environment, then yes. It has never happened where we could not figure out how to get it working :) If it doesn't appear to work, please contact us so we can work together to find the issue. It might be another plugin interfering or incorrect settings. But these plugins work on numerous sites running wildly different plugins. Be sure you have logging turned on so you can capture what is going on as that will be the first thing we'll ask for.

Will I have access to the plugin immediately after payment?

Yes. You will have immediate access to the download. The download link in your email works for a year so put that somewhere safe, forward it to a relevant coworker, or flag it in your email folder. Unless otherwise stated, the download is only licensed for one site.

eCheck

Modify start date for a subscription using a field in the form

The following code has been tested with a datepicker field but would work on any field formatted as a date. Place it in your custom plugin or functions.php file.
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;
}

Do you know if you can setup re-occurring payments using echeck?

Yes, you can set your feed up as a subscription.

How do I setup my form to support both your echeck plugin and another credit card plugin like Gravity Forms Authorize.net?

When setting up your form, you need a way to tell Gravity Forms which feed to process.

This is my recommendation:

  1. Add a Payment Method radio button to your form with two options: Credit Card, eCheck
  2. 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)
  3. In your feed settings, enable Conditional Logic and set the condition based upon the customers choice of payment as well
  4. You need to go through this with both the Credit Card and eCheck fields so that only one feed is processed at a time.

I’m setting up my payment feed – what is the “echeck block”” field?”

When you activate the echeck plugin, a new field called Anet eCheck will appear in your Gravity Forms edit page under Pricing Fields. You will add this field to your form to provide a place for customers to enter their check information. Because there are multiple inputs in this field, Gravity Forms will allow you to map the entire field 'block' or each input individually. However, the feed mapping needs you to map the entire field or Full version.

The echeck fields stopping showing

Please make sure the plugin is activated and there are no other Gravity Forms plugins interfering. I've tested my plugin with all the official Gravity Forms payment addons. But there are other third party plugins that don't follow the Gravity Forms API rules and break the flow. Try disabling any third party Gravity Forms plugins and see if the echeck fields reappear. If so, then enable the other plugins one by one until you find the plugin that breaks it. If not, contact me via email and I will help you figure it out or refund your money.

Code: 13 Error: The merchant login ID or password is invalid or the account is inactive.

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. CIM Plugin Image

If you're having trouble after entering, please visit Authorize.net support for answers about Transaction Key generation. (FYI Sometimes people inadvertently enter their login information for their A.net account. That will not work. You need an API Login ID and a generated super secret Transaction Key.)

Code: 33 Error

I am getting this error and not sure why....Code: 33 Error: [field name] is required. Answer: This indicates you are requiring a field in your Authorize.net account but it isn't mapped and sent with the transaction. To check this and correct:
  • 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
If you wish to require the field, rather than remove it from your a.net account, then add the field to your gravity form and map it.

My contact information isn’t going to Authorize.net

Make sure you are mapping them in the feed settings and that you have the latest version. There was a bug that was fixed in 1.4.

How can I add a field to the transaction?

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

Blackbaud Checkout

As of early 2025, Blackbaud now mandates the use of their Blackbaud Checkout (BB Checkout) interface to process payments. So, if you're still using eft and credit card fields in your forms, you need to switch to the BB Checkout field. To use this field you must first enter your credentials, then add the field(s) to your forms.
  1. Go to your Forms>Settings>eTapestry Payment and Check Serial Key to make sure your active serial key is registered.
  2. 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
  3. 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
  4. 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.
This creates a secure Blackbaud window injected into your form that directly interfaces with Blackbaud's server. NOTE: if you wish to automatically submit the form when the user completes the payment through the BB Checkout window, use a filter in your functions.php file: You may wish to add a condition based upon the form id. The following code will force auto submit on all forms with the bb checkout field in play.
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).  

I don’t see the Blackbaud Checkout SCA field

In order to use the Blackbaud Checkout PCI compliant SCA field, you need to enter special Blackbaud checkout credentials in your plugin settings. Go to Forms>Settings>eTapestry Payment  to enter the two credentials you need.

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. screenshot of credential fields For more information regarding the Blackbaud Checkout process, go to the FAQ Blackbaud Checkout

Login issues – there is an X next to my credentials

If there is an X next to your credentials, they are incorrect. If you are using the legacy login method by entering a user's login and password, the user may not have appropriate access to the account. I recommend using the new login method of a database ID and API key. The Database Id and API Key are visible to admin users within eTapestry. They can be found by visiting your eTapestry account and navigating to Management...My Organization...Subscriptions and looking within the API Subscription tile.

How can I modify an eTapestry Mapping gift transaction?

The following are examples of how to filter / modify the eTapestry Mapping gift transaction. Add the filter and function to your functions.php file. The transaction is an array. To see the structure and possible values, view the Blackbaud API documentation HERE. To add a note to the gift transaction:
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; }

When we try to set up a feed, it states “We are unable to communicate with your etapestry account. Please verify your settings are correct.”” What do we need to do to connect the plugin?”

There are a couple of things to check if you are getting this error.
  1. Are your credentials correct? You should be able to log into your eTapestry account using the same username and password.
  2. Is the url correct?
  3. 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

We are seeing notes in the entry but no id or name?

Please check your url in settings and make sure it corresponds to your version (2 or 3).

Error Code: 67 Error Message: Missing Value

If you are using the eTapestry Plus plugin and get this email, you need to set the Defined Values field in Forms>Settings. Your options are listing in the info window. NOTE The eTapestry Plus plugin was discontinued. Users need to upgrade to the eTapestry Mapping plugin.

Does plugin work outside the US?

Yes. However, you may need to modify the account object according to etapestry rules per country. Here is an example of how to accommodate an address in the UK/Great Britain:
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.  

How to make changes to the etapestry account before sending?

Use the 'eTapPayment_donor' filter to modify the account array before it goes to eTapestry. Here is an example that changes the address fields to accommodate etapestry Australia address parameters to use 'Suburb' instead of 'City' and also add salutations.
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;
}

How can I modify an eTapestry Payment transaction?

There is a hook for modifying a transaction before it is sent to eTapestry. The transaction is an array. To see the API structure visit the Blackbaud API documentation HERE. For example, let's say you want to add a note to the Payment that would be attached to the gift. (A gift is created when a donation is made using the Payment plugin. If you wish to create another type of journal entry, you need to use the eTapestry Mapping plugin.) Add a filter to your functions.php file in your theme (or even better, create a little plugin so your functionality is separated from your theme ):
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; }

Message: 216 | Invalid Address Value (city)

If you are using international addresses, you will need to filter your address fields. Please visit https://www.blackbaudhq.com/files/etapestry/api3/objects/Account.html to view the allowed address fields by country. Filter example:
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;
}

How do I change the default phone field?

There is a hook for that! 'eTapMapping_phone_type' looks like: $phone_type = apply_filters('eTapMapping_phone_type','Voice',$entry,$form,$feed); so simply return the phone type of your choice.
add_filter('eTapMapping_phone_type', function($entry){return 'Mobile';});

Card is always rejected in sandbox account

If you are processing with an etapestry sandbox account and getting this error: We're sorry but we received an error and are unable to process a transaction. Processsor Error: Credit/Debit Card Process Failure (REJECT: 15 - Generic Decline of Transaction - Have Cardholder Call Customer Service Number on Credit Card) It is due to an etapestry policy of only accepting sandbox payments of $1. To test your actual form (which presumably will allow for transactions over $1) you will have to go live. I know, but I can't do anything about this one :/

Do you have any support videos?

We have a youtube channel with support videos at  https://www.youtube.com/channel/UCW9d7PiY8_KxTDPxLBfim8Q/videos There are support videos for etapestry HERE.

Processsor Error: Method access denied

What does this mean? "We're sorry but we received an error and are unable to process a transaction. Processsor Error: Method access denied" Answer: This means eTapestry has not enabled API access for your account. API access is not automatic so you will need to request it through your account support.

How to I allow a donation with an invalid IP Address?

  Blackbaud recommends sending the ip address prior to a payment. That way if you get assaulted, they can block payments from the offending ip address. So the latest versions of the eTapestry Payment Plugin have this feature turned on by default. You can stop this behavior by adding a filter to your theme’s functions file:
add_filter(  'eTapPayment_sendIP',  '__return_false' );

Website Development or Modification

What will a new website cost me?

A lot goes into a custom website. That is why they look so good!  And unlike cloud based sites, you own and control your site and data. For basic sites without a shop or highly configurable plugins, you should budget $1200. If you have a shop, it will depend on how many products you have, how complex your products are, and if you want me to add them.  But if you are adding your products or do not have many, it will cost around $2000. If you have a lot of products to migrate from another site, you will need to add the cost of migration. I recently built and migrated two websites with many products. The cost for each was very close to $5000. If you want me to configure your SEO, that will be more. But totally worth it! Request a Quote Today!  
Open a ticket (Customer support)

Video How To

Visit the Anvil Zephyr YouTube channel for plugin specific how to videos:

Go to Channel

Ask a Question

Pre Sales Question

Plugin Reviews

Andy
Customer

Bought and tested the plugin. Works as claimed. Thank you so much.

Tamra
Developer

... this worked great! Thank you!

Graciela
Business Owner

Thank you for your great customer service and timely responses!

Keith
Chief Marketing Strategist

The CIM for authorize and it turns out it’s idiot simple and works like a charm. Totally awesome! Thanks Amy! You’re someone to know for sure!

Gordon
Developer

You have been a rock star!  I won't hesitate to use or recommend your plugin in the future.

Ellen
Developer

This is a great plugin, it worked right away.

Jon
Designer

I have a happy client and you have a happy customer! 🙂 Thanks for your attention today. I greatly appreciate it.

Richard
Developer

And thanks for getting back to us so promptly!

Kate
Designer

Just tested it and it's all working as intended now! Thanks again for your timely support.

Owen
Customer

Wow, your help and support is second to none. Very great full.

Ogechi
Design Director

Thank you for all your help Ryn! We got it all figured out.

Jon
Developer

First off, love the plugin! It works just as it should.

Michelle
Developer

Perfect! Thank you very much. [...] Please close this ticket with my appreciation.

Tracy
Designer

Thanks very much for prompt reply.

John
Entrepreneur

This did exactly what I need and worked perfectly!

Aaron
Customer

Thank you for the quick response! This plugin is great!

Jennifer
Developer

Thanks for all your help these past two days!

Shaun
Developer

Thank you for all of your time, it's the quickest I have ever heard from a WP Plugin author!

Steven
Development Director

Thank you again for this amazing plugin 😊

Chelsea
Director of Marketing

Just confirming your help on this was great and we were able to get this set up. This ticket can be closed! Thanks very much,

Custom Development Reviews

client screenshot
A1 Transmission and Gear

Amy Hill is extremely knowledgeable, energetic and dedicated to getting it right, PLUS on top of that she is very easy to work with.  It can be a bit intimidating to work with some computer programmers but with Amy that’s not a problem. Another top notch fact about Amy is how she can be so creative.  By the time I finish with my daily business I don’t have much energy to think hard about my website, all I have to do with Amy is give her a couple broad thoughts and she’s able to see what I’m trying to do and she delivers the product ASAP which lets me to go back to my regular job with a smile on my face.  I highly recommend her services!

Zenvea Essential Oils
Owner

Consistently excellent service over multiple projects. Highly recommended.

Lawmart
eCommerce Website

Amy Hill is a wonderfully competent website developer who knew exactly what I needed to update my website with a new look and improved user/admin interface. She also greatly improved the e-commerce functionality of the site to make it faster, smoother and more reliable. Many times she knew what I needed before I even asked for it, and when I did want changes made, she made them quickly and efficiently. She delivered the project on time and within budget, and I have no hesitation to use her services again.

Live Video CoParenting
Custom Joomla Component

Amy is skilled, intelligent and easy to communicate with. She completed the job to my complete satisfaction. I recommend this contractor highly.

Down River Equipment
Custom Plugin

Don't ever leave us!

Gain Management
Custom Plugin

I want to thank Amy for delivering on every promise, I needed a custom merchant site built to meet my needs and Amy delivered exactly what I requested on time and on budget. She is very responsive and clearly a master of her field. I highly recommend her to prospective clients!

Freedom Service Dogs
Custom Plugin

Great work  ... I love, love, love it!

Global Sat Phone
Issue Resolution

Amy did a great job of solving our Opencart/Joomla issues for our site migration. She was quick to fix all the unknown issues that came up.

Golf Squad
eCommerce Solution

Amy was awesome and finished the job with ease and professionalism. She was able to complete a job that several other local freelancers were not able to do … it is a huge relief to our company and I would definitely recommend her!

Pro Credit Fix
eCommerce Solution

Excellent job!!!!!!

Jely Finger Guitars
eCommerce Website

We are so very grateful for our affiliation with this talented lady.

Copyright © 2022 Anvil Zephyr, LLC
  • Support
  • Account
  • Manage Serial Key Usage
  • Terms and Conditions
We use cookies to ensure that we give you the best experience on our website. We have no intention of treating you like anything other than the amazing customer you are!
If you continue to use this site we will assume that you are comfortable with that.
OkRead Policies