[interchange] GatewayLog adjustments
Mark Johnson <[email protected]> Sat, 06 Jan 2018 19:13:51 +0000
| Newsgroups | gmane.comp.web.interchange.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit b18828b0be4b57eb905b16ad98d359d0ab57c509 Author: Mark Johnson <[email protected]> Date: Sat Jan 6 14:08:03 2018 -0500 GatewayLog adjustments * Add fallback to session ID in PayflowPro * Allow arbitrary attributes to be added to the Vend::Payment::GatewayLog object. * Pull email field in PaypalExpress directly from $Values; in testing, $actual and $opt->{actual} were undefined. * Field modifications for gateway log + Remove order_md5 + Add amount, host_ip, username + Create cart_md5 that hashes $Vend::Items if it has any items. Otherwise, left blank. dist/strap/dbconf/mysql/gateway_log.mysql | 2 -- dist/strap/dbconf/sqlite/gateway_log.lite | 2 -- dist/strap/products/gateway_log.txt | 2 +- lib/Vend/Payment/AuthorizeNet.pm | 26 +++++++++++++++----------- lib/Vend/Payment/Braintree.pm | 26 +++++++++++++++----------- lib/Vend/Payment/CyberSource.pm | 26 +++++++++++++++----------- lib/Vend/Payment/GatewayLog.pm | 15 ++++++++++----- lib/Vend/Payment/PayflowPro.pm | 26 +++++++++++++++----------- lib/Vend/Payment/PaypalExpress.pm | 28 ++++++++++++++++------------ 9 files changed, 87 insertions(+), 66 deletions(-) --- diff --git a/dist/strap/dbconf/mysql/gateway_log.mysql b/dist/strap/dbconf/mysql/gateway_log.mysql index e08f7e5..0f351b9 100644 --- a/dist/strap/dbconf/mysql/gateway_log.mysql +++ b/dist/strap/dbconf/mysql/gateway_log.mysql @@ -3,7 +3,6 @@ Database gateway_log gateway_log.txt __SQLDSN__ Database gateway_log DEFAULT_TYPE text not null default '' Database gateway_log AUTO_SEQUENCE 1 Database gateway_log KEY gateway_log_id -Database gateway_log COLUMN_DEF "order_md5=varchar(32) not null default ''" Database gateway_log COLUMN_DEF "request_date=varchar(32) not null default ''" Database gateway_log COLUMN_DEF "request_id=varchar(255) not null default ''" Database gateway_log COLUMN_DEF "order_number=varchar(32) not null default ''" @@ -12,5 +11,4 @@ Database gateway_log INDEX request_date Database gateway_log INDEX request_id Database gateway_log INDEX order_number Database gateway_log INDEX email -Database gateway_log INDEX order_md5 Database gateway_log NO_ASCII_INDEX 1 diff --git a/dist/strap/dbconf/sqlite/gateway_log.lite b/dist/strap/dbconf/sqlite/gateway_log.lite index e08f7e5..0f351b9 100644 --- a/dist/strap/dbconf/sqlite/gateway_log.lite +++ b/dist/strap/dbconf/sqlite/gateway_log.lite @@ -3,7 +3,6 @@ Database gateway_log gateway_log.txt __SQLDSN__ Database gateway_log DEFAULT_TYPE text not null default '' Database gateway_log AUTO_SEQUENCE 1 Database gateway_log KEY gateway_log_id -Database gateway_log COLUMN_DEF "order_md5=varchar(32) not null default ''" Database gateway_log COLUMN_DEF "request_date=varchar(32) not null default ''" Database gateway_log COLUMN_DEF "request_id=varchar(255) not null default ''" Database gateway_log COLUMN_DEF "order_number=varchar(32) not null default ''" @@ -12,5 +11,4 @@ Database gateway_log INDEX request_date Database gateway_log INDEX request_id Database gateway_log INDEX order_number Database gateway_log INDEX email -Database gateway_log INDEX order_md5 Database gateway_log NO_ASCII_INDEX 1 diff --git a/dist/strap/products/gateway_log.txt b/dist/strap/products/gateway_log.txt index a04a22b..e2e2a45 100644 --- a/dist/strap/products/gateway_log.txt +++ b/dist/strap/products/gateway_log.txt @@ -1 +1 @@ -gateway_log_id trans_type processor catalog order_md5 result_code result_subcode reason_code response_msg request_id order_number email session_id request_source request_date request_duration request response +gateway_log_id trans_type processor catalog cart_md5 result_code result_subcode reason_code response_msg request_id order_number email amount session_id host_ip username request_source request_date request_duration request response diff --git a/lib/Vend/Payment/AuthorizeNet.pm b/lib/Vend/Payment/AuthorizeNet.pm index 3faecc6..22e772f 100644 --- a/lib/Vend/Payment/AuthorizeNet.pm +++ b/lib/Vend/Payment/AuthorizeNet.pm @@ -708,20 +708,24 @@ sub log_it { email => $request->{x_Email} || $response->{x_email} || '', request => ::uneval($request) || '', response => ::uneval($response) || '', - session_id => $::Session->{id}, + session_id => $::Session->{id} || '', request_source => $self->source, + amount => $request->{x_Amount} || '', + host_ip => $::Session->{shost} || $::Session->{ohost} || '', + username => $::Session->{username} || '', + cart_md5 => '', ); - $fields{order_md5} = - Digest::MD5::md5_hex( - $request->{x_Email}, - $request->{x_Type}, - $request->{x_Auth_Code}, - $request->{x_Amount}, - $::Session->{id}, - map { ($_->{code}, $_->{quantity}) } @$Vend::Items - ) - ; + if (@$Vend::Items) { + my $dump = Data::Dumper + -> new($Vend::Items) + -> Indent(0) + -> Terse(1) + -> Deepcopy(1) + -> Sortkeys(1) + ; + $fields{cart_md5} = Digest::MD5::md5_hex($dump->Dump); + } $self->write(\%fields); } diff --git a/lib/Vend/Payment/Braintree.pm b/lib/Vend/Payment/Braintree.pm index 738cdde..8561474 100644 --- a/lib/Vend/Payment/Braintree.pm +++ b/lib/Vend/Payment/Braintree.pm @@ -1242,19 +1242,23 @@ sub log_it { email => $opt->{actual}{email} || '', request => ::uneval($request) || '', response => ::uneval($thinned_response) || '', - session_id => $::Session->{id}, + session_id => $::Session->{id} || '', + amount => $request->{args}{AMT} || $request->{args}{amount} || '', + host_ip => $::Session->{shost} || $::Session->{ohost} || '', + username => $::Session->{username} || '', + cart_md5 => '', ); - $fields{order_md5} = - Digest::MD5::md5_hex( - $opt->{actual}{email}, - $opt->{transtype} || 'x', - $request->{args}{ORIGID}, - $request->{args}{AMT} || $request->{args}{amount}, - $::Session->{id}, - map { ($_->{code}, $_->{quantity}) } @$Vend::Items - ) - ; + if (@$Vend::Items) { + my $dump = Data::Dumper + -> new($Vend::Items) + -> Indent(0) + -> Terse(1) + -> Deepcopy(1) + -> Sortkeys(1) + ; + $fields{cart_md5} = Digest::MD5::md5_hex($dump->Dump); + } $self->write(\%fields); } diff --git a/lib/Vend/Payment/CyberSource.pm b/lib/Vend/Payment/CyberSource.pm index 861dab0..923ad78 100644 --- a/lib/Vend/Payment/CyberSource.pm +++ b/lib/Vend/Payment/CyberSource.pm @@ -2622,20 +2622,24 @@ sub log_it { email => $request->{billTo_email} || '', request => ::uneval($request) || '', response => ::uneval($response) || '', - session_id => $::Session->{id}, + session_id => $::Session->{id} || '', request_source => $self->source, + amount => $request->{purchaseTotals_grandTotalAmount} || '', + host_ip => $::Session->{shost} || $::Session->{ohost} || '', + username => $::Session->{username} || '', + cart_md5 => '', ); - $fields{order_md5} = - Digest::MD5::md5_hex( - $request->{billTo_email}, - $self->{trans_type}, - $self->{origid}, - $request->{purchaseTotals_grandTotalAmount}, - $::Session->{id}, - map { ($_->{code}, $_->{quantity}) } @$Vend::Items - ) - ; + if (@$Vend::Items) { + my $dump = Data::Dumper + -> new($Vend::Items) + -> Indent(0) + -> Terse(1) + -> Deepcopy(1) + -> Sortkeys(1) + ; + $fields{cart_md5} = Digest::MD5::md5_hex($dump->Dump); + } $self->write(\%fields); } diff --git a/lib/Vend/Payment/GatewayLog.pm b/lib/Vend/Payment/GatewayLog.pm index 3c9e4bb..cf7a4cc 100644 --- a/lib/Vend/Payment/GatewayLog.pm +++ b/lib/Vend/Payment/GatewayLog.pm @@ -9,23 +9,27 @@ sub new { my ($class, $opt) = @_; #::logDebug("Called in class $class, with opt hash %s", ::uneval($opt)); my $self = bless ({}, $class); - $self->init($opt); + $self->init(%{$opt || {}}); $Vend::Payment::Global_Timeout = undef; return $self; } sub init { my $self = shift; - my $opt = shift; - $self->{_log_table} = $opt->{LogTable} || 'gateway_log'; - $self->{_enabled} = $opt->{Enabled} || ''; - $self->{_source} = $opt->{Source} || ''; + my %opt = @_; + $self->{_log_table} = delete ($opt{LogTable}) || 'gateway_log'; + $self->{_enabled} = delete ($opt{Enabled}) || ''; + $self->{_source} = delete ($opt{Source}) || ''; unless (length ($self->{_source})) { my $host = `hostname -s`; chomp ($self->{_source} = $host); } + if (my @k = keys %opt) { + @$self{@k} = @opt{@k}; + } + return 1; } @@ -120,6 +124,7 @@ sub write { my $self = shift; my $data = shift; +#::logDebug('Ready to write: %s', ::uneval($data)); eval { my $table = $self->table; my $db = ::database_exists_ref($table) diff --git a/lib/Vend/Payment/PayflowPro.pm b/lib/Vend/Payment/PayflowPro.pm index 796136c..7ae64ef 100644 --- a/lib/Vend/Payment/PayflowPro.pm +++ b/lib/Vend/Payment/PayflowPro.pm @@ -911,20 +911,24 @@ sub log_it { email => $request->{EMAIL} || '', request => ::uneval($request) || '', response => ::uneval($response) || '', - session_id => $::Session->{id}, + session_id => $::Session->{id} || '', request_source => $self->source, + amount => $request->{AMT} || '', + host_ip => $::Session->{shost} || $::Session->{ohost} || '', + username => $::Session->{username} || '', + cart_md5 => '', ); - $fields{order_md5} = - Digest::MD5::md5_hex( - $request->{EMAIL}, - $request->{TRXTYPE}, - $request->{ORIGID}, - $request->{AMT}, - $::Session->{id}, - map { ($_->{code}, $_->{quantity}) } @$Vend::Items - ) - ; + if (@$Vend::Items) { + my $dump = Data::Dumper + -> new($Vend::Items) + -> Indent(0) + -> Terse(1) + -> Deepcopy(1) + -> Sortkeys(1) + ; + $fields{cart_md5} = Digest::MD5::md5_hex($dump->Dump); + } $self->write(\%fields); } diff --git a/lib/Vend/Payment/PaypalExpress.pm b/lib/Vend/Payment/PaypalExpress.pm index 10f1f47..ca709be 100644 --- a/lib/Vend/Payment/PaypalExpress.pm +++ b/lib/Vend/Payment/PaypalExpress.pm @@ -1262,7 +1262,7 @@ EOB Vend::Payment::PaypalExpress -> new({ order_number => $opt->{order_id}, - email => $opt->{actual}{email}, + email => $::Values->{email} || '', amount => $amount, Enabled => charge_param('gwl_enabled'), LogTable => charge_param('gwl_table'), @@ -2112,20 +2112,24 @@ sub log_it { email => $self->{email} || '', request => ::uneval($request) || '', response => ::uneval($response) || '', - session_id => $::Session->{id}, + session_id => $::Session->{id} || '', request_source => $self->source, + amount => $self->{amount} || '', + host_ip => $::Session->{shost} || $::Session->{ohost} || '', + username => $::Session->{username} || '', + cart_md5 => '', ); - $fields{order_md5} = - Digest::MD5::md5_hex( - $self->{email}, - $response->{DoExpressCheckoutPaymentResponseDetails}{PaymentInfo}{TransactionType}, - $::Scratch->{token}, - $self->{amount}, - $::Session->{id}, - map { ($_->{code}, $_->{quantity}) } @$Vend::Items - ) - ; + if (@$Vend::Items) { + my $dump = Data::Dumper + -> new($Vend::Items) + -> Indent(0) + -> Terse(1) + -> Deepcopy(1) + -> Sortkeys(1) + ; + $fields{cart_md5} = Digest::MD5::md5_hex($dump->Dump); + } $self->write(\%fields); }