public function checkPaymentStatus() { $payments = (array) json_decode(Payments::i()->getPayments()); $pending = (array) $payments['pending']; foreach ($pending as $payment) { $response = (array) $this->block_io->get_address_balance(array('addresses' => base64_decode($payment->token))); if ($response['status'] == "success") { $data = (array) $response['data']; foreach ((array) $data['balances'] as $balance) { if ($balance->address == base64_decode($payment->token) && $balance->label == $payment->payerid) { if (round($balance->available_balance, 8) >= round($payment->amount, 8)) { $update = DBManager::i()->update("sf_purchases", array("pending" => 0), array("token" => $payment->token)); if ($update) { $_SESSION['shopping-cart'] = base64_encode("{}"); DbManager::i()->update("sf_carts", array("cart" => $_SESSION['shopping-cart']), array("userid" => $_SESSION['userid'])); return array("result" => "success", "resultMessage" => "Payment received! Refreshing your payments..."); } else { throw new Exception("Could not update Purchase. Please try again later"); } } else { throw new Exception("Paid amount is not enough. Need " . round($payment->amount - $balance->available_balance, 8) . " more Bitcoins", 1212); } break; } else { throw new Exception("Balance Address: " . $balance->address . " NOT EQUAL TO payment address: " . $payment->address . " and balance label: " . $balance->label . " NOT EQUAL to payment label" . $payment->payerid); } } } else { throw new Exception("Could not get address balance for address"); } } }
require_once ROOT_DIR . '/class.sessionmanager.php'; if (!SessionManager::i()->isLoggedIn()) { Logger::i()->writeLog("User is not logged in", 'dev'); SessionManager::i()->destroySession(true, "index.php"); die; } if (!SessionManager::i()->validateToken("DownloadToken", "token", "GET")) { Logger::i()->writeLog("Token to download is missing", 'dev'); SessionManager::i()->destroySession(true, "index.php"); die; } if (!isset($_GET['productid']) || !isset($_GET['transaction_id'])) { header("Location: index.php"); die; } $payments = (array) json_decode(Payments::i()->getPayments()); $payments = (array) $payments['payments']; $payments = array_filter($payments, function ($payment) { return $payment->token == $_GET['transaction_id']; }); if (count($payments) == 1) { $payment = $payments[0]; $has_purchased = false; foreach ($payment->cart as $key => $value) { if ($key == $_GET['productid']) { $has_purchased = true; break; } } if ($has_purchased) { //purchased