Line # Revision Author
1 525 ahitrov package payments::Provider::PayTure;
2
3 use strict;
4 use warnings 'all';
5
6 use base 'payments::Provider::Base';
7 use Contenido::Globals;
8 use payments::Keeper;
9 use Digest::MD5;
10 use Data::Dumper;
11 use URI;
12 use URI::QueryParam;
13
14 our $init_url = '';
15
16 sub new {
17 my ($proto, %params) = @_;
18 my $class = ref($proto) || $proto;
19 my $self = {};
20 my $prefix = $class =~ /\:\:(\w+)$/ ? lc($1) : undef;
21 return unless $prefix;
22
23 $self->{payment_system} = $prefix;
24 $self->{app_id} = $state->{payments}->{$prefix."_app_id"};
25 $self->{secret} = $state->{payments}->{$prefix."_app_secret"};
26 $self->{currency} = $state->{payments}->{$prefix."_currency_code"};
27 $self->{test_mode} = $state->{payments}->{$prefix."_test_mode"};
28
29 $self->{api}{init} = 'https://sandbox.payture.com/apim/Init';
30
31 bless $self, $class;
32
33 return $self;
34 }
35
36 sub init {
37 my $self = shift;
38 my (%opts) = @_;
39
40 529 ahitrov warn "PayTure Init: ".Dumper(\%opts) if $DEBUG;
41 525 ahitrov
42 529 ahitrov ### Session Type: Pay or Block
43 my $session_type = $opts{session_type} || 'Pay';
44
45 my $order_id = $opts{order_id};
46 return 0 unless $order_id;
47
48 ### Сумма в копейках. Если дробное - преобразуем
49 my $sum = $opts{sum};
50 return 0 unless $sum;
51 525 ahitrov if ( $sum =~ /[\.\,]/ ) {
52 $sum =~ s/\,/\./;
53 $sum = int($sum * 100);
54 }
55
56 529 ahitrov my $ip = $opts{ip};
57 return 0 unless $ip && $ip =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/;
58 warn "IP: $ip\n";
59 525 ahitrov
60 529 ahitrov ### Пример: http://yoursite.com/result?orderid={orderid}&result={success}
61 my $url = $opts{url};
62 525 ahitrov
63 529 ahitrov my $template = $opts{teplate};
64 my $lang = $opts{lang};
65 my $params = $opts{params};
66
67 525 ahitrov my $ua = LWP::UserAgent->new;
68 535 ahitrov $ua->agent('Mozilla/5.0');
69 $ua->ssl_opts( verify_hostname => 0, SSL_ca_path => '/usr/local/share/certs' );
70 525 ahitrov my $req = URI->new( $self->{api}{init} );
71 535 ahitrov # $req->query_param( Key => $self->id );
72 525 ahitrov my @data = ( "SessionType=$session_type", "OrderId=$order_id", "Amount=$sum", "IP=$ip");
73 push @data, "Url=$url" if $url;
74 push @data, "TemplateTag=$template" if $template;
75 push @data, "Url=$url" if $url;
76 push @data, "Language=$lang" if $lang;
77 if ( ref $params eq 'HASH' ) {
78 while ( my ($param, $val) = each %$params ) {
79 529 ahitrov push @data, "$param=$val";
80 525 ahitrov }
81 }
82 535 ahitrov my $data_unescaped = join ';', @data;
83 warn Dumper "PayTure Init data: $data_unescaped\n";
84 my $data_str = URI::Escape::uri_escape( $data_unescaped );
85 # $req->query_param( Data => $data_str );
86 529 ahitrov warn "PayTure Init query: ".Dumper($req) if $DEBUG;
87
88 535 ahitrov my $result = $ua->post( $req, Content => { Key => $self->id, Data => $data_str } );
89 529 ahitrov if ( $result->code == 200 ) {
90 warn Dumper $result->content;
91 return 1;
92 } else {
93 535 ahitrov warn Dumper $result;
94 529 ahitrov warn "PayTure Init failed; ".$result->status_line."\n";
95 }
96 return 0;
97 525 ahitrov }
98
99 1;