2020-08-14 13:36:36 +02:00
< ? php
/**
*
* Class ki skrbi za placila s kreditno kartico ( stripe ) - TODO
*
*/
use \Stripe\Stripe ;
use \Stripe\Customer ;
use \Stripe\ApiOperations\Create ;
use \Stripe\Charge ;
2020-11-10 14:15:44 +01:00
use \Stripe\StripeClient ;
2020-08-14 13:36:36 +02:00
class UserNarocilaStripe {
private $narocilo ;
private $apiKey ;
private $stripeService ;
2020-11-10 14:15:44 +01:00
public function __construct ( $narocilo_id ){
2020-08-14 13:36:36 +02:00
global $app_settings ;
global $stripe_secret ;
global $stripe_key ;
2020-11-10 14:15:44 +01:00
$this -> stripeService = new \Stripe\StripeClient ( $stripe_secret );
2020-08-14 13:36:36 +02:00
if ( $narocilo_id > 0 ){
// Dobimo podatke narocila
$sqlNarocilo = sisplet_query ( " SELECT un.*, u.name, u.surname, u.email, up.name AS package_name, up.description AS package_description, up.price AS package_price
FROM user_access_narocilo un , users u , user_access_paket up
WHERE un . id = '".$narocilo_id."' AND un . usr_id = u . id AND un . package_id = up . id " );
if ( mysqli_num_rows ( $sqlNarocilo ) > 0 ){
$this -> narocilo = mysqli_fetch_array ( $sqlNarocilo );
}
else {
die ( " Napaka pri komunikaciji s stripe! Narocilo ne obstaja. " );
}
}
else {
die ( " Napaka pri komunikaciji s stripe! Manjka ID naročila. " );
}
}
2020-11-10 14:15:44 +01:00
// Ustvarimo session za placilo v stripe - V DELU
public function stripeCreateSession (){
global $site_url ;
global $lang ;
$response = array ();
$UA = new UserNarocila ();
2020-12-07 11:07:54 +01:00
$cena = $UA -> getPrice ( $this -> narocilo [ 'package_name' ], $this -> narocilo [ 'trajanje' ], $this -> narocilo [ 'discount' ], $this -> narocilo [ 'time' ]);
2020-11-10 14:15:44 +01:00
if ( $this -> narocilo [ 'trajanje' ] == 1 )
$months_string = 'mesec' ;
elseif ( $this -> narocilo [ 'trajanje' ] == 2 )
$months_string = 'meseca' ;
elseif ( $this -> narocilo [ 'trajanje' ] == 3 || $this -> narocilo [ 'trajanje' ] == 4 )
$months_string = 'mesece' ;
else
$months_string = 'mesecev' ;
// Zavezanec iz tujine ima racun/predracun brez ddv
if ( $UA -> isWithoutDDV ( $this -> narocilo [ 'id' ])){
$ddv = 0 ;
$cena_za_placilo = $cena [ 'final_without_tax' ];
}
else {
$ddv = 1 ;
$cena_za_placilo = $cena [ 'final' ];
}
// URL po potrditvi oz preklicu
if ( $lang [ 'id' ] == '2' ){
$drupal_url_confirm = $site_url . '/d/en/stripe-purchase/success?narocilo_id=' . $this -> narocilo [ 'id' ];
$drupal_url_cancel = $site_url . '/d/en/stripe-purchase/cancel?narocilo_id=' . $this -> narocilo [ 'id' ];
}
else {
$drupal_url_confirm = $site_url . '/d/narocilo/stripe?narocilo_id=' . $this -> narocilo [ 'id' ];
$drupal_url_cancel = $site_url . '/d/narocilo/stripe-cancel?narocilo_id=' . $this -> narocilo [ 'id' ];
}
// Ustvarimo checkout session
try {
2020-11-11 09:59:51 +01:00
$session = $this -> stripeService -> checkout -> sessions -> create ([
2020-11-10 14:15:44 +01:00
'success_url' => $drupal_url_confirm ,
'cancel_url' => $drupal_url_cancel ,
'payment_method_types' => [ 'card' ],
2020-11-11 09:59:51 +01:00
'mode' => 'payment' ,
2020-11-10 14:15:44 +01:00
2020-11-17 08:43:41 +01:00
'customer_email' => $this -> narocilo [ 'email' ],
2020-11-10 14:15:44 +01:00
'line_items' => [
2020-11-11 09:59:51 +01:00
[
'price_data' => array (
'currency' => 'EUR' ,
'product_data' => array (
'name' => '1KA naročnina (paket ' . strtoupper ( $this -> narocilo [ 'package_name' ]) . ' - ' . $this -> narocilo [ 'trajanje' ] . ' ' . $months_string . ')' ,
),
'unit_amount' => $cena_za_placilo * 100 ,
),
'quantity' => 1 ,
],
2020-11-10 14:15:44 +01:00
],
]);
// Dobimo id paypal narocila
2020-11-11 09:59:51 +01:00
$stripe_response [ 'session_id' ] = $session -> id ;
2020-11-10 14:15:44 +01:00
}
catch ( HttpException $e ) {
$response [ 'error' ] = $e -> getMessage ();
$response [ 'success' ] = false ;
return $response ;
}
// Vstavimo stripe charge v bazo
$sqlNarocilo = sisplet_query ( " INSERT INTO user_access_stripe_charge
( session_id , narocilo_id , price , time , status )
VALUES
( '".$stripe_response[' session_id ']."' , '".$this->narocilo[' id ']."' , '".$cena_za_placilo."' , NOW (), 'CREATED' )
" );
if ( ! $sqlNarocilo ){
$response [ 'error' ] = 'ERROR! ' . mysqli_error ( $GLOBALS [ 'connect_db' ]);
$response [ 'success' ] = false ;
return $response ;
}
$response [ 'session_id' ] = $stripe_response [ 'session_id' ];
$response [ 'success' ] = true ;
return $response ;
}
// Zakljucimo placilo, ce je bilo placilo ok odobreno preko stripe s strani stranke - V DELU
public function stripeCheckoutSuccess (){
$response = array ();
// Preverimo plačilo v bazo
$sqlNarociloStripe = sisplet_query ( " SELECT session_id
FROM user_access_stripe_charge
WHERE narocilo_id = '".$this->narocilo[' id ']."'
" );
2020-11-11 09:59:51 +01:00
if ( ! $sqlNarociloStripe ){
2020-11-10 14:15:44 +01:00
$response [ 'error' ] = 'ERROR! ' . mysqli_error ( $GLOBALS [ 'connect_db' ]);
$response [ 'success' ] = false ;
return $response ;
}
2020-11-11 09:59:51 +01:00
// Narocilo ne obstaja (ni v bazi stripe narocil)
2020-11-10 14:15:44 +01:00
if ( mysqli_num_rows ( $sqlNarociloStripe ) == 0 ){
$response [ 'error' ] = 'ERROR! Stripe order session does not exist.' ;
$response [ 'success' ] = false ;
return $response ;
}
$rowNarociloStripe = mysqli_fetch_array ( $sqlNarociloStripe );
2020-11-11 09:59:51 +01:00
// Preverimo, ce je bilo vse ok placano
try {
2020-11-10 14:15:44 +01:00
// Poklicemo paypal api kjer preverimo placilo narocila
2020-11-11 09:59:51 +01:00
$session = $this -> stripeService -> checkout -> sessions -> retrieve ( $rowNarociloStripe [ 'session_id' ]);
2020-11-10 14:15:44 +01:00
}
2020-11-11 09:59:51 +01:00
catch ( HttpException $e ) {
2020-11-10 14:15:44 +01:00
$response [ 'error' ] = $e -> getMessage ();
$response [ 'success' ] = false ;
return $response ;
}
2020-11-11 09:59:51 +01:00
// Ce je session placan, posodobimo status narocila
if ( $session -> payment_status == 'paid' ){
2020-11-10 14:15:44 +01:00
2020-11-11 09:59:51 +01:00
$sqlNarocilo = sisplet_query ( " UPDATE user_access_stripe_charge
SET status = 'PAID'
2020-11-17 08:43:41 +01:00
WHERE session_id = '".$paypal_response->result->id."'
2020-11-11 09:59:51 +01:00
" );
if ( ! $sqlNarocilo ){
$response [ 'error' ] = 'ERROR! ' . mysqli_error ( $GLOBALS [ 'connect_db' ]);
$response [ 'success' ] = false ;
return $response ;
}
}
else {
$response [ 'error' ] = 'ERROR! SESSION IS NOT PAID!' ;
2020-11-10 14:15:44 +01:00
$response [ 'success' ] = false ;
return $response ;
}
2020-11-11 09:59:51 +01:00
2020-11-10 14:15:44 +01:00
2020-11-11 09:59:51 +01:00
// Nastavimo narocilo na placano, aktiviramo paket in vrnemo id narocila
2020-11-10 14:15:44 +01:00
$narocilo = new UserNarocila ();
$payment_response = $narocilo -> payNarocilo ( $this -> narocilo [ 'id' ]);
if ( $payment_response [ 'success' ] == true ){
$response [ 'racun' ] = $payment_response [ 'racun' ];
$response [ 'success' ] = true ;
}
else {
$response [ 'error' ] = $payment_response [ 'error' ];
$response [ 'success' ] = false ;
}
2020-11-11 09:59:51 +01:00
$response [ 'narocilo_id' ] = $this -> narocilo [ 'id' ];
2020-11-10 14:15:44 +01:00
$response [ 'success' ] = true ;
return $response ;
}
// Preklicemo placilo, ce je bilo placilo preklicano preko stripe s strani stranke
public function stripeCheckoutCancel (){
$response = array ();
// Posodobimo status narocila
$sqlNarocilo = sisplet_query ( " UPDATE user_access_stripe_charge
SET status = 'CANCELLED'
WHERE narocilo_id = '".$this->narocilo[' id ']."'
" );
if ( ! $sqlNarocilo ){
$response [ 'error' ] = 'ERROR! ' . mysqli_error ( $GLOBALS [ 'connect_db' ]);
$response [ 'success' ] = false ;
return $response ;
}
// Nastavimo status narocila na storniran
$sqlNarociloStatus = sisplet_query ( " UPDATE user_access_narocilo SET status='2' WHERE id=' " . $this -> narocilo [ 'id' ] . " ' " );
if ( ! $sqlNarociloStatus ){
$response [ 'error' ] = 'ERROR! ' . mysqli_error ( $GLOBALS [ 'connect_db' ]);
$response [ 'success' ] = false ;
return $response ;
}
$response [ 'success' ] = true ;
return $response ;
}
2020-08-14 13:36:36 +02:00
}