コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <summary>
        /// Test webhook is working and validating
        /// </summary>
        /// <returns></returns>
        public IActionResult Index()
        {
            var etnPayload = new EtnPayload()
            {
                Amount   = 1,
                Customer = "*****@*****.**"
            };

            return(View(etnPayload));
        }
コード例 #3
0
 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());
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        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));
        }