I've seen a lot of people asking for a tutorial for the authorize.net plugin and I can only imagine how many people have simply given up on it (count me among those who almost gave up). In the absence of an official tutorial, I submit this basic (very basic tutorial) to help those who come after me.
I'd appreciate if anyone finds an error that they will flag it for me--I tried to take notes while I stumbled through getting this to work, and I think this is a basic, correct guide that should at least give others a good start so they aren't beginning from nothing.
Like many of the people who are attracted to Chronoforms and the promise of a quick and easy Authorize.net solution, I am not a programmer so what I am about to present should be simple enough for anyone to follow. Chronoform experts and programmers will probably find it too basic, but any insight they could add would be great.
Hopefully it will be of some use and if I ever manage to get my own form to do a more advances step (mainly, get it to return to the form when the credit card submission is rejected for some reason) I will amend this tutorial to include it as I think that would be invaluable to anyone who is interested in using Chronoforms and the Authorize.net plugin in the first place.
I will attempt to point out some gotchas, a few tips, and some ideas. Some of the ideas presented here are my own, especially all the mistakes. Some were culled from previous forum posts, and some were plucked from other official and unofficial tutorials on this site.
First, a list of assumptions.
*You have an authorize.net account.
*You have a properly installed Joomla 1.5.x installation
*You have a properly installed Chronoforms installation
*You have a LICENSED (read paid for) authorize.net plugin
*Merchant Account with your bank with the ability to take card not present transactions--(added)
*Webhost with SSL certificate for your site--(added)
*Static IP address for your website--(added)
This last one is critical. The unlicensed plugin is there for testing only. DON'T EVEN THINK OF USING AUTHORIZE.NET PLUGIN WITHOUT PAYING FOR IT. First, it's only fair to reward the developer for making the plugin, which despite the troubles some of us have had with it works exactly the way it is intended to, and second, it has some code in it that randomly multiplies the amount users submit in a form by two, three or four. The last thing you want is some customer/client/whatever coming after you for double, triple or quadruple billing them.
Now, for the tutorial.
1.Authorize.net Plugin: What it is (and isn't).
The authorize.net plugin IS NOT a full e-commerce solution. It is not really suitable for selling multiple products, storing customer data, or tracking shipments. You might be able to do some of these things with Chronoforms (for example, with some effort you can submit the data into a database table and work with it there), but the idea behind it as presented is to take information from a payer, submit it to the authorize.net gateway, and then send an email (to you, or to the payer).
It is simple, as in elegant, but not a fancy end all solution to taking payments on-line.
In my case, I work for a non-profit organization and we wanted to take membership dues, donations, and other simple payments as a courtesy/service for our members. We had a full-fledged ecommerce store, but it was over-kill for our needs, thus I went looking for and found Chronoforms and the authorize.net plugin.
2.Authorize.net
Before you do anything else, set the authorize.net gateway to TEST-MODE....no point in charging yourself several hundred bucks while you're mucking around.
Go to the authroize.net homepage and login to your merchant account
Click Settings

Click the Test Mode link

Turn TEST MODE on

3. The Form
I'm going to make an assumption you already have Joomla and Chronoforms setup--if you don't, there are plenty of tutorials already out there for you. Go ahead, read them. I'll wait.
Now, you're setup and ready to make your form.
Before you even start, you need to determine what you want to capture. It's actually quite surprising how little information you need to process a payment through authorize.net. The basic authorize.net service requires a credit card number and an expiration date from the payer and that is about it, but there are other niceties you will want for your purposes and depending on what service you have with authorize.net. Also, there are things the payers expect to see even if they are not necessary. The authorize.net plugin (which we'll get to later), doesn't delineate what is REQUIRED and what is DESIRED so you are kind of left to dig through the authorize.net documentation. You will also want something on your form to make your life easier.
I'm going to go minimalist for the purpose of this tutorial, but it will give you an idea.
Since this is Chronoforms and the whole point behind it is to simplify form-making for people who don't know how to do it, I am going to use the wizard even though it presents a gotcha or two. You can actually make your own form and put it into Chronoforms (cool feature indeed).
Despite my complete ignorance when it comes to programming I can actually make a good old html form, but I am still going to use the wizard because I think a lot of people who use Joomla and might be attracted to Chronoforms probably cannot make their own form. Those who can make their own forms can go ahead and do so and adapt these instructions.
Once you have an idea in your head about the form and what you want to capture, you can start on your form. I am actually going to cheat a bit and present the authorize.net plugin settings page here because it may make things simpler if you use the general settings as a guide when creating your form elements--with one exception which I will get to later.

So, here we go, get into your Joomla Backend, then the Chronoforms component and start the old wizard.

I am building a simple form for members of an organization to pay membership dues. I need to have an email of the information sent to me for my purposes. I maintain a membership directory, and I also need to send some information to the organization secretary for her records.
It does not matter in what order you enter all this information in the form, but people are used to things being done a certain way so keep to the conventions.
I want (or need) to collect the following information from members:
First Name
Last Name
Street Address
City
State
Zip Code
Phone
Fax
Email
Credit card number
Credit card Expiration Date (month and year)
Description of item
Amount of purchase
TIP--For the Authorize.net plugin's purposes (and Authorize.net), the first and last name need to be collected separately, as do the Expiration Month and Expiration Year. The credit card number should be entered with no spaces. I've seen some forms allow the placement of spaces and then a subroutine strips or trims them out--I honestly don't know if the plugin will do this, so I just asked payers on the form to not use spaces and make a configuration change, which I will show later.
We won't spend too much time on the form wizard, as there are other tutorials to get you going, but I want to highlight one little problem I encountered.
First, you design your form in Step 1, by adding your Header and form fields. Drag the elements from the choices on the right into the form design area on the left and fill in the properties as needed.
Here's the beginning of a form with the Heading and First Name form field begin. You should give your field labels appropriate descriptions like FIRST NAME here, and you should make any field whose data you cannot live without you required by checking the REQUIRED box.

TIP--to make your job easier, you might want to designate the FIELD NAME with the same name as the authorize.net plugins general settings to simplify keeping track of everything.
DON'T FORGET TO HIT THE APPLY button!
The next few are pretty straightforward until you reach the credit card information. Up until now, everything you have captured has been text so you didn't need to do anything special, but with the credit card information you must only submit the credit card number. Never assume the end user will just type in the number and that is it. Set the box validation ot DIGITS only. This will force the end user to a) only type in numbers, and b) not put in spaces.

