public CheckoutResponse InitiateCheckout(CheckoutRequest checkoutRequest) { CheckoutResponse response = new CheckoutResponse(); Status status = ValidateCheckout(checkoutRequest); if (status != Status.Success) { response.Status = status; return(response); } string productInfo = "ProductInfo"; JsonSerializerHelper jsh = new JsonSerializerHelper(); string serializedItems = jsh.Serialize(checkoutRequest.CheckoutItems); if (string.IsNullOrWhiteSpace(serializedItems)) { response.Status = Status.InvalidItem; return(response); } long transactionId = CheckoutDbManager.CreateTransaction(checkoutRequest.User , serializedItems , ItemDataFormat.JSON , TransactionType.Purchase , TransactionStatus.Initiated ); if (transactionId <= -1) { response.Status = Status.Failure; return(response); } long orderDeliveryAddressMapId = CheckoutDbManager.CreateOrderDeliveryAddressMap(transactionId, checkoutRequest.DeliveryAddress); if (orderDeliveryAddressMapId <= -1) { response.Status = Status.Failure; return(response); } string hashSequence = GeneratePaymentRequestHashSequence(checkoutRequest.User.UserId , this.configuration.PayUKey , transactionId , checkoutRequest.CheckoutItems.TotalCalcPrice , productInfo , checkoutRequest.User.FirstName , checkoutRequest.User.PrimaryEmail , this.configuration.PayUSalt); string hash = CryptoHelper.ComputeSHA512Hash(hashSequence); response.Status = Status.Success; response.Hash = hash; response.TransactonId = transactionId.ToString(); response.User = checkoutRequest.User; return(response); }
public Status ProcessPayment(Payment payment) { if (payment == null || string.IsNullOrWhiteSpace(payment.paymentId) || string.IsNullOrWhiteSpace(payment.merchantTransactionId)) { return(Status.InvalidInput); } long transactionId = -1; long.TryParse(payment.merchantTransactionId, out transactionId); Transaction transaction = CheckoutDbManager.GetTransaction(transactionId); if (transaction == null) { return(Status.InvalidTransaction); } Guid userId = Guid.Empty; if (!Guid.TryParse(payment.udf1, out userId)) { return(Status.InvalidUserID); } if (string.IsNullOrWhiteSpace(transaction.ItemData)) { return(Status.InvalidItem); } JsonSerializerHelper jsh = new JsonSerializerHelper(); CheckoutItems checkoutItems = (CheckoutItems)jsh.Deserialize(transaction.ItemData, typeof(CheckoutItems)); if (checkoutItems == null || checkoutItems.Items == null || checkoutItems.Items.Length <= 0) { return(Status.InvalidItem); } if (payment.amount != checkoutItems.TotalCalcPrice) { return(Status.InvalidAmount); } if (payment.status == "Success") { CheckoutDbManager.UpdateTransactionStatus(transactionId , TransactionStatus.Paid); int receiptId = CheckoutDbManager.CreateReceipt(transaction.UserId , transaction.TransactionId , payment.paymentId , (TransactionType)transaction.TransactionType , TransactionProvider.PayU , TransactionStatus.Paid); string rawReceipt = string.Empty; if (receiptId > 0) { rawReceipt = jsh.Serialize(payment); CheckoutDbManager.CreateRawReceipt(receiptId, rawReceipt); } } return(Status.Success); }