Revision 535 (by ahitrov, 2015/11/27 12:24:47) |
SSL verification test
|
package payments::Provider::PayTure;
use strict;
use warnings 'all';
use base 'payments::Provider::Base';
use Contenido::Globals;
use payments::Keeper;
use Digest::MD5;
use Data::Dumper;
use URI;
use URI::QueryParam;
our $init_url = '';
sub new {
my ($proto, %params) = @_;
my $class = ref($proto) || $proto;
my $self = {};
my $prefix = $class =~ /\:\:(\w+)$/ ? lc($1) : undef;
return unless $prefix;
$self->{payment_system} = $prefix;
$self->{app_id} = $state->{payments}->{$prefix."_app_id"};
$self->{secret} = $state->{payments}->{$prefix."_app_secret"};
$self->{currency} = $state->{payments}->{$prefix."_currency_code"};
$self->{test_mode} = $state->{payments}->{$prefix."_test_mode"};
$self->{api}{init} = 'https://sandbox.payture.com/apim/Init';
bless $self, $class;
return $self;
}
sub init {
my $self = shift;
my (%opts) = @_;
warn "PayTure Init: ".Dumper(\%opts) if $DEBUG;
### Session Type: Pay or Block
my $session_type = $opts{session_type} || 'Pay';
my $order_id = $opts{order_id};
return 0 unless $order_id;
### Сумма в копейках. Если дробное - преобразуем
my $sum = $opts{sum};
return 0 unless $sum;
if ( $sum =~ /[\.\,]/ ) {
$sum =~ s/\,/\./;
$sum = int($sum * 100);
}
my $ip = $opts{ip};
return 0 unless $ip && $ip =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/;
warn "IP: $ip\n";
### Пример: http://yoursite.com/result?orderid={orderid}&result={success}
my $url = $opts{url};
my $template = $opts{teplate};
my $lang = $opts{lang};
my $params = $opts{params};
my $ua = LWP::UserAgent->new;
$ua->agent('Mozilla/5.0');
$ua->ssl_opts( verify_hostname => 0, SSL_ca_path => '/usr/local/share/certs' );
my $req = URI->new( $self->{api}{init} );
# $req->query_param( Key => $self->id );
my @data = ( "SessionType=$session_type", "OrderId=$order_id", "Amount=$sum", "IP=$ip");
push @data, "Url=$url" if $url;
push @data, "TemplateTag=$template" if $template;
push @data, "Url=$url" if $url;
push @data, "Language=$lang" if $lang;
if ( ref $params eq 'HASH' ) {
while ( my ($param, $val) = each %$params ) {
push @data, "$param=$val";
}
}
my $data_unescaped = join ';', @data;
warn Dumper "PayTure Init data: $data_unescaped\n";
my $data_str = URI::Escape::uri_escape( $data_unescaped );
# $req->query_param( Data => $data_str );
warn "PayTure Init query: ".Dumper($req) if $DEBUG;
my $result = $ua->post( $req, Content => { Key => $self->id, Data => $data_str } );
if ( $result->code == 200 ) {
warn Dumper $result->content;
return 1;
} else {
warn Dumper $result;
warn "PayTure Init failed; ".$result->status_line."\n";
}
return 0;
}
1;