LiqPayInfo CalculateLiqPayInfo(decimal amount, int accountId)
        {
            string domain    = "botsconstructor.com";
            string link      = $"https://{domain}/";
            string serverUrl = link + "TopUp/LiqPayCallback";
            string resultUrl = link + "TopUp/SucceddPayment";

            _simpleLogger.Log(LogLevel.IMPORTANT_INFO, Source.WEBSITE_TOP_UP, $"Формирование data и signature. serverUrl={serverUrl} resultUrl ={resultUrl}");

            var jsonObj = new
            {
                version     = "3",
                public_key  = publicKey,
                action      = "pay",
                amount      = amount.ToString(CultureInfo.InvariantCulture),
                currency    = "USD",
                description = $"Пополнение личного счёта на сайте botsconstructor.com, accountId={accountId}",
                info        = $"accountId={accountId}",
                order_id    = Guid.NewGuid().ToString(),
                server_url  = serverUrl,
                result_url  = resultUrl
            };
            string jsonString = JsonConvert.SerializeObject(jsonObj);
            string data       = Base64Encode(jsonString);
            string signString = privateKey + data + privateKey;
            string signature  = GetBase64EncodedSHA1Hash(signString);
            var    result     = new LiqPayInfo
            {
                Data      = data,
                Signature = signature
            };

            return(result);
        }
Exemplo n.º 2
0
        public HttpResponseMessage DonateCallBack(LiqPayInfo liqPayCallBack)
        {
            try
            {
                var     data       = System.Text.Encoding.Default.GetString(Convert.FromBase64String(liqPayCallBack.Data));
                dynamic dataObject = JObject.Parse(data);
                string  serverSignature;

                using (LiqPayDBEntities db = new LiqPayDBEntities())
                {
                    var order_id      = (string)dataObject?.order_id;
                    var liqpayPayInfo = db.rl_liqpay_donate_info.FirstOrDefault(p => p.Order_id == order_id);

                    serverSignature = Convert.ToBase64String(SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(_donatePrivateKey + liqPayCallBack.Data + _donatePrivateKey)));

                    if (serverSignature == liqPayCallBack.Signature)
                    {
                        if (liqpayPayInfo.Status != "not paid yet")
                        {
                            string description = "";
                            try
                            {
                                description = Encoding.UTF8.GetString(Encoding.GetEncoding(1252).GetBytes(dataObject?.description == null ? "" : dataObject?.description));
                            }
                            catch (Exception ex)
                            {
                            }

                            db.rl_liqpay_donate_info.Add(new rl_liqpay_donate_info
                            {
                                Status              = dataObject?.status,
                                Agent_commission    = dataObject?.agent_commission,
                                Receiver_commission = dataObject?.receiver_commission,
                                Sender_commission   = dataObject?.sender_commission,
                                Sender_card_country = dataObject?.sender_card_country,
                                Amount              = dataObject?.amount,
                                Ip          = dataObject?.ip,
                                Description = description,
                                Action      = dataObject?.action,
                                Currency    = dataObject?.currency,
                                Email       = liqpayPayInfo?.Email,
                                JsonData    = data,
                                Name        = liqpayPayInfo?.Name,
                                Order_id    = dataObject?.order_id,
                                Signature   = liqPayCallBack?.Signature,
                                PaimentDate = DateTime.Now,
                                TypeOfPayer = liqpayPayInfo?.TypeOfPayer,
                            });
                        }
                        else
                        {
                            liqpayPayInfo.Status              = dataObject?.status;
                            liqpayPayInfo.JsonData            = data;
                            liqpayPayInfo.Description         = dataObject?.description;
                            liqpayPayInfo.Agent_commission    = dataObject?.agent_commission;
                            liqpayPayInfo.Receiver_commission = dataObject?.receiver_commission;
                            liqpayPayInfo.Sender_commission   = dataObject?.sender_commission;
                            liqpayPayInfo.Sender_card_country = dataObject?.sender_card_country;
                            liqpayPayInfo.Ip          = dataObject?.ip;
                            liqpayPayInfo.PaimentDate = DateTime.Now;
                        }
                    }
                    db.SaveChanges();
                }

                return(Request.CreateResponse(HttpStatusCode.OK));
            }
            catch (Exception ex)
            {
                using (LiqPayDBEntities db = new LiqPayDBEntities())
                {
                    db.Errors.Add(new Errors()
                    {
                        ErrorDate    = DateTime.Now,
                        ErrorMessage = ex.Message,
                        ErrorInfo    = ex.StackTrace
                    });

                    db.SaveChanges();
                }

                return(Request.CreateResponse(HttpStatusCode.InternalServerError));
            }
        }