OK. I had a nightmare of a time setting up authorize.net for the RS Membership. I am making this post in hopes it will help someone avoid the hours I had to spend to get this working.
First note: Versions.
As of this post they are on Rev 17 of RSMembership. If you do not update your RSMembership to rev 17 prior to installing and turning on the Authnet plugin, your site will break on both the front and back. If this happens you can comment out (precede them with a #) lines 37 and 38 of the authnet plugin file found here: /plugins/system/rsmembershipauthorize.php
This will allow you to log back in and update your RSMembership to Rev 17 (or later). Once updated remove your comments - especially if you're running Joomla 1.6!
Second note: Language
When you update your RSMembership it is important to note that it will replace your language file. So if like me you've eliminated its UK venacular, you will lose those changes if you don't make a backup of them.
The current plugin for authnet does not install its language file (it was not included as a part of the install in its xml file). This results in the pay screen showing the variable names for the language items. The quick fix is to unzip the install file and copy its language file (it has a .ini extension) to your language folder found here: /language/en-GB (assuming you are using en-GB language) I don't think this will affect you if you had a previous version of the plugin installed.
Third note: Authnet settings
Authorize.net has a setting for delimiters, if these were configured for a different server or application prior to this use it is likely your form will not get past the "pay" page and confirm the order under the automatic settings. You will see the error image with a note stating "Transaction Approved" or something like that. The big problem is that people can keep hitting your pay button and re-running the transaction and it will only appear as one pending transaction in your RSMembership.
To fix this, make sure your Direct Response Setting is set to use delimiters. Use a pipe "|" as a field separator and no encapsulating characters.
Fourth note: Existing accounts
The auto user generation runs into issues when someone uses an email address twice. I believe it is supposed to report back an error that it is in use, but mine did not. Instead it populated the new membership order with the profile information of the other user with the same address. The only fix I had for this was to make sure my user list was limited to me only and no chance of an email address being used twice. I also put an alert into the language file alongside the email address label telling people to use their user's unique email address"
Fifth note: Communications
If you have the Joomla Global setting set for users to authenticate their email (have it send them an activation email) its important to note you can't modify this email in the authnet messages tab. It is hidden in the language file. If you need to change its language do so with care to the %S markers - taking them out of order will screw it up. Those insert user information and are hard coded in that order. I would just turn off the authentication.
Making it better
Nothing ever works as well as you want, and RSMembership has many shortcomings compared to the quality of some RSJoomla's other components. It doesn't hold a candle to RSForm pro. It's forms are formatted in tables, and have no where near the customization and power that RSForm has, nor does it have the attention to detail.
This really shows in the authnet plugin. I could not get their current code to actually post any reference into the hash column of my transactions. This made it impossible to track what payment belonged to which user, especially if that user ever changed their email address and/or it was paid for using a card in someone else's name.
To fix this for myself, I modified the plugin file with this code starting around line 409. NOTE: If you use this, make a backup of your file FIRST.
// This line takes the response and breaks it into an array using the specified delimiting character
$response = explode('|',$response);
if ($response[0] == 1)
{
if (!$is_recurring)
{
$this->emptyDelayedTransaction();
#$row->hash = $response[6];
$row->hash = "Invoice #: ".substr(md5($row->id.' '.$this->_params->get('x_login').' '.$this->_params->get('x_tran_key')),0,20); // order num (unique)
$row->response_log = "This order was processed with a card in the name of ".$cc_fname." ".$cc_lname; // trying to give a little more correlation
$row->store();
RSMembership::finalize($row->get('id'));
RSMembership::approve($row->get('id'));
}
What the above will do is insert the same invoice number pushed to authnet and then record the card holder's name in the Log of the transaction. This gives you two solid points of reference, and should make it so 99% of the time you can just look at the record in RSMembership without having to dig through your transactions in Authnet to see who's card was used to pay for the membership.
Was this helpful to you? I hope so.
Things I couldn't figure out how to do: post custom field data into the log as well -- any help on that would be appreciated.
Best,
Brian Greenwood
The Creative Good
http://www.thecreativegood.org