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); }
public async Task <ActionResult> WompiWebhook(WompiWebhook webhook) { await _paymentService.UpdatePayment(webhook); return(new EmptyResult()); }