示例#1
0
        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);
        }
示例#2
0
        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);
        }