[ic] RFC: Payment.pm map_actual() modification to preserver empty b_address2

John Young john_young at sonic.net
Fri Sep 5 02:58:48 EDT 2003


In Payment.pm, map_actual() creates %actual for data submittal to 
payment gateways.

It performs a nice fallback of looking in $::Values, then \%CGI::values, 
and lastly
filling in any b_ variables with values from non-b_ variables if the b_ 
variable is
empty (ie, if 'b_address1' has no value, it falls back to using the 
'address1' value).

That is fine mostly, except in a case such as the b_ variables are 
filled out as
you wish, and you have intentionally left b_address2 empty.  If address2 
contains a
value, $actual{b_address2} is set to address2 (which is not desired). 
This only
affects what is sent to the payment gateway, so it's not a big deal, for 
the most part.
I only noticed the problem when reviewing receipts from the payment gateway.

I have modified my Payment.pm as follows:

--- Payment.pm.orig	Thu Dec 12 19:22:27 2002
+++ Payment.pm	Fri Sep  5 01:34:50 2003
@@ -182,6 +182,7 @@
  	foreach $key (keys %map) {
  		$actual{$key} = $vref->{$map{$key}} || $cref->{$key}
  			and next;
+		next if ( $::Variable->{BILLING_NULL_OKAY} && 
$::Variable->{BILLING_NULL_OKAY} =~ /\b$key\b/ );
  		my $secondary = $key;
  		next unless $secondary =~ s/^b_//;
  		$actual{$key} = $vref->{$map{$secondary}} || $cref->{$map{$secondary}};


...and added to catalog.cfg:

Variable BILLING_NULL_OKAY  b_company b_address2

(even though 'company' and 'b_company' are not in the list through which
map_actual() iterates at the moment)


Any comments or suggestions for a better solution are welcome!

John Young



More information about the interchange-users mailing list