public static function EGOP_transaction_o_complete() { $id = Core::validate($_GET['id']); $hash = Core::validate($_GET['hash']); $at = new AtEgop(); if (!$at->findById($id)) { header('Location: ' . URL_WRONG_DATA_INPUT); exit; } if ($hash != self::hash_for_money_output_link($at->getId(), $at->getUID())) { header('Location: ' . URL_WRONG_DATA_INPUT); exit; } $currency = new Currency(); $currency->findById($at->getCurrencyId()); $wallets = self::EGOP_MinAndMaxWallets($currency); $amount = $at->getAmount(); if ($wallets['max'] == null || $wallets['max']['current_balance'] < $amount) { Core::write_log(EGOPAY_LOG_PATH, __FUNCTION__ . ' : Not enough money on this wallet (id) : ' . $wallets['max']['id'] . '(at_egop id=' . $at->getId() . ')'); header('Location: ' . URL_SERVER_ERROR); exit; } $wallet = new WalletsEgop(); $wallet->findById($wallets['max']['id']); $oAuth = new EgoPayAuth($wallet->getEmail(), $wallet->getApiId(), $wallet->getApiPassword()); $oEgoPayJsonAgent = new EgoPayJsonApiAgent($oAuth); $oEgoPayJsonAgent->setVerifyPeer(false); try { $oResponse = $oEgoPayJsonAgent->getTransfer($at->getClientAccount(), $at->getAmount(), $currency->getName(), 'Transfer from Bitmonex'); // for debug Core::write_log(EGOPAY_LOG_PATH, __FUNCTION__ . ' : getTransfer response: ' . print_r($oResponse, true)); reset($oResponse); // } catch (EgoPayApiException $e) { // error codes from here: https://www.egopay.com/developers/api/payments/send-payment if ($e->getCode() == 11 || $e->getCode() == 12) { header('Location: ' . URL_WRONG_DATA_INPUT); exit; } Core::write_log(EGOPAY_LOG_PATH, __FUNCTION__ . ' : getTransfer Error: ' . $e->getCode() . " : " . $e->getMessage()); header('Location: ' . URL_SERVER_ERROR); exit; } $limits = self::transactionLimits($currency->getId(), 'EGOP', 1); $feeVolume = $amount * $limits['fee']; $feeVolume = Core::round_up($feeVolume, 2); $purses = Purse::findBy(array('UID' => $at->getUID(), 'CurId' => $currency->getId())); $purse = new Purse(); $purse->findById($purses[0]['id']); $purse->addValue(-($amount + $feeVolume)); $purse->save(); $systemFeeVolume = $amount * $limits['system_fee']; $systemFeeVolume = Core::round_up($systemFeeVolume, 2); $profit = ($feeVolume - $systemFeeVolume) * $wallet->getShare(); $wallet->setProfit($wallet->getProfit() + $profit); $wallet->save(); $at->setStatus(1); $at->setOurWalletId($wallet->getId()); $at->setTransactionId($oResponse->transaction->sId); $at->setTimestamp(Core::timestamp_gmp()); $at->save(); header('Location: ' . URL_SUCCESS_PAYMENT); }
public static function changeOrderVolume(Order $order, $newVolume) { if ($order->getStatus() != OrderStatus::ACTIVE || $newVolume == $order->getVolume()) { return false; } $deal = new Deal(); $deal->findActiveDealByOrderId($order->getId()); $volumeDifference = $order->getVolume() - $newVolume; if ($deal->getVolume() < $volumeDifference) { return false; } $rate = new Rate(); $rate->findById($order->getRateId()); $purse = new Purse(); if ($order->getType() == OrderType::BUY) { $purseSelect = Purse::findBy(array('UID' => $order->getUserId(), 'CurId' => $rate->getSecondCurrencyId())); $purse->findById($purseSelect[0]['id']); $difference = $order->getPrice() * $volumeDifference * (1.0 + $rate->getFee()); $purse->addValue($difference); } else { $purseSelect = Purse::findBy(array('UID' => $order->getUserId(), 'CurId' => $rate->getFirstCurrencyId())); $purse->findById($purseSelect[0]['id']); $purse->addValue($volumeDifference); } if ($purse->getValue() < 0) { return false; } $purse->save(); $deal->setDate(date("Y-m-d H:i:s")); $deal->setVolume($newVolume); $deal->save(); $order->setVolume($newVolume); $order->updatePart(); $order->save(); return true; }