Exemplo n.º 1
0
        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"
            });
        }
Exemplo 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);
        }