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); }
/// <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); }