public static HttpResponse Get(HttpRequest request) { if (!request.GetParams.ContainsKey("user_id") || !request.GetParams.ContainsKey("sum")) { return(HttpBuilder.NotFound()); } if (!long.TryParse(request.GetParams["user_id"], out var userId)) { return(HttpBuilder.NotFound()); } if (!float.TryParse(request.GetParams["sum"], out var sum)) { return(HttpBuilder.NotFound()); } if (userId == 0 || Math.Abs(sum) < 1) { return(HttpBuilder.NotFound()); } Payments.Payment payment = Payments.CreatePayment(userId, sum, Payments.Type.Income); if (payment.PaymentId == 0) { return(HttpBuilder.NotFound()); } // Получение параметров var data = Interkassa.GetDefaultData(payment.PaymentId, payment.Sum); // Добавляем в конец параметров ключ по которому будет высчитан хэш data.Add("ik_sign", Interkassa.SecretKey); var sign = Interkassa.GetEncodedSign(data.Values.ToArray()); // Заменяем ключ на хэш data["ik_sign"] = sign; return(new HttpResponse() { ContentAsUTF8 = Interkassa.GetForm(data), ReasonPhrase = "OK", StatusCode = "200" }); }
/// <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); }