Author Topic: Solution: Required transaction key is empty error in ps_authorize  (Read 12048 times)

ou81aswell

  • Beginner
  • *
  • Posts: 9
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.



kts

  • Beginner
  • *
  • Posts: 13
Re: Solution: Required transaction key is empty error in ps_authorize
« Reply #1 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

haggis

  • Beginner
  • *
  • Posts: 23
Re: Solution: Required transaction key is empty error in ps_authorize
« Reply #2 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

ou81aswell

  • Beginner
  • *
  • Posts: 9
Re: Solution: Required transaction key is empty error in ps_authorize
« Reply #3 on: September 15, 2009, 20:28:56 pm »
I don't think that's the same problem.

nl94568

  • Beginner
  • *
  • Posts: 5
Re: Solution: Required transaction key is empty error in ps_authorize
« Reply #4 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.

haggis

  • Beginner
  • *
  • Posts: 23
Re: Solution: Required transaction key is empty error in ps_authorize
« Reply #5 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

ajayb

  • Beginner
  • *
  • Posts: 1
Re: Solution: Required transaction key is empty error in ps_authorize
« Reply #6 on: February 20, 2010, 08:29:20 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.

    



stAn99

  • Contributing Developer
  • Jr. Member
  • *
  • Posts: 69
    • One Page Checkout for Virtuemart 2
Re: Solution: Required transaction key is empty error in ps_authorize
« Reply #7 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:
Code: [Select]
$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(..):
Code: [Select]
$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 );
----
RuposTel.com
www.rupostel.com
Your customized checkout solution for Virtuemart