The next one is one of those gotchas I was talking about earlier: the date fields. Authorize.net requires the date be entered in a specific format:
MM/YY,
MM-YY
MMYYYY
MM/YYYY
MM-YYYY
Since you cannot guarantee what a person will do, it is best to limit him or her. You will frequently see drop down boxes used for these on most websites, so your first inclination will to be to do the same for your form, but here's one of those gotchas--Chronoform's default dropdown boxes are TEXT FIELDS. Go ahead and choose a dropdown field for both the month and year anyway as it is easy to add in here and we will fix it later.
TIP--Chronoforms wizard doesn't give you the ability to put form fields side by size, so I just put them one atop the other and Put MONTH at the top of the month field and YEAR at the top of the year field. Then I put an empty space in the LABEL box of the EXPIRATION YEAR properties. If you leave the field empty, or choose HIDE LABEL, the field will align left. Not as pretty as a custom field, but workable.
Finally, you need to set the amount field (after all, that is why we are here, right) There are a couple of ways to do this depending on what you are collecting payments for. You might put a text area up with instructions for a simple, single payment.
In my case, I have a couple of different memberships, so I needed to customize this for my needs. Once again, the auto generate form elements don't do exactly what you want, but I opted to use the radio button form element with three choices--LIFETIME MEMBERSHIP ($100), ANNUAL MEMBERSHP ($10) and AUXILIARY MEMBERSHIP ($25). Go ahead and create something similar here, which we can adjust later for our AMOUNT needs.

And finally, don't forget to add a SUBMIT button!
STEP 2
For the email to work you need to include at least a TO field, SUBJECT field, FROM NAME field and FROM EMAIL field. DON'T FORGET TO SET ENABLED TO YES under the EMAIL PROPERTIES
STEP 3
Don't put anything in here. When you save, Chronoforms will design an email for you. You can go back and edit this later if need be.
STEP 4
If you want someone to be redirected somewhere else following hitting the submit button, put in a url in the REDIRECT box here. Or, you can put something in the AFTER SUBMIT BOX and the user will be directed to a blank page with only the text you added.
OK, now save the form and you will be taken back to the FORMS MANAGER. Now, before you do anything else, let's PUBLISH the form, and then click on the link to see what it looks like. It won't do anything yet, but does it appear as you wish?
4. FIXING THE FORM
Assuming it is as you expected, time to go back in and make a few changes to get it to work as expected. Click on your form NAME and you will be taken to the non-wizard interface.
For now, we're only interested in two things on the GENERAL tab. In the MAIN SETTINGS area set the EMAIL RESULTS to YES. In the OTHER FORMS SETTINGS area, change DEBUG to ON.

On the SETUP EMAILS tab, you shouldn't need to do anything, but if you want to check to ensure that EMAIL is set to ENABLED, it would be a good idea.
On the EMAIL TEMPLATES tab, whether you do anything here depends on your needs. The template was automatically created when you saved and it simply creates an email with the label and the information submitted by the payer. You probably don't have to change anything here, but in my case, I actually did. The organization secretary who also needs this information needs the personal demographics information, but doesn't need the members credit card information, so I went in here and removed those fields.
On the FORM CODE tab you have a little work to do. To do this, you need to click on the +/- next to FORM HTML

