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;