/// <summary> /// Actual validation process /// </summary> /// <param name="payload"></param> /// <returns></returns> private async Task <EtnPayload> ValidatePayload(EtnPayload payload) { bool isTesting = Request.Headers.ContainsKey("X-ETN-TESTING"); if (isTesting) { if ((string)Request.Headers["X-ETN-TESTING"] != GetEtnXTestingSig()) { throw new Exception($"Invalid testing signature"); } } var userAgent = GetHeaderOrThrow("User-Agent"); var signature = GetHeaderOrThrow(EtnConstants.EtnSignatureRequestHeader); _logger.LogTrace("Validating payload {0} ", payload); if (isTesting) { userAgent = "Electroneum"; } var payloadResult = await _webhookValidator.ValidateEtnWebHookPayloadAsync(userAgent, payload, signature); if (payloadResult != null) { // success result // log and store in database table somewhere _logger.LogInformation($"[Test:{isTesting}] Payment Received: timestamp:{payloadResult.TimeStamp} id:{payloadResult.PaymentId} amt:{payloadResult.Amount} customer:{payloadResult.Customer} ref:{payloadResult.Ref} "); // handle fulfulment process } return(payloadResult); }
/// <summary> /// Test webhook is working and validating /// </summary> /// <returns></returns> public IActionResult Index() { var etnPayload = new EtnPayload() { Amount = 1, Customer = "*****@*****.**" }; return(View(etnPayload)); }
public async Task <IActionResult> PostEtnWebHook(EtnPayload payload) { try { var payloadResult = await ValidatePayload(payload); } catch (VendorException vex) { ModelState.AddModelError("", vex.Message); return(new BadRequestObjectResult(ModelState)); } return(new OkResult()); }
public async Task <(string json, string signature)> CreateFreshPayLoadAndSigAsync() { var p = new EtnPayload() { PaymentId = Guid.NewGuid().ToString(), Amount = 20, Customer = "*****@*****.**", Key = EtnVendorApiKey, Ref = "internalref", TimeStamp = DateTime.Now }; var sig = await CreateVendor().GenerateSignature(p); return(JsonConvert.SerializeObject(p), sig); }
public async Task <IActionResult> Index(EtnPayload model) { model.Key = _outletOptions.EtnVendorApiKey; model.TimeStamp = DateTime.Now; var sig = await _vendor.GenerateSignature(model); Request.Headers.Add(EtnConstants.EtnSignatureRequestHeader, new StringValues(sig)); Request.Headers.Add("X-ETN-TESTING", GetEtnXTestingSig()); //Request.Headers.FirstOrDefault(x=>x.Key=="User-Agent").Value = new StringValues("Electroneum/0.1.0 (+https://electroneum.com/instant-payments)"); try { var payloadResult = await ValidatePayload(model); ViewBag.IsValidPayload = true; } catch (VendorException vex) { ModelState.AddModelError("", vex.Message); } return(View(model)); }