What you need to edit will take a little hunting though the Chronoforms generated code, but it's nicely formatted so it shouldn't be too hard. You will recall earlier that I noted that the default values of the dropdown values are saved as text. This is an issue for the authorize.net plugin and authorize.net which expects numbers.
Here, for example, is the code for the expiration month field
You will recall that the authorize.net requirement for this data must be numeric and must be in one of the following formats
MM/YY
MM-YY
MMYYYY
MM/YYYY
MM-YYYY
I am not 100 percent certain in what form the plugin submits the data, but I can say that MM YYYY works (if the plugin submit MM-YYYY or MM/YYYY I don't know).
For our purposes it really doesn't matter as long as it is numeric.
Anyway, note the code
What this means is that your form will submit 01 as TEXT due to the quotation marks. This would cause the gateway to reject the payment. To fix this, you need to remove the quotation marks on each of these fields, so for the month expiration it should appear as:
The same applies to the year, which should look like this after editing (note, quotation marks removed from value):
The last bit in here has to do with the amount. You will recall that I chose to use the radio button to decide between three choices. Here is the resulting code.
You will also recall that I earlier stated that I would use the authorize.net plugin form field names for everything but one item. This is it, the AMOUNT.
If you know nothing about the radio button form code, just remember this: the form will submit the value for the selected item VALUE parameter, and it does this using the NAME ELEMENT. So, you will note that NAME is identical on each of the choices ("radio0"), but the value of the choice is actually submitted. What is PRESENTED to the user, though, is the text in between the tags > <. So, you can change the value, but the appearance to the end user does not change. So, for my use, I change the value to a dollar value, or number, but leave the information between the tag brackets, like so:
In case I wasn't clear earlier, I am going to be using radio0 in the authorize.net plugin later for the amount. You will see this in a moment.
Go ahead and save your form again.
5. Authorize.net Plugin Activation
You need to do a couple of things to get the plug in to work.
First, let's open the form one more time by clicking on its name and then going to the second to last tab: plugin. All you need to do here is click the little checkmark on the Authorize.net plugin so it turns green like so:

Go ahead and save.
6. Authorize.net Plugin Settings
OK, a lot of people seem to get confused here, so I'm sorry of this is so obvious it insults people, but for the sake of covering all the details, to access the authorize.net plugin settings, CHECK the box next to your form name and then click on the Authorize.net plugin link to the left, which will reveal the settings I showed earlier.
Now we can fill out the form as needed. Remember, I suggested using the plugin names for your Field Names. This makes it easier to match your own fields to the corresponding plugin fields so that Authorize.net recognizes them. So, using that idea, you can see that I matched them up so each of my values corresponds to the authorize.net plugin values.

You will note that the one deviation is the x_amount field is radio0.
Note: A problem with this approach is that the person who receives the email needs to know the dollar value corresponds to the particular item purchased. For my purpose, I edited the email form to convey that information like so:
Membership Type: $100=Lifetime Membership, $10=Annual Membership, $25=Auxiliary Membership
${radio0}
When the email is sent, this will look like
Membership Type: $100=Lifetime Membership, $10=Annual Membership, $25=Auxiliary Membership
$10
if they chose annual membership, or another value if they chose a different type.
You don't need to set anything in the EXTRA CODE tab for our simple form.
You DO need to set a couple of values on the AUTHORIZE.NET tab, specifically your API logon ID (provided by Authorize.net and your transaction key (which is generated by authorize.net).

Once your authorize.net account is setup, you can find this on your settings page by clicking on API Login ID and Transaction key link. Your API login id is on this page, and you will need to generate your transaction key here.
Finally, for the moment, set the DEBUGGING to YES and TESTING to yes.
The Useful variables tab has some variables you can use for more advanced forms.
Go ahead and save.
7. The results
Well, if you have done everything right, you should have a working form that sends information from your website to the Authorize.net AIM gateway.
The gateway will respond if debugging is turned on. To understand the results, you might want to download the Advanced Integration Method Developer's Guide from here:
http://www.authorize.net/support/AIM_guide.pdf
The RESPONSE CODE DETAILS section will help you troubleshoot what is going wrong
If there is an error, your form will return something that looks like this (I have blanked a few things obviously)
The first part will include the copy of the email sent (if you opted to send an email

The second part will tell you the debug response from Authorize.net
In this case, you will see ERROR, with a Response Sub Code of 2 and a reason code of 3. According to the AIM_guide.pdf, page 38, the result means "The merchant API Login ID was invalid or the account is inactive." which is absolutely correct, since I didn't include the API Login in my test form. The response also notes the form is in TESTMODE. The form did pick up the value, but since I didn't include the other API login, it didn't record the rest of the information.

Note: This will actually be followed by any message you put in Step 4 during the form building wizard

The last part is debug response from the authorize.net plugin.

8. One last step--link to the form and Secure it--Edit added
OK, you've got your form "working" but you still have one more step to make it compliant with your bank. In order to have a merchant account with your bank that allows card not present transactions, you're website has to be secured.
Secured means more than password protection. You need a SSL certificate, which you can get from your webhost. The SSL certificate is issued by a third party provider who certifies that your website is what it says it is and is encrypted. Don't worry too much about that. You just tell your webhost what you need and they will set it up.
What you need to do, though, is ensure your form is using the correct setup.
First, you need to create a link to the form the same way you would any other Chronoform. Within your Joomla backend, go to MENU and click on a Menu grouping. Now click on a NEW, then click on Chronoforms and you will be taken to the NEW MENU ITEM settings page.
Put anything you want under TITLE and ALIAS, and notice that the LINK box seems to be incomplete
Don't worry. On the right-hand side, under the PARAMETERS (BASIC) section, fill in the form name from the FORMS MANAGEMENT section of the Chronoforms component.
In the example above, we used "CCform", so that's what you would put there.
One more step, click on PARAMETERS (SYSTEM) on the right and set SSL ENABLED to ON
Now save.
Now, when a user clicks on the link you created, they will be taken to (in our example)
https://www.mapiusa.org/index.php?option=com_chronocontact&chronoformname=CCform
Note the S and the small graphic of a LOCK that appears on URL bar of the brownser window (for most modern browsers--some will still have the lock in the lower right hand corner of the browser window. The HTTPS and the LOCK graphic are how the browser tells you the website is secure.
Closing
Hopefully, this little (ok, long) tutorial will be of some use to people who are puzzled at the sometimes mysterious authorize.net plugin. And hopefully I haven't made things worse by putting something wrong it...remember, I am complete newbie at this.
Eventually, I hope to figure out how to take the response from the Authorize.net and on a failure send the user back to the form with a short message explaining why they were sent back. And naturally, an approved form will go somewhere else.
I've gotten close a few times, but I haven't quite figured it out yet. In some cases, the form data is submitted twice to authorize net (no good), or not at all. If anyone has some ideas, I would love to hear them.
I'd appreciate if anyone finds an error that they will flag it for me--I tried to take notes while I stumbled through getting this to work, and I think this is a basic, correct guide that should at least give others a good start so they aren't beginning from nothing.
Like many of the people who are attracted to Chronoforms and the promise of a quick and easy Authorize.net solution, I am not a programmer so what I am about to present should be simple enough for anyone to follow. Chronoform experts and programmers will probably find it too basic, but any insight they could add would be great.
Hopefully it will be of some use and if I ever manage to get my own form to do a more advances step (mainly, get it to return to the form when the credit card submission is rejected for some reason) I will amend this tutorial to include it as I think that would be invaluable to anyone who is interested in using Chronoforms and the Authorize.net plugin in the first place.
I will attempt to point out some gotchas, a few tips, and some ideas. Some of the ideas presented here are my own, especially all the mistakes. Some were culled from previous forum posts, and some were plucked from other official and unofficial tutorials on this site.
First, a list of assumptions.
*You have an authorize.net account.
*You have a properly installed Joomla 1.5.x installation
*You have a properly installed Chronoforms installation
*You have a LICENSED (read paid for) authorize.net plugin
*Merchant Account with your bank with the ability to take card not present transactions--(added)
*Webhost with SSL certificate for your site--(added)
*Static IP address for your website--(added)
This last one is critical. The unlicensed plugin is there for testing only. DON'T EVEN THINK OF USING AUTHORIZE.NET PLUGIN WITHOUT PAYING FOR IT. First, it's only fair to reward the developer for making the plugin, which despite the troubles some of us have had with it works exactly the way it is intended to, and second, it has some code in it that randomly multiplies the amount users submit in a form by two, three or four. The last thing you want is some customer/client/whatever coming after you for double, triple or quadruple billing them.
Now, for the tutorial.
1.Authorize.net Plugin: What it is (and isn't).
The authorize.net plugin IS NOT a full e-commerce solution. It is not really suitable for selling multiple products, storing customer data, or tracking shipments. You might be able to do some of these things with Chronoforms (for example, with some effort you can submit the data into a database table and work with it there), but the idea behind it as presented is to take information from a payer, submit it to the authorize.net gateway, and then send an email (to you, or to the payer).
It is simple, as in elegant, but not a fancy end all solution to taking payments on-line.
In my case, I work for a non-profit organization and we wanted to take membership dues, donations, and other simple payments as a courtesy/service for our members. We had a full-fledged ecommerce store, but it was over-kill for our needs, thus I went looking for and found Chronoforms and the authorize.net plugin.
2.Authorize.net
Before you do anything else, set the authorize.net gateway to TEST-MODE....no point in charging yourself several hundred bucks while you're mucking around.
Go to the authroize.net homepage and login to your merchant account
Click Settings
Click the Test Mode link
Turn TEST MODE on
3. The Form
I'm going to make an assumption you already have Joomla and Chronoforms setup--if you don't, there are plenty of tutorials already out there for you. Go ahead, read them. I'll wait.
Now, you're setup and ready to make your form.
Before you even start, you need to determine what you want to capture. It's actually quite surprising how little information you need to process a payment through authorize.net. The basic authorize.net service requires a credit card number and an expiration date from the payer and that is about it, but there are other niceties you will want for your purposes and depending on what service you have with authorize.net. Also, there are things the payers expect to see even if they are not necessary. The authorize.net plugin (which we'll get to later), doesn't delineate what is REQUIRED and what is DESIRED so you are kind of left to dig through the authorize.net documentation. You will also want something on your form to make your life easier.
I'm going to go minimalist for the purpose of this tutorial, but it will give you an idea.
Since this is Chronoforms and the whole point behind it is to simplify form-making for people who don't know how to do it, I am going to use the wizard even though it presents a gotcha or two. You can actually make your own form and put it into Chronoforms (cool feature indeed).
Despite my complete ignorance when it comes to programming I can actually make a good old html form, but I am still going to use the wizard because I think a lot of people who use Joomla and might be attracted to Chronoforms probably cannot make their own form. Those who can make their own forms can go ahead and do so and adapt these instructions.
Once you have an idea in your head about the form and what you want to capture, you can start on your form. I am actually going to cheat a bit and present the authorize.net plugin settings page here because it may make things simpler if you use the general settings as a guide when creating your form elements--with one exception which I will get to later.
So, here we go, get into your Joomla Backend, then the Chronoforms component and start the old wizard.
I am building a simple form for members of an organization to pay membership dues. I need to have an email of the information sent to me for my purposes. I maintain a membership directory, and I also need to send some information to the organization secretary for her records.
It does not matter in what order you enter all this information in the form, but people are used to things being done a certain way so keep to the conventions.
I want (or need) to collect the following information from members:
First Name
Last Name
Street Address
City
State
Zip Code
Phone
Fax
Credit card number
Credit card Expiration Date (month and year)
Description of item
Amount of purchase
TIP--For the Authorize.net plugin's purposes (and Authorize.net), the first and last name need to be collected separately, as do the Expiration Month and Expiration Year. The credit card number should be entered with no spaces. I've seen some forms allow the placement of spaces and then a subroutine strips or trims them out--I honestly don't know if the plugin will do this, so I just asked payers on the form to not use spaces and make a configuration change, which I will show later.
We won't spend too much time on the form wizard, as there are other tutorials to get you going, but I want to highlight one little problem I encountered.
First, you design your form in Step 1, by adding your Header and form fields. Drag the elements from the choices on the right into the form design area on the left and fill in the properties as needed.
Here's the beginning of a form with the Heading and First Name form field begin. You should give your field labels appropriate descriptions like FIRST NAME here, and you should make any field whose data you cannot live without you required by checking the REQUIRED box.
TIP--to make your job easier, you might want to designate the FIELD NAME with the same name as the authorize.net plugins general settings to simplify keeping track of everything.
DON'T FORGET TO HIT THE APPLY button!
The next few are pretty straightforward until you reach the credit card information. Up until now, everything you have captured has been text so you didn't need to do anything special, but with the credit card information you must only submit the credit card number. Never assume the end user will just type in the number and that is it. Set the box validation ot DIGITS only. This will force the end user to a) only type in numbers, and b) not put in spaces.
The next one is one of those gotchas I was talking about earlier: the date fields. Authorize.net requires the date be entered in a specific format:
MM/YY,
MM-YY
MMYYYY
MM/YYYY
MM-YYYY
Since you cannot guarantee what a person will do, it is best to limit him or her. You will frequently see drop down boxes used for these on most websites, so your first inclination will to be to do the same for your form, but here's one of those gotchas--Chronoform's default dropdown boxes are TEXT FIELDS. Go ahead and choose a dropdown field for both the month and year anyway as it is easy to add in here and we will fix it later.
TIP--Chronoforms wizard doesn't give you the ability to put form fields side by size, so I just put them one atop the other and Put MONTH at the top of the month field and YEAR at the top of the year field. Then I put an empty space in the LABEL box of the EXPIRATION YEAR properties. If you leave the field empty, or choose HIDE LABEL, the field will align left. Not as pretty as a custom field, but workable.
Finally, you need to set the amount field (after all, that is why we are here, right) There are a couple of ways to do this depending on what you are collecting payments for. You might put a text area up with instructions for a simple, single payment.
In my case, I have a couple of different memberships, so I needed to customize this for my needs. Once again, the auto generate form elements don't do exactly what you want, but I opted to use the radio button form element with three choices--LIFETIME MEMBERSHIP ($100), ANNUAL MEMBERSHP ($10) and AUXILIARY MEMBERSHIP ($25). Go ahead and create something similar here, which we can adjust later for our AMOUNT needs.
And finally, don't forget to add a SUBMIT button!
STEP 2
For the email to work you need to include at least a TO field, SUBJECT field, FROM NAME field and FROM EMAIL field. DON'T FORGET TO SET ENABLED TO YES under the EMAIL PROPERTIES
STEP 3
Don't put anything in here. When you save, Chronoforms will design an email for you. You can go back and edit this later if need be.
STEP 4
If you want someone to be redirected somewhere else following hitting the submit button, put in a url in the REDIRECT box here. Or, you can put something in the AFTER SUBMIT BOX and the user will be directed to a blank page with only the text you added.
OK, now save the form and you will be taken back to the FORMS MANAGER. Now, before you do anything else, let's PUBLISH the form, and then click on the link to see what it looks like. It won't do anything yet, but does it appear as you wish?
4. FIXING THE FORM
Assuming it is as you expected, time to go back in and make a few changes to get it to work as expected. Click on your form NAME and you will be taken to the non-wizard interface.
For now, we're only interested in two things on the GENERAL tab. In the MAIN SETTINGS area set the EMAIL RESULTS to YES. In the OTHER FORMS SETTINGS area, change DEBUG to ON.
On the SETUP EMAILS tab, you shouldn't need to do anything, but if you want to check to ensure that EMAIL is set to ENABLED, it would be a good idea.
On the EMAIL TEMPLATES tab, whether you do anything here depends on your needs. The template was automatically created when you saved and it simply creates an email with the label and the information submitted by the payer. You probably don't have to change anything here, but in my case, I actually did. The organization secretary who also needs this information needs the personal demographics information, but doesn't need the members credit card information, so I went in here and removed those fields.
On the FORM CODE tab you have a little work to do. To do this, you need to click on the +/- next to FORM HTML
What you need to edit will take a little hunting though the Chronoforms generated code, but it's nicely formatted so it shouldn't be too hard. You will recall earlier that I noted that the default values of the dropdown values are saved as text. This is an issue for the authorize.net plugin and authorize.net which expects numbers.
Here, for example, is the code for the expiration month field
<div class="form_item">
<div class="form_element cf_dropdown">
<label class="cf_label" style="width: 150px;">Expiration</label>
<select class="cf_inputbox validate-selection" id="select_15" size="1" title="" name="x_exp_date_m">
<option value="">Month</option>
<option value="Month">Month</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
</div>
<div class="cfclear"> </div>
</div>
You will recall that the authorize.net requirement for this data must be numeric and must be in one of the following formats
MM/YY
MM-YY
MMYYYY
MM/YYYY
MM-YYYY
I am not 100 percent certain in what form the plugin submits the data, but I can say that MM YYYY works (if the plugin submit MM-YYYY or MM/YYYY I don't know).
For our purposes it really doesn't matter as long as it is numeric.
Anyway, note the code
<option value="01">01</option>
What this means is that your form will submit 01 as TEXT due to the quotation marks. This would cause the gateway to reject the payment. To fix this, you need to remove the quotation marks on each of these fields, so for the month expiration it should appear as:
<div class="form_item">
<div class="form_element cf_dropdown">
<label class="cf_label" style="width: 150px;">Expiration</label>
<select class="cf_inputbox validate-selection" id="select_15" size="1" title="" name="x_exp_date_m">
<option value="">Month</option>
<option value="Month">Month</option>
<option value=01>01</option>
<option value=02>02</option>
<option value=03>03</option>
<option value=04>04</option>
<option value=05>05</option>
<option value=06>06</option>
<option value=07>07</option>
<option value=08>08</option>
<option value=09>09</option>
<option value=10>10</option>
<option value=11>11</option>
<option value=12>12</option>
</select>
</div>
<div class="cfclear"> </div>
</div>
The same applies to the year, which should look like this after editing (note, quotation marks removed from value):
<div class="form_item">
<div class="form_element cf_dropdown">
<label class="cf_label" style="width: 150px;"> </label>
<select class="cf_inputbox validate-selection" id="select_17" size="1" title="" name="x_exp_date_y">
<option value="">Year</option>
<option value="Year">Year</option>
<option value=2010>2010</option>
<option value=2011>2011</option>
<option value=2012>2012</option>
<option value=2013>2013</option>
<option value=2014>2014</option>
<option value=2015>2015</option>
<option value=2016>2016</option>
<option value=2017>2017</option>
<option value=2018>2018</option>
<option value=2019>2019</option>
<option value=2020>2020</option>
</select>
</div>
<div class="cfclear"> </div>
</div>
The last bit in here has to do with the amount. You will recall that I chose to use the radio button to decide between three choices. Here is the resulting code.
<div class="form_item">
<div class="form_element cf_radiobutton">
<label class="cf_label" style="width: 150px;">Membership Type</label>
<div class="float_left">
<input value="Life time membership ($100)" title="" class="radio validate-one-required" id="radio00" name="radio0" type="radio" />
<label for="radio00" class="radio_label">Life time membership ($100)</label>
<br />
<input value="Annual Membership ($10)" title="" class="radio validate-one-required" id="radio01" name="radio0" type="radio" />
<label for="radio01" class="radio_label">Annual Membership ($10)</label>
<br />
<input value="Auxiliary Membership ($25)" title="" class="radio validate-one-required" id="radio02" name="radio0" type="radio" />
<label for="radio02" class="radio_label">Auxiliary Membership ($25)</label>
<br />
</div>
</div>
<div class="cfclear"> </div>
</div>
You will also recall that I earlier stated that I would use the authorize.net plugin form field names for everything but one item. This is it, the AMOUNT.
If you know nothing about the radio button form code, just remember this: the form will submit the value for the selected item VALUE parameter, and it does this using the NAME ELEMENT. So, you will note that NAME is identical on each of the choices ("radio0"), but the value of the choice is actually submitted. What is PRESENTED to the user, though, is the text in between the tags > <. So, you can change the value, but the appearance to the end user does not change. So, for my use, I change the value to a dollar value, or number, but leave the information between the tag brackets, like so:
<div class="form_item">
<div class="form_element cf_radiobutton">
<label class="cf_label" style="width: 150px;">Membership Type</label>
<div class="float_left">
<input value=100 title="" class="radio validate-one-required" id="radio00" name="radio0" type="radio" />
<label for="radio00" class="radio_label">Life time membership ($100)</label>
<br />
<input value=10 title="" class="radio validate-one-required" id="radio01" name="radio0" type="radio" />
<label for="radio01" class="radio_label">Annual Membership ($10)</label>
<br />
<input value=25 title="" class="radio validate-one-required" id="radio02" name="radio0" type="radio" />
<label for="radio02" class="radio_label">Auxiliary Membership ($25)</label>
<br />
</div>
</div>
<div class="cfclear"> </div>
</div>
In case I wasn't clear earlier, I am going to be using radio0 in the authorize.net plugin later for the amount. You will see this in a moment.
Go ahead and save your form again.
5. Authorize.net Plugin Activation
You need to do a couple of things to get the plug in to work.
First, let's open the form one more time by clicking on its name and then going to the second to last tab: plugin. All you need to do here is click the little checkmark on the Authorize.net plugin so it turns green like so:
Go ahead and save.
6. Authorize.net Plugin Settings
OK, a lot of people seem to get confused here, so I'm sorry of this is so obvious it insults people, but for the sake of covering all the details, to access the authorize.net plugin settings, CHECK the box next to your form name and then click on the Authorize.net plugin link to the left, which will reveal the settings I showed earlier.
Now we can fill out the form as needed. Remember, I suggested using the plugin names for your Field Names. This makes it easier to match your own fields to the corresponding plugin fields so that Authorize.net recognizes them. So, using that idea, you can see that I matched them up so each of my values corresponds to the authorize.net plugin values.
You will note that the one deviation is the x_amount field is radio0.
Note: A problem with this approach is that the person who receives the email needs to know the dollar value corresponds to the particular item purchased. For my purpose, I edited the email form to convey that information like so:
Membership Type: $100=Lifetime Membership, $10=Annual Membership, $25=Auxiliary Membership
${radio0}
When the email is sent, this will look like
Membership Type: $100=Lifetime Membership, $10=Annual Membership, $25=Auxiliary Membership
$10
if they chose annual membership, or another value if they chose a different type.
You don't need to set anything in the EXTRA CODE tab for our simple form.
You DO need to set a couple of values on the AUTHORIZE.NET tab, specifically your API logon ID (provided by Authorize.net and your transaction key (which is generated by authorize.net).
Once your authorize.net account is setup, you can find this on your settings page by clicking on API Login ID and Transaction key link. Your API login id is on this page, and you will need to generate your transaction key here.
Finally, for the moment, set the DEBUGGING to YES and TESTING to yes.
The Useful variables tab has some variables you can use for more advanced forms.
Go ahead and save.
7. The results
Well, if you have done everything right, you should have a working form that sends information from your website to the Authorize.net AIM gateway.
The gateway will respond if debugging is turned on. To understand the results, you might want to download the Advanced Integration Method Developer's Guide from here:
http://www.authorize.net/support/AIM_guide.pdf
The RESPONSE CODE DETAILS section will help you troubleshoot what is going wrong
If there is an error, your form will return something that looks like this (I have blanked a few things obviously)
The first part will include the copy of the email sent (if you opted to send an email
The second part will tell you the debug response from Authorize.net
In this case, you will see ERROR, with a Response Sub Code of 2 and a reason code of 3. According to the AIM_guide.pdf, page 38, the result means "The merchant API Login ID was invalid or the account is inactive." which is absolutely correct, since I didn't include the API Login in my test form. The response also notes the form is in TESTMODE. The form did pick up the value, but since I didn't include the other API login, it didn't record the rest of the information.
Note: This will actually be followed by any message you put in Step 4 during the form building wizard
The last part is debug response from the authorize.net plugin.
8. One last step--link to the form and Secure it--Edit added
OK, you've got your form "working" but you still have one more step to make it compliant with your bank. In order to have a merchant account with your bank that allows card not present transactions, you're website has to be secured.
Secured means more than password protection. You need a SSL certificate, which you can get from your webhost. The SSL certificate is issued by a third party provider who certifies that your website is what it says it is and is encrypted. Don't worry too much about that. You just tell your webhost what you need and they will set it up.
What you need to do, though, is ensure your form is using the correct setup.
First, you need to create a link to the form the same way you would any other Chronoform. Within your Joomla backend, go to MENU and click on a Menu grouping. Now click on a NEW, then click on Chronoforms and you will be taken to the NEW MENU ITEM settings page.
Put anything you want under TITLE and ALIAS, and notice that the LINK box seems to be incomplete
index.php?option=com_chronocontact
Don't worry. On the right-hand side, under the PARAMETERS (BASIC) section, fill in the form name from the FORMS MANAGEMENT section of the Chronoforms component.
In the example above, we used "CCform", so that's what you would put there.
One more step, click on PARAMETERS (SYSTEM) on the right and set SSL ENABLED to ON
Now save.
Now, when a user clicks on the link you created, they will be taken to (in our example)
https://www.mapiusa.org/index.php?option=com_chronocontact&chronoformname=CCform
Note the S and the small graphic of a LOCK that appears on URL bar of the brownser window (for most modern browsers--some will still have the lock in the lower right hand corner of the browser window. The HTTPS and the LOCK graphic are how the browser tells you the website is secure.
Closing
Hopefully, this little (ok, long) tutorial will be of some use to people who are puzzled at the sometimes mysterious authorize.net plugin. And hopefully I haven't made things worse by putting something wrong it...remember, I am complete newbie at this.
Eventually, I hope to figure out how to take the response from the Authorize.net and on a failure send the user back to the form with a short message explaining why they were sent back. And naturally, an approved form will go somewhere else.
I've gotten close a few times, but I haven't quite figured it out yet. In some cases, the form data is submitted twice to authorize net (no good), or not at all. If anyone has some ideas, I would love to hear them.
Not quite excellent. I forgot to add the SSL enabled stuff which might not technically be essential for the authorize.net plugin to work, but is important if you're actually going to take credit card charges.
I added it now...probably will need to revise it some more after thinking about.
I added it now...probably will need to revise it some more after thinking about.
SUPER JOB!! Thanks. I am getting ready to go through this on a project payment function. I am thankful you put this together.
:) Brian
:) Brian
YOU ARE AMAZING!!!!!!!!!
I have been looking for this and would expect it to be available when I purchased the plugin. You made it absolutely simple!!!
You are my hero!
John
I have been looking for this and would expect it to be available when I purchased the plugin. You made it absolutely simple!!!
You are my hero!
John
Question: anyone know the rules for adding the x_card_code?
This is the CVV security code that autorize.net compares what the user input is against what the bank has on file for security.
I have a licensed plugin and need to add this to my form. At authorize.net, I checked the option to enable CVV match in the account settings.
Then I added the input field in the HTML form with [x_card_code] set as the field name.
Next I added [x_card_code=x_card_code] in the extra fields data area of the authorize.net plugin page since it isnt in the list above the extra field data input area.
PROBLEM: but for some reason now, I do not get a receipt e-mail from authorize.net. However, I dont seem to be getting any errors running in test mode and debug. I made a test deposit of $1.00 just to see if it is captuing the payment and I am waiting for the transaction to show up in my report history.
Does anyone know why I may not be getting the e-mail receit from authorize.net?
This is the CVV security code that autorize.net compares what the user input is against what the bank has on file for security.
I have a licensed plugin and need to add this to my form. At authorize.net, I checked the option to enable CVV match in the account settings.
Then I added the input field in the HTML form with [x_card_code] set as the field name.
Next I added [x_card_code=x_card_code] in the extra fields data area of the authorize.net plugin page since it isnt in the list above the extra field data input area.
PROBLEM: but for some reason now, I do not get a receipt e-mail from authorize.net. However, I dont seem to be getting any errors running in test mode and debug. I made a test deposit of $1.00 just to see if it is captuing the payment and I am waiting for the transaction to show up in my report history.
Does anyone know why I may not be getting the e-mail receit from authorize.net?
Hopefully it will be of some use and if I ever manage to get my own form to do a more advances step (mainly, get it to return to the form when the credit card submission is rejected for some reason)
Anybody figured out how to do this yet? I'm running into the same problem where if the credit card is invalid, it doesn't take you back to the form and there is no way for the user to know if their payment was accepted or not.
Hi ctecha,
You need to use the "Extra after onsubmit code" box and check the result from Authorize.net. Then you can send an appropriate message and redurect back to the form if you need to do so.
Bob
You need to use the "Extra after onsubmit code" box and check the result from Authorize.net. Then you can send an appropriate message and redurect back to the form if you need to do so.
Bob
Firstly kudos to gerryf this is an excellent guide.
I have one question I've been unable to find an answer to on the forums thus far and this seems like the best thread to ask it in.
How to I use the A.net plug in with an A.net developer account?
As far as I can tell the only thing that changes is that I must somehow post to https://test.authorize.net/gateway/transact.dll instead of the plug in default. What I can't figure out how to do is change the post location within the plug in.
I have one question I've been unable to find an answer to on the forums thus far and this seems like the best thread to ask it in.
How to I use the A.net plug in with an A.net developer account?
As far as I can tell the only thing that changes is that I must somehow post to https://test.authorize.net/gateway/transact.dll instead of the plug in default. What I can't figure out how to do is change the post location within the plug in.
Hi DarksteelBlade,
Looking at the Plug-in code I think that setting 'Testing' to 'Yes' on the Authorize.net tab should make the change for you.
Bob
Looking at the Plug-in code I think that setting 'Testing' to 'Yes' on the Authorize.net tab should make the change for you.
Bob
Hi GreyHead,
I have three questions to ask.
Question (1)
I'm having an error " The merchant login ID or password is invalid or the account is inactive. "
I'm using Authorize Test Mode.
Could you please advise me How could i sort out that error ?
Question (2)
I have read the following sentence that you replied to ctecha.
"You need to use the "Extra after onsubmit code" box and check the result from Authorize.net. Then you can send an appropriate message and redirect back to the form if you need to do so."
Please tell me What should i need to write inside "Extra after onsubmit code" in detail ?
Question (3)
I feel surprised that why don't have CVVS in Authorize.net plugin config ? is not that CVVS ( three digit no) important for online payment transaction ? If any idea, Please help to me.
I'm very newbie in Authorize.net & chronoForm & programming 😢
So, Please explain in details to me. Thank you !
Regards,
Nge
I have three questions to ask.
Question (1)
I'm having an error " The merchant login ID or password is invalid or the account is inactive. "
I'm using Authorize Test Mode.
Could you please advise me How could i sort out that error ?
Question (2)
I have read the following sentence that you replied to ctecha.
"You need to use the "Extra after onsubmit code" box and check the result from Authorize.net. Then you can send an appropriate message and redirect back to the form if you need to do so."
Please tell me What should i need to write inside "Extra after onsubmit code" in detail ?
Question (3)
I feel surprised that why don't have CVVS in Authorize.net plugin config ? is not that CVVS ( three digit no) important for online payment transaction ? If any idea, Please help to me.
I'm very newbie in Authorize.net & chronoForm & programming 😢
So, Please explain in details to me. Thank you !
Regards,
Nge
@ngenge regarding Question 3.
You do not always need the CVV. It depends on your merchant account provider who uses Authorize.net. You should check with them to see what is needed to get the lowest transaction fee. This may be different depending on which country the merchant account is, international or domestic cards, etc.
There is also Address Verification System (AVS) which verifies credit cards based on the billing address for the credit card.
I hope this helps.
You do not always need the CVV. It depends on your merchant account provider who uses Authorize.net. You should check with them to see what is needed to get the lowest transaction fee. This may be different depending on which country the merchant account is, international or domestic cards, etc.
There is also Address Verification System (AVS) which verifies credit cards based on the billing address for the credit card.
I hope this helps.
I have a question on this. How does one get the form to not be submitted if authorize.net doesn't return a successful result?
Thanks
Pab
Thanks
Pab
Hi Pab,
The form will have been submitted for the plug-in to have been triggered. You need to save the form data with an 'unpaid' status. Then on the reply from Authorise.net you can take approproate action to handle either case.
Bob
The form will have been submitted for the plug-in to have been triggered. You need to save the form data with an 'unpaid' status. Then on the reply from Authorise.net you can take approproate action to handle either case.
Bob
Thanks for your reply Bob. I'm brand new to Chronoforms. Is there any documentation on how to do this? Or an example somewhere? I saw a couple of posts that suggested editing a core Chronoforms file, but they were from 2008, so I wasn't sure if they still applied.
Thanks a million,
Paul
Thanks a million,
Paul
Hi Paul,
Which version of ChronoForms are you using?
I've never tried to do this (I rarely use Authorize.net) so don't have much to add to the Tutorial here. I can probably work it out but it's not a 5 minute job :-(
Bob
Which version of ChronoForms are you using?
I've never tried to do this (I rarely use Authorize.net) so don't have much to add to the Tutorial here. I can probably work it out but it's not a 5 minute job :-(
Bob
Hi Bob,
I'm running Chronoforms 3.2 on Joomla 1.5
Is there a tutorial? I looked here http://www.chronoengine.com/tutorials/153-v3-tutorials.html and didn't see one.
Thanks again,
Pab
I'm running Chronoforms 3.2 on Joomla 1.5
Is there a tutorial? I looked here http://www.chronoengine.com/tutorials/153-v3-tutorials.html and didn't see one.
Thanks again,
Pab
Bob,
OK. I read through that and it doesn't say anything about displaying the results if the person's credit card is not approved so that they can change them in the form. I did find this thread http://www.chronoengine.com/forums/index.php?option=com_chronoforums&cont=posts&f=9&t=11589 that talks about this same problem, but it's from 2008 and 2009 and I assumed that the plugin would have been updated by now. Do you know if it has been?
Thanks a million,
Pab
OK. I read through that and it doesn't say anything about displaying the results if the person's credit card is not approved so that they can change them in the form. I did find this thread http://www.chronoengine.com/forums/index.php?option=com_chronoforums&cont=posts&f=9&t=11589 that talks about this same problem, but it's from 2008 and 2009 and I assumed that the plugin would have been updated by now. Do you know if it has been?
Thanks a million,
Pab
An update on this for anyone who stumbles across this thread and needs the same thing (I imagine that every single person who uses this plugin would want this, actually, so hopefully this saves some folks the several hours that I've spent hunting this down).
I used the following code in the "Before Sending Email" section of the "Form Code" tab and it works great:
Cheers,
Pab
I used the following code in the "Before Sending Email" section of the "Form Code" tab and it works great:
<?php
$MyPlugins =& CFPlugins::getInstance($MyForm->formrow->id);
$MyPlugins->runPlugin('after_email', array('ONSUBMIT', 'ONLOADONSUBMIT'), 'cf_Authorize_dotnet');
if($MyPlugins->cf_Authorize_dotnet['response_code'] == '1'){
echo "Thank you for your purchase. You will be receiving a confirmation email shortly";
$MyFormEmails =& CFEMails::getInstance($MyForm->formrow->id);
$MyFormEmails->setEmailData(1, 'enabled', '1');
$MyFormEmails->sendEmails($MyForm, $MyFormEmails->emails);
}else{
$MyForm->addErrorMsg( 'An error occured with the Credit Card Processing:<br />'.$MyPlugins->cf_Authorize_dotnet['response_code'].': '.$MyPlugins->cf_Authorize_dotnet['response_reason_text'] );
$MyForm->haltFunction["autogenerated_after_email"] = true;
}
?>
Cheers,
Pab
Hi watermelon503,
This is great! It definitely gives feedback from the AN site and it prevents the confirmation email from being sent. However, I get an ERROR w/ the reason as "YOUR TRANSACTION HAS BEEN APPROVED" even if the reason code is "1". Is there more to do? Does every AN field need to be filled?
Thanks,
CRES
This is great! It definitely gives feedback from the AN site and it prevents the confirmation email from being sent. However, I get an ERROR w/ the reason as "YOUR TRANSACTION HAS BEEN APPROVED" even if the reason code is "1". Is there more to do? Does every AN field need to be filled?
Thanks,
CRES
Yes - I got the same thing, and eventually I figured out that the response that Auth.net sends when the transaction is approved is "Approved" and not "1", so I ended up editing the code as follows (we have some $0 transactions that need to not go to auth.net, hence the conditional for the amount field):
<?php
if ($_POST['amount']>0) {
$MyPlugins =& CFPlugins::getInstance($MyForm->formrow->id);
$MyPlugins->runPlugin('after_email', array('ONSUBMIT', 'ONLOADONSUBMIT'), 'cf_Authorize_dotnet');
if($MyPlugins->cf_Authorize_dotnet['response_code'] == '1' ||
$MyPlugins->cf_Authorize_dotnet['response_code'] == 'Approved') {
echo "Thank you for your purchase. You will be receiving a confirmation email shortly";
$MyFormEmails =& CFEMails::getInstance($MyForm->formrow->id);
$MyFormEmails->setEmailData(1, 'enabled', '1');
$MyFormEmails->sendEmails($MyForm, $MyFormEmails->emails);
} else {
$MyForm->addErrorMsg( 'An error occured with the Credit Card Processing:<br />'
.$MyPlugins->cf_Authorize_dotnet['response_code'].': '
.$MyPlugins->cf_Authorize_dotnet['response_reason_text'] );
$MyForm->haltFunction["autogenerated_after_email"] = true;
}
} // end post amount check
?>
Hello,
Thanks watermelon503. Is there no way to prevent a confirming email to be sent if there is an error with the credit card processing? It seems that while I'm getting the correct Approvals/Denials I'm still getting the confirmation email in both cases.
Bob, I saw that you mentioned something about 'unpaid' status. Can I possibly stop the email as the whole code is in the 'before sending email'?
It seems that it should stop the email, but then again the echo statements do not execute either.
Any help would be appreciated.
Thanks,
Marty
Thanks watermelon503. Is there no way to prevent a confirming email to be sent if there is an error with the credit card processing? It seems that while I'm getting the correct Approvals/Denials I'm still getting the confirmation email in both cases.
Bob, I saw that you mentioned something about 'unpaid' status. Can I possibly stop the email as the whole code is in the 'before sending email'?
It seems that it should stop the email, but then again the echo statements do not execute either.
Any help would be appreciated.
Thanks,
Marty
Hi Marty,
I think that if you set the emails to 'disabled' in the Email Setup Property box, then they will only be sent when the code sets them back to 'enabled'.
Bob
I think that if you set the emails to 'disabled' in the Email Setup Property box, then they will only be sent when the code sets them back to 'enabled'.
Bob
There must be something custom about your email setup? Mine works as you would expect.
Also, you have to have the code in the "Before" box.
Good luck!
Pab
Also, you have to have the code in the "Before" box.
Good luck!
Pab
Thanks Bob! That solve the emailing issue. It all works exactly as it should.
Thanks!
Marty
Thanks!
Marty
Thanks so much for putting all this together! I was able to get everything working for my client perfectly.
Hello everyone,
I am trying to use the API but having a bit trouble using the sandbox account.
I have everything set correctly but I am getting " The merchant login ID or password is invalid or the account is inactive. " error.
I'm using Authorize Sandbox account. Setting TEST mode on and off doesn't change it.
Any idea how to resolve this? It might be a problem that will go away if I use the real account but I really need to sandbox first.
I am trying to use the API but having a bit trouble using the sandbox account.
I have everything set correctly but I am getting " The merchant login ID or password is invalid or the account is inactive. " error.
I'm using Authorize Sandbox account. Setting TEST mode on and off doesn't change it.
Any idea how to resolve this? It might be a problem that will go away if I use the real account but I really need to sandbox first.
This topic is locked and no more replies can be posted.