Esempio n. 1
0
        public static void WithdrawFunds(long connectionId, float sum, string requisites)
        {
            Client client = ClientManager.GetConnectedClient(connectionId);

            // TODO: Нужно какое то уведомление если недостаточно средств
            if (client.UserData.Money < sum)
            {
                return;
            }

            // Обновление баланса игрока в БД
            DatabaseOperations.AddMoney(client.UserData.UserId, -sum);


            // Создание записи об оплате в БД
            Payments.CreatePayment(client.UserData.UserId, sum, Payments.Type.Withdrawal, requisites);
        }
Esempio n. 2
0
        /// <summary>
        /// Обработка ответа от платежной системы
        /// </summary>
        /// <param name="request"></param>
        private static void ProcessPayment(HttpRequest request)
        {
            // Выход если необходимые параметры не были получены
            if (!request.GetParams.ContainsKey("ik_pm_no"))
            {
                return;
            }
            if (!request.GetParams.ContainsKey("ik_sign"))
            {
                return;
            }

            // Получение записи об оплате
            Payments.Payment payment = Payments.GetPaymentById(Convert.ToInt64(request.GetParams["ik_pm_no"]), Payments.Type.Income);
            if (payment.PaymentId == 0)
            {
                return;                                     // Выход если запись не найдена
            }
            // Настоящая подпись имеет длину 24 знака
            string receivedSign = request.GetParams["ik_sign"];

            if (receivedSign.Length != 24)
            {
                return;
            }

            var sortedParams = new SortedDictionary <string, string>(request.GetParams);

            // Убираем подпись
            sortedParams.Remove("ik_sign");

            Dictionary <string, string> parameters     = new Dictionary <string, string>(sortedParams);
            Dictionary <string, string> parametersTest = new Dictionary <string, string>(sortedParams);

            parameters.Add("ik_sign", Interkassa.SecretKey);
            parametersTest.Add("ik_sign", Interkassa.TestSecretKey);

            // Генерация ключа
            var sign     = Interkassa.GetEncodedSign(parameters.Values.ToArray());
            var signTest = Interkassa.GetEncodedSign(parametersTest.Values.ToArray());

            // Если подпись с нормальным и тестовым ключом не совпадает, то выход
            if (signTest != receivedSign && sign != receivedSign)
            {
                return;
            }

            Payments.UpdateStatus(payment.PaymentId, Payments.Status.Payed);             // Обновляем статус

            // Записываем в платеж id из платежной системы
            if (request.GetParams.ContainsKey("ik_inv_id"))
            {
                long extPaymentId = Convert.ToInt64(request.GetParams["ik_inv_id"]);
                Payments.SetExternalPaymentId(payment.PaymentId, extPaymentId);
            }

            var client = ClientManager.GetConnectedClientByUserId(payment.UserId);

            if (client != null)
            {
                ServerSendPackets.Send_Message(client.ConnectionId, $"Платеж проведен успешно. Добавлено {payment.Sum}");
            }

            DatabaseOperations.AddMoney(payment.UserId, payment.Sum);
        }