VirtueMart Forum

VirtueMart 1.1.x [ Old version - no longer supported ] => Payment VM 1.1 => Authorize.net VM 1 => Topic started by: ou81aswell on July 29, 2009, 01:40:55 AM

Title: Solution: Required transaction key is empty error in ps_authorize
Post by: ou81aswell on July 29, 2009, 01:40:55 AM
Problem

VM 1.1.3

Confirm Order (final step of checkout) fails with the following error: Error: Failure in Processing the Payment. Technical Note: The required transaction key is empty! The payment method settings must be reviewed. Error: Failure in Processing the Payment (ps_authorize)

Note: The problem described here may actually generate different error messages depending upon how the disabled ps_authorize payment method (see below) is configured.

Cause

If the jos_vm_payment_method table contains more than one row where the column named payment_class is set to "ps_authorize", then the transaction MAY fail because the SQL in ps_authorize.php MIGHT select the wrong payment_method internally.

I am new to Joomla and VM but have been able to get just about everything working.

While making a change to the script called "ps_authorize.php" to make it talk to a different server that is compatible with authorize.net, I kept getting the error above whenever I tried to confirm an order.

Looking at the code I was able to track down this behaviour to an sql statement in the ps_authorize.php script at around line 273.

The problem is in the function called process_payment() at around line 250.

Specificaly the SQL statement at line 273 (my version of VM is 1.1.3), the WHERE statement does not test to see if the payment_enabled column is set to "Y".

In my case, the Where statement that was being executed was:

Select blah blah ... WHERE payment_class='ps_authorize' AND shopper_group_id='5'

I had two records (rows) in the jos_vm_payment_method table where the column named payment_class was set to "ps_authorize".

As expected, the first one was disabled because I disabled it using the control panel. The second one was enabled and was the one I had configured.

The code above found the disabled ps_authorize payment method and not the one I had setup.

The where statement should have  " AND payment_enabled = 'Y' " added to it as in:

WHERE payment_class='ps_authorize' AND shopper_group_id='5' AND payment_enabled = 'Y'


Solution 1 (simplest)

Change the disabled (unwanted) payment method's payment_class to something other than ps_authorize using the control panel.

Solution 2 (code change)

This should probably be addressed in a future release.

