WebService-Braintree

 view release on metacpan or  search on metacpan

lib/WebService/Braintree/TransparentRedirectGateway.pm  view on Meta::CPAN

}

sub update_customer_data {
    my ($self, $params) = @_;
    $self->requires($params, qw(redirect_url customer_id));
    $params->{'kind'} = 'update_customer';
    return $self->data_string($params);
}

sub create_credit_card_data {
    my ($self, $params) = @_;
    $self->requires($params, qw(redirect_url credit_card));
    confess "ArgumentError: credit card must be associated with a customer" unless $params->{'credit_card'}->{'customer_id'};
    $params->{'kind'} = 'create_payment_method';
    return $self->data_string($params);
}

sub update_credit_card_data {
    my ($self, $params) = @_;
    $self->requires($params, qw(redirect_url payment_method_token));
    $params->{'kind'} = 'update_payment_method';
    return $self->data_string($params);
}

sub url {
    return shift->gateway->config->base_merchant_url . "/transparent_redirect_requests";
}

sub requires {
    my ($self, $params, @required) = @_;
    foreach my $field (@required) {
        confess "ArgumentError:  $field is required" unless $params->{$field}
    }
}

sub requires_type {
    my ($self, $params) = @_;
    confess "ArgumentError: Transaction type is required" unless $params->{'transaction'}->{'type'} ;
    if ($params->{'transaction'}->{'type'} ne 'sale' &&
            $params->{'transaction'}->{'type'} ne 'credit') {
        confess "ArgumentError: Transaction type must be credit or sale";
    }
}

sub time_string {
    my $dt = DateTime->now;
    return $dt->strftime("%Y%m%d%H%M%S");
}

sub data_string {
    my ($self, $params) = @_;
    $params->{'api_version'} = $self->gateway->config->api_version;
    $params->{'time'}        = time_string;
    $params->{'public_key'}  = $self->gateway->config->public_key;
    return $self->build_tr_data($params);
}

sub build_tr_data {
    my ($self, $params) = @_;
    my $query = hash_to_query_string($params);
    my $tr_hash = hexdigest($self->gateway->config->private_key, $query);
    return "$tr_hash|$query";
}

__PACKAGE__->meta->make_immutable;

1;
__END__



( run in 0.639 second using v1.01-cache-2.11-cpan-39bf76dae61 )