private async Task <bool> UpdateOrderStatus(WompiWebhook webhook)
        {
            var   spec  = new OrderByReferenceSpecification(webhook.data.transaction.reference);
            Order order = await _unitOfWork.Repository <Order>().GetEntityWithSpec(spec);

            switch (webhook.data.transaction.status)
            {
            case "APPROVED":
                order.Status = OrderStatus.Approved;
                break;

            case "DECLINED":
                order.Status = OrderStatus.Declined;
                break;

            case "VOIDED":
                order.Status = OrderStatus.Voided;
                break;

            case "ERROR":
                order.Status = OrderStatus.Error;
                break;
            }

            _unitOfWork.Repository <Order>().Update(order);

            var result = await _unitOfWork.Complete();

            return(order == null);
        }
        public async Task <bool> UpdatePayment(WompiWebhook webhook)
        {
            string concatenatedEventValues = GetConcatenatedEventValues(webhook);
            var    checksum = GetSHA256(concatenatedEventValues);

            if (checksum == webhook.signature.checksum)
            {
                switch (webhook.@event)
                {
                case "transaction.updated":
                    return(await UpdateOrderStatus(webhook));
                }
            }
            return(false);
        }
        private string GetConcatenatedEventValues(WompiWebhook webhook)
        {
            string secretEvent = _config["Wompi:SecretEvent"];
            string properties  = "";

            foreach (var property in webhook.signature.properties)
            {
                string[]     splitProperties = property.Split('.');
                PropertyInfo prop            = typeof(TransactionWebhook).GetProperty(splitProperties[1]);
                properties += prop.GetValue(webhook.data.transaction, null);
            }

            properties += webhook.timestamp + secretEvent;

            return(properties);
        }
示例#4
0
        public async Task <ActionResult> WompiWebhook(WompiWebhook webhook)
        {
            await _paymentService.UpdatePayment(webhook);

            return(new EmptyResult());
        }