Exemplo n.º 1
0
        private void Parse(string str)
        {
            str = WebUtility.UrlDecode(str);
            NameValueCollection nq = new NameValueCollection();

            string[] strData = str.Split(new char[] { '&', '=' }, StringSplitOptions.None);
            for (int i = 0; i < strData.Length; i += 2)
            {
                nq.Add(strData[i], strData[i + 1]);
            }

            //проверка подлинности сообщения
            string sha1Str = string.Format("{0}&{1}&{2}&{3}&{4}&{5}&{6}&{7}&{8}",
                                           nq["notification_type"],
                                           nq["operation_id"],
                                           nq["amount"],
                                           nq["currency"],
                                           nq["datetime"],
                                           nq["sender"],
                                           nq["codepro"],
                                           "",
                                           nq["label"]);

#if !DEBUG
            sha1Str = Crypto.SHA1Hex(sha1Str);
            if (sha1Str != nq["sha1_hash"])
            {
                return;
            }
#endif

            //перевод защищен кодом протекции.
            if (nq["codepro"] != "false")
            {
                return;
            }

            //login не известен
            if (string.IsNullOrWhiteSpace(nq["label"]))
            {
                return;
            }

            string[] split = nq["label"].Split('|');

            if (split.Length != 3)
            {
                split = new string[3] {
                    "17a87d89-b8d7-4274-9049-78d7b6af94af", "0", string.Format("Строка не распознана: {0}", nq["label"])
                }
            }
            ;

            //Сумма, которая списана со счета отправителя.
            string amount = nq["withdraw_amount"];
            if (string.IsNullOrEmpty(amount))
            {
                amount = nq["amount"];//Сумма операции.
            }
            if (string.IsNullOrEmpty(amount))
            {
                return;
            }

            int            payment = (int)float.Parse(amount, new CultureInfo("en-US"));
            DateTimeOffset dT      = DateTimeOffset.UtcNow;

            NewPayment?.Invoke(split, payment, dT, nq["operation_id"]);
        }
    }
Exemplo n.º 2
0
 protected virtual void OnNewPayment(NewPaymentEventArgs e)
 {
     NewPayment?.Invoke(this, e);
 }