apiKey = $stripe_secret; $this->stripeService = new \Stripe\Stripe(); $this->stripeService->setVerifySslCerts(false); $this->stripeService->setApiKey($this->apiKey); 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."); } } // 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; } }