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); }
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)); } }