stripeService = new \Stripe\StripeClient($stripe_secret); 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."); } } // Ustvarimo session za placilo v stripe - V DELU public function stripeCreateSession(){ global $site_url; global $lang; $response = array(); $UA = new UserNarocila(); $cena = $UA->getPrice($this->narocilo['package_name'], $this->narocilo['trajanje'], $this->narocilo['discount']); 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 { $stripe_response = $this->stripeService->checkout->sessions->create([ 'success_url' => $drupal_url_confirm, 'cancel_url' => $drupal_url_cancel, 'payment_method_types' => ['card'], 'line_items' => [ [ 'name' => '1KA naročnina (paket '.strtoupper($this->narocilo['package_name']). ' - '.$this->narocilo['trajanje'].' '.$months_string.')', 'price' => $cena_za_placilo, 'quantity' => 1, 'currency' => 'eur', ], ], ]); // Dobimo id paypal narocila $stripe_response['session_id'] = $stripe_response->session->id; } 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']."' "); if (!$sqlNarociloPaypal){ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']); $response['success'] = false; return $response; } // Narocilo ne obstaja (ni v bazi paypal narocil) 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); // Preverimo, ce je bilo vse ok placano - POST request to /v2/checkout/orders $request = new OrdersCaptureRequest($rowNarociloPaypal['transaction_id']); try { // Poklicemo paypal api kjer preverimo placilo narocila $paypal_response = $this->paypal_client->execute($request); } catch (HttpException $e) { $response['error'] = $e->getMessage(); $response['success'] = false; return $response; } // Posodobimo status narocila $sqlNarocilo = sisplet_query("UPDATE user_access_stripe_charge SET status='".$paypal_response->result->status."' WHERE transaction_id='".$paypal_response->result->id."' "); if (!$sqlNarocilo){ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']); $response['success'] = false; return $response; } // Nastavimo narocilo na placano, aktiviramo paket in vrnemo racun $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; } $response['narocilo_id'] = $this->narocilo['id']; $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; } /* // Placamo narocilo s kreditno kartico preko stripa public function stripePayment($token){ $UA = new UserNarocila(); $cena = $UA->getPrice($this->narocilo['package_name'], $this->narocilo['trajanje'], $this->narocilo['discount']); 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']; } // Podatki za kartico potrebni za placilo $cardDetails = array( 'email' => $this->narocilo['email'], 'token' => $token, 'amount' => $cena_za_placilo * 100, 'currency_code' => 'eur', 'item_name' => '1KA naročnina (paket '.strtoupper($this->narocilo['package_name']). ' - '.$this->narocilo['trajanje'].' '.$months_string.')', 'item_number' => $this->narocilo['id'], ); // Izvedemo placilo - stripe response try{ $stripeResponse = $this->chargeAmountFromCard($cardDetails); } catch (Exception $e){ $response['error'] = 'ERROR! '.$e->getMessage(); return $response; } // Vstavimo plačilo v bazo $sqlNarocilo = sisplet_query("INSERT INTO user_access_stripe_charge (narocilo_id, description, price, amount_paid, status, balance_transaction, time) VALUES ('".$this->narocilo['id']."', '".$cardDetails['item_name']."', '".$cena_za_placilo."', '".($stripeResponse['amount'] / 100)."', '".$stripeResponse['status']."', '".$stripeResponse['balance_transaction']."', NOW()) "); if (!$sqlNarocilo){ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']); $response['success'] = false; return $response; } $response = array(); // Placilo uspesno if ($stripeResponse['amount_refunded'] == 0 && empty($stripeResponse['failure_code']) && $stripeResponse['paid'] == 1 && $stripeResponse['captured'] == 1 && $stripeResponse['status'] == 'succeeded' ) { $response['success'] = true; $response['stripe_note'] = "Stripe payment is completed successfully. The TXN ID is " . $stripeResponse["balance_transaction"]; } // Placilo ni uspelo else{ $response['error'] = 'ERROR! Stripe payment failed. Failure code '.$stripeResponse['failure_code']; $response['success'] = false; } return $response; } private function chargeAmountFromCard($cardDetails){ // Iz emaila in tokena ustvarimo stranko $customerDetailsAry = array( 'email' => $cardDetails['email'], 'source' => $cardDetails['token'] ); $customerResult = $this->addCustomer($customerDetailsAry); $charge = new Charge(); // Napolnimo podatke za placilo $cardDetailsAry = array( 'customer' => $customerResult->id, 'amount' => $cardDetails['amount'], 'currency' => $cardDetails['currency_code'], 'description' => $cardDetails['item_name'], 'metadata' => array( 'order_id' => $cardDetails['item_number'] ) ); // Izvedemo "charge" $result = $charge->create($cardDetailsAry); return $result->jsonSerialize(); } private function addCustomer($customerDetailsAry){ $customer = new Customer(); $customerDetails = $customer->create($customerDetailsAry); return $customerDetails; } */ }