Adding price and discount configuration.
This commit is contained in:
parent
dec5cc34f8
commit
449b074f53
@ -21,6 +21,7 @@ sub startup ($self) {
|
|||||||
|
|
||||||
# Normal route to controller
|
# Normal route to controller
|
||||||
$r->get('/get_pay_url/:uuid')->to('Main#get_url');
|
$r->get('/get_pay_url/:uuid')->to('Main#get_url');
|
||||||
|
$r->get('/price/:uuid')->to('Main#price');
|
||||||
$r->get('/set_paid/:uuid')->to('Main#set_paid');
|
$r->get('/set_paid/:uuid')->to('Main#set_paid');
|
||||||
$r->get('/get_paid/:uuid')->to('Main#get_paid');
|
$r->get('/get_paid/:uuid')->to('Main#get_paid');
|
||||||
}
|
}
|
||||||
|
@ -15,42 +15,90 @@ use Data::Dumper;
|
|||||||
|
|
||||||
use MakeThemPay::DB;
|
use MakeThemPay::DB;
|
||||||
|
|
||||||
|
sub price($self) {
|
||||||
|
my $uuid = $self->param('uuid');
|
||||||
|
my ( $price, $discount );
|
||||||
|
eval { $self->_insert_license( $uuid, 0 ); };
|
||||||
|
if ($@) {
|
||||||
|
warn $@;
|
||||||
|
}
|
||||||
|
eval { ( $price, $discount ) = $self->_get_real_price; };
|
||||||
|
if ($@) {
|
||||||
|
warn $@;
|
||||||
|
$self->res->code(500);
|
||||||
|
$self->render( json => undef );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return $self->render(
|
||||||
|
json => {
|
||||||
|
price => $price,
|
||||||
|
discount => $discount,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _get_real_price($self) {
|
||||||
|
my $price = $self->config->{price};
|
||||||
|
my $discount = $self->config->{discount};
|
||||||
|
if ( !defined $price
|
||||||
|
|| !defined $discount
|
||||||
|
|| $discount > 99
|
||||||
|
|| $discount < 0 )
|
||||||
|
{
|
||||||
|
die
|
||||||
|
"Bad price and/or discount format price: $price discount: $discount";
|
||||||
|
}
|
||||||
|
my $discounted_price = $price - ( ( $price * $discount ) / 100 );
|
||||||
|
if (!wantarray) {
|
||||||
|
return $discounted_price;
|
||||||
|
}
|
||||||
|
return ( $discounted_price, $discount );
|
||||||
|
}
|
||||||
|
|
||||||
sub get_paid($self) {
|
sub get_paid($self) {
|
||||||
my $uuid = $self->param('uuid');
|
my $uuid = $self->param('uuid');
|
||||||
my $dbh = MakeThemPay::DB->connect;
|
my $dbh = MakeThemPay::DB->connect;
|
||||||
my $license = $dbh->selectrow_hashref('SELECT paid FROM licenses WHERE uuid = ?;', {}, $uuid);
|
my $license =
|
||||||
if (!defined $license) {
|
$dbh->selectrow_hashref( 'SELECT paid FROM licenses WHERE uuid = ?;',
|
||||||
return $self->render(json => $JSON::false);
|
{}, $uuid );
|
||||||
|
if ( !defined $license ) {
|
||||||
|
return $self->render( json => $JSON::false );
|
||||||
}
|
}
|
||||||
if (!$license->{paid}) {
|
if ( !$license->{paid} ) {
|
||||||
return $self->render(json => $JSON::false);
|
return $self->render( json => $JSON::false );
|
||||||
}
|
}
|
||||||
return $self->render(json => $JSON::true);
|
return $self->render( json => $JSON::true );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _insert_license( $self, $uuid, $is_paid ) {
|
||||||
|
my $dbh = MakeThemPay::DB->connect;
|
||||||
|
$dbh->do( 'REPLACE INTO licenses (uuid, paid) VALUES (?, ?);',
|
||||||
|
{}, $uuid, $is_paid );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub set_paid($self) {
|
sub set_paid($self) {
|
||||||
my $uuid = $self->param('uuid');
|
my $uuid = $self->param('uuid');
|
||||||
my $dbh = MakeThemPay::DB->connect;
|
eval { $self->_insert_license( $uuid, 1 ); };
|
||||||
eval {
|
|
||||||
$dbh->do('INSERT INTO licenses (uuid, paid) VALUES (?, ?);', {}, $uuid, 1);
|
|
||||||
};
|
|
||||||
if ($@) {
|
if ($@) {
|
||||||
warn $@;
|
warn $@;
|
||||||
return $self->render(text => 'You already paid, if you are unable to use the program contact sergiotarxz@posteo.net');
|
return $self->render( text =>
|
||||||
|
'You already paid, if you are unable to use the program contact sergiotarxz@posteo.net'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return $self->render(text => 'You just paid, if you are unable to use the program after a few seconds contact sergiotarxz@posteo.net');
|
return $self->render( text =>
|
||||||
|
'You just paid, if you are unable to use the program after a few seconds contact sergiotarxz@posteo.net'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub get_url ($self) {
|
sub get_url ($self) {
|
||||||
my $uuid = $self->param('uuid');
|
my $uuid = $self->param('uuid');
|
||||||
my $ua = Mojo::UserAgent->new;
|
my $ua = Mojo::UserAgent->new;
|
||||||
my $product_name = "Hiperthermia product license";
|
my $product_name = "Hiperthermia product license";
|
||||||
my $product_id = "$uuid-product-license-exd-".int(rand(1000000000));
|
my $product_id = "$uuid-product-license-exd-" . int( rand(1000000000) );
|
||||||
my $authorization =
|
my $authorization =
|
||||||
'Basic ' . encode_base64url( $self->config->{stripe_secret} );
|
'Basic ' . encode_base64url( $self->config->{stripe_secret} );
|
||||||
chomp $authorization;
|
chomp $authorization;
|
||||||
|
|
||||||
say $authorization;
|
|
||||||
my $result = $ua->post(
|
my $result = $ua->post(
|
||||||
'https://api.stripe.com/v1/products' => {
|
'https://api.stripe.com/v1/products' => {
|
||||||
Authorization => $authorization
|
Authorization => $authorization
|
||||||
@ -60,19 +108,17 @@ sub get_url ($self) {
|
|||||||
id => $product_id,
|
id => $product_id,
|
||||||
}
|
}
|
||||||
)->result;
|
)->result;
|
||||||
print Data::Dumper::Dumper $result->json;
|
|
||||||
$result = $ua->post(
|
$result = $ua->post(
|
||||||
'https://api.stripe.com/v1/prices' => {
|
'https://api.stripe.com/v1/prices' => {
|
||||||
Authorization => $authorization
|
Authorization => $authorization
|
||||||
},
|
},
|
||||||
form => {
|
form => {
|
||||||
currency => 'eur',
|
currency => 'eur',
|
||||||
unit_amount => '500',
|
unit_amount => int($self->_get_real_price),
|
||||||
product => $product_id,
|
product => $product_id,
|
||||||
}
|
}
|
||||||
)->result;
|
)->result;
|
||||||
my $json = $result->json;
|
my $json = $result->json;
|
||||||
print Data::Dumper::Dumper $json;
|
|
||||||
my $price_id = $json->{id};
|
my $price_id = $json->{id};
|
||||||
|
|
||||||
if ( !defined $price_id ) {
|
if ( !defined $price_id ) {
|
||||||
@ -84,14 +130,13 @@ sub get_url ($self) {
|
|||||||
Authorization => $authorization
|
Authorization => $authorization
|
||||||
},
|
},
|
||||||
form => {
|
form => {
|
||||||
'line_items[0][price]' => $price_id,
|
'line_items[0][price]' => $price_id,
|
||||||
'line_items[0][quantity]' => 1,
|
'line_items[0][quantity]' => 1,
|
||||||
'after_completion[type]' => 'redirect',
|
'after_completion[type]' => 'redirect',
|
||||||
'after_completion[redirect][url]' => $base_url."/set_paid/$uuid",
|
'after_completion[redirect][url]' => $base_url . "/set_paid/$uuid",
|
||||||
'automatic_tax[enabled]' => 'true',
|
'automatic_tax[enabled]' => 'true',
|
||||||
}
|
}
|
||||||
)->result;
|
)->result;
|
||||||
print Data::Dumper::Dumper $result->json;
|
|
||||||
my $url = $result->json->{url};
|
my $url = $result->json->{url};
|
||||||
if ( !defined $url ) {
|
if ( !defined $url ) {
|
||||||
die 'Unable to get url';
|
die 'Unable to get url';
|
||||||
|
@ -3,3 +3,5 @@ secrets:
|
|||||||
- c930c669dd826bd844b8addabc2cc32ceb920e16
|
- c930c669dd826bd844b8addabc2cc32ceb920e16
|
||||||
stripe_secret: <super_secret>
|
stripe_secret: <super_secret>
|
||||||
base-url: 'https://exd.sergiotarxz.me'
|
base-url: 'https://exd.sergiotarxz.me'
|
||||||
|
price: 500
|
||||||
|
discount: 50
|
||||||
|
Loading…
Reference in New Issue
Block a user