Change the following line in ps_authorize.php (line 274 in my case) (note this is a single line and I'm not sure if it will wrap once posted) FROM

$database->query( "SELECT ".VM_DECRYPT_FUNCTION."(payment_passkey,'".ENCODE_KEY."') as passkey FROM #__{vm}_payment_method WHERE payment_class='".$this->classname."' AND shopper_group_id='".$auth['shopper_group_id']."'" );

TO (again the next statement should be one line)

$database->query( "SELECT ".VM_DECRYPT_FUNCTION."(payment_passkey,'".ENCODE_KEY."') as passkey FROM #__{vm}_payment_method WHERE payment_class='".$this->classname."' AND shopper_group_id='".$auth['shopper_group_id']."' AND payment_enabled = 'Y'" );

I hope this helps and sorry if this is old news.


Title: Re: Solution: Required transaction key is empty error in ps_authorize
Post by: kts on September 14, 2009, 16:46:10 PM
Thanks so much for having posted this. I tried that solution and it still didn't work for me. On the suggestion of another user (http://forum.virtuemart.net/index.php?topic=26090.0;wap2), I took out the code relating to shopper groups in the ps_authorize.php file - since I have only one shopper group (default) - and it worked!

So in summary, change this code (line 269) in your ps_authorize.php file FROM

$database->query( "SELECT ".VM_DECRYPT_FUNCTION."(payment_passkey,'".ENCODE_KEY."') as passkey FROM #__{vm}_payment_method WHERE payment_class='".$this->classname."' AND shopper_group_id='".$auth['shopper_group_id']."'" );

TO

$database->query( "SELECT ".VM_DECRYPT_FUNCTION."(payment_passkey,'".ENCODE_KEY."') as passkey FROM #__{vm}_payment_method WHERE payment_class='".$this->classname."'" );

Not sure if it made a difference but right before I changed this code, I had refreshed my Authorize.net transaction key.

Virtuemart 1.1.3
Joomla 1.5.14
Title: Re: Solution: Required transaction key is empty error in ps_authorize
Post by: haggis on September 15, 2009, 20:21:38 PM
Hi ou81aswell.

please help me out. I am a newbee too.

I've still a clean installation. I tried to configure the authorize.net module. When it comes to enter the transaction key, it fails. No key has ever been accepted, neither did I receive an error message or other notices. Therefore I can't save the configuration.

Is it the same problem? How do I fix it? Any advice?

Thanks in advance
Haggis
Title: Re: Solution: Required transaction key is empty error in ps_authorize
Post by: ou81aswell on September 15, 2009, 20:28:56 PM
I don't think that's the same problem.
Title: Re: Solution: Required transaction key is empty error in ps_authorize
Post by: nl94568 on September 17, 2009, 19:52:21 PM
I was having this same problem just a couple of minutes ago and all I needed to do was add in my Joomla user password first - it then took me to a screen to enter in the code, where i had to enter in my Joomla password one more time to activate the key.

I hope this helps you out if you happen to be having the same situation I was having.
Title: Re: Solution: Required transaction key is empty error in ps_authorize
Post by: haggis on September 17, 2009, 22:24:10 PM
Yep. Thanks all for your help. Mainly it was the problem discribt above BUT also my personal problem. In one of the documents it was mentioned, but it was a small note and toooooo long ago. I honestly forget about it.

Anyway. Thanks all.

Haggis
Title: Re: Solution: Required transaction key is empty error in ps_authorize
Post by: ajayb on February 20, 2010, 08:29:20 AM
Quote from: ou81aswell on July 29, 2009, 01:40:55 AM
Problem

VM 1.1.3
administrator\components\com_virtuemart\classes\payment\ps_authorize.php

$database->query( "SELECT ".VM_DECRYPT_FUNCTION."(payment_passkey,'".ENCODE_KEY."') as passkey FROM #__{vm}_payment_method WHERE payment_class='".$this->classname."' AND shopper_group_id='".$auth['shopper_group_id']."'" );

replace with

$database->query( "SELECT ".VM_DECRYPT_FUNCTION."(payment_passkey,'".ENCODE_KEY."') as passkey FROM #__{vm}_payment_method WHERE payment_class='".$this->classname."' AND shopper_group_id='".$auth['shopper_group_id']."' AND payment_enabled = 'Y'" );

in this case solved successfully problem - Error: Failure in Processing the Payment. Technical Note: The required transaction key is empty! The payment method settings must be reviewed. Error: Failure in Processing the Payment (ps_authorize)

But Next problem
I follow this solutions but next Sorry, but the Credit Card Number you've used is a testing number! in this case i set without test mod and with test mode .
I use Credit Card Number: 4111111111111111  on authorized method
help me thanks to advance.

   


Title: Re: Solution: Required transaction key is empty error in ps_authorize
Post by: stAn99 on March 24, 2011, 14:01:33 PM
Problem: Passkey does not want to save when having a single apostrophie in the passkey.

Virtuemart: 1.1.7 (and most probably all earlier 1.1.x)

Solution:
edit \administrator\components\com_virtuemart\html\store.payment_method_keychange.php
line 63 for VM 1.1.7

change this:

$q = "UPDATE #__{vm}_payment_method ";
$q .= "SET payment_passkey = ".VM_ENCRYPT_FUNCTION."('$passkey','" . ENCODE_KEY . "')\n";
$q .= "WHERE payment_method_id='$payment_method_id';";
$db->query( $q );


to this (note $db->getEscaped(..):

$q = "UPDATE #__{vm}_payment_method ";
$q .= "SET payment_passkey = ".VM_ENCRYPT_FUNCTION."('".$db->getEscaped($passkey)."','" . ENCODE_KEY . "')\n";
$q .= "WHERE payment_method_id='$payment_method_id';";
$db->query( $q );