Ejemplo n.º 1
0
        private void ProcessingMd5(HttpContext context, ref ProcessingResult processingResult,
                                   ref TypeRequestYandex typeRequest, ref string invoiceId)
        {
            var parameters = ReadParametersMd5(context, ref typeRequest);

            invoiceId = parameters.ContainsKey("invoiceId") ? parameters["invoiceId"] : string.Empty;

            if (IsCheckMd5(parameters))
            {
                if (IsCheckFields(parameters, typeRequest))
                {
                    if (typeRequest == TypeRequestYandex.paymentAviso)
                    {
                        OrderService.PayOrder(parameters["orderNumber"].TryParseInt(), true);
                    }

                    processingResult = ProcessingResult.Success;
                }
                else
                {
                    processingResult = typeRequest == TypeRequestYandex.checkOrder
                        ? ProcessingResult.TranslationFailure
                        : ProcessingResult.ErrorParsing;
                }
            }
            else
            {
                processingResult = ProcessingResult.ErrorAuthorize;
            }
        }
Ejemplo n.º 2
0
 private Dictionary <string, string> ReadParametersMd5(HttpContext context, ref TypeRequestYandex typeRequest)
 {
     if (context.Request["action"].IsNotEmpty())
     {
         if (context.Request["action"].Equals("checkOrder", StringComparison.InvariantCultureIgnoreCase))
         {
             typeRequest = TypeRequestYandex.checkOrder;
         }
         else if (context.Request["action"].Equals("paymentAviso", StringComparison.InvariantCultureIgnoreCase))
         {
             typeRequest = TypeRequestYandex.paymentAviso;
         }
     }
     return(context.Request.Params.AllKeys.ToDictionary(key => key, key => context.Request[key]));
 }
Ejemplo n.º 3
0
        private bool IsCheckFields(Dictionary <string, string> parameters, TypeRequestYandex typeRequest)
        {
            decimal orderSumAmount;

            if (parameters["shopId"].Equals(ShopId, StringComparison.InvariantCultureIgnoreCase) &&
                parameters["invoiceId"].IsNotEmpty() && parameters["invoiceId"].All(char.IsDigit) &&
                parameters["orderNumber"].IsNotEmpty() && parameters["orderNumber"].All(char.IsDigit) &&
                parameters["orderSumAmount"].IsNotEmpty() &&
                decimal.TryParse(parameters["orderSumAmount"], NumberStyles.Float, CultureInfo.InvariantCulture, out orderSumAmount))
            {
                var ord = OrderService.GetOrder(parameters["orderNumber"].TryParseInt());

                if (ord != null &&
                    // Если это запрос "Уведомление о переводе", которые могут повторяться несколько раз (упомянуто в документации),
                    // тогда неважно заказ был уже отмечен оплаченным или уже отменен
                    (typeRequest == TypeRequestYandex.paymentAviso || (!ord.Payed && ord.OrderStatusId != OrderService.CanceledOrderStatus)) &&
                    ord.OrderCustomer.CustomerID.ToString().Normalize().Equals(parameters["customerNumber"], StringComparison.InvariantCultureIgnoreCase) &&
                    orderSumAmount >= Math.Round((decimal)(ord.Sum / CurrencyValue), 2))
                {
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 4
0
 private string RendAnswer(TypeRequestYandex typeRequest, ProcessingResult processingResult, string invoiceId)
 {
     return(string.Format(
                "<?xml version=\"1.0\" encoding=\"UTF-8\"?><{0}Response performedDatetime=\"{1}\" code=\"{2}\" invoiceId=\"{3}\" shopId=\"{4}\"/>",
                typeRequest, DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fzzz"), (int)processingResult, invoiceId, ShopId));
 }