use vars qw/ $VERSION $DEBUG /;
$VERSION = '0.01';
-$DEBUG = 1;
+$DEBUG = 0;
if ( $DEBUG ) {
$Data::Dumper::Sortkeys = 1;
'authorization only' => 'submit_authorization_only',
'post authorization' => 'submit_post_authorization',
'reverse authorization' => 'submit_reverse_authorization',
- 'void' => 'submit_viod',
+ 'void' => 'submit_void',
'credit' => 'submit_credit',
'tokenize' => 'submit_tokenize',
'recurring authorization' => 'submit_recurring_authorization',
=head2 submit_normal_authorization
-Compliete a payment transaction by with an API POST to B</payments>
+Complete a payment transaction by with an API POST to B</payments>
See L<https://dev.na.bambora.com/docs/references/payment_APIs/v1-0-5>
}
my $action = lc $content->{action};
+
if ( $action eq 'normal authorization' ) {
$self->path('/v1/payments');
} elsif ( $action eq 'authorization only' ) {
unless $content->{order_number};
$self->path(
- sprintf 'v1/payments/%s/completions',
+ sprintf '/v1/payments/%s/completions',
$content->{order_number}
);
});
}
-
- $self->path('/v1/payments');
-
my $response = $self->submit_api_request( $post_body );
# Error messages already populated upon failure
$self->is_success
&& (
ref $response
- && $response->{type} != 'PA'
+ && $response->{type} ne 'PA'
)
) {
# Bambora API uses nearly identical API calls for normal
=head2 submit_void
-Void a transaction
+Process a return against a transaction for the given amount
=cut
my $self = shift;
my $content = $self->{_content};
- for my $f (qw/ order_number invoice_number amount/) {
+ for my $f (qw/ order_number amount/) {
unless ( $content->{$f} ) {
$self->error_message("Cannot process void - missing required content $f");
warn $self->error_message if $DEBUG;
}
my %post = (
- order_number => $self->truncate( $content->{invoice_number}, 30 ),
+# order_number => $self->truncate( $content->{invoice_number}, 30 ),
amount => $content->{amount},
);
my $post_body = encode_json( \%post );
post_body => $post_body,
});
}
- $self->path( sprintf '/v1/payments/%s/void', $content->{order_number} );
+ $self->path( sprintf '/v1/payments/%s/returns', $content->{order_number} );
my $response = $self->submit_api_request( $post_body );
=cut
sub submit_action_unsupported {
- croak sprintf 'Action %s unsupported', shift->action
+ croak sprintf 'Action %s unsupported', shift->{_content}{action}
}
=head2 authorization_header
-Bambora POST requests authenticate via a HTTP header of the format:
+Bambora REST requests authenticate via a HTTP header of the format:
Authorization: Passcode Base64Encoded(merchant_id:passcode)
Returns a hash representing the authorization header derived from
Dies unless country is a two-letter string.
-In the future, could be extended to convert country names to their respective
+Could be extended to convert country names to their respective
country codes
See: L<https://en.wikipedia.org/wiki/ISO_3166-1>
=head2 set_expiration_month_year
-Split standard expiration field, which may be in the format
+Split B::OP expiration field, which may be in the format
MM/YY or MMYY, into separate expiry_month and expiry_year fields
Will die if values are not numeric
my $content = $self->{_content};
my $expiration = $content->{expiration};
+ unless ( $expiration ) {
+ $content->{expiry_month} = undef;
+ $content->{expiry_year} = undef;
+ return;
+ }
+
my ( $mm, $yy ) = (
$expiration =~ /\//
? split( /\//, $expiration )
=head2 set_phone_number
+Set value for field phone_number, from value in field phone
+
+Bambora API expects only digits in a phone number. Strips all non-digit
+characters
+
=cut
sub set_phone_number {
=head2 set_province
+Set value for field province, from value in field state
+
Outside the US/Canada, API expect province set to the string "--",
-otherwise to be a 2 character string
+otherwise expects a 2 character string. Value for province is
+formatted to upper case, and truncated to 2 characters.
=cut