Esempio n. 1
0
        /// <summary>
        /// This will allow merchants to do add multiple orderlines to a PayEx transaction.
        /// Run this method for every order line you want to add to the order. It is run after initialize since you need the
        /// orderRef to reference the order lines to.
        /// </summary>
        public async Task <BaseResult> AddSingleOrderLine(AddSingleOrderLineRequest request)
        {
            // Validation
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request), "request is required");
            }
            if (string.IsNullOrEmpty(request.OrderRef))
            {
                throw new ArgumentNullException("OrderRef", "OrderRef is required");
            }
            if (string.IsNullOrEmpty(request.ItemNumber))
            {
                throw new ArgumentNullException("ItemNumber", "ItemNumber is required");
            }
            if (string.IsNullOrEmpty(request.ItemDescription1))
            {
                throw new ArgumentNullException("ItemDescription1", "ItemDescription1 is required");
            }
            //if (request.Quantity <= 0)
            //    throw new ArgumentOutOfRangeException("Quantity", "Quantity must be positive.");
            //if (request.Amount < 0)
            //    throw new ArgumentOutOfRangeException("Amount", "Amount must be positive.");

            var convAmount = request.Amount.ToPayEx();
            var vatPrice   = request.VatAmount.ToPayEx();
            var vatPercent = request.VatPercent.ToPayEx();

            // Build string for md5 hash
            var hashInput = new StringBuilder();

            hashInput.Append(Account.AccountNumber);
            hashInput.Append(request.OrderRef);
            hashInput.Append(request.ItemNumber);
            hashInput.Append(request.ItemDescription1);
            hashInput.Append(request.ItemDescription2);
            hashInput.Append(request.ItemDescription3);
            hashInput.Append(request.ItemDescription4);
            hashInput.Append(request.ItemDescription5);
            hashInput.Append(request.Quantity);
            hashInput.Append(convAmount);
            hashInput.Append(vatPrice);
            hashInput.Append(vatPercent);
            // Add encryption key at the end of string to be hashed
            hashInput.Append(Account.EncryptionKey);
            // Create a hash string from the parameters
            string hash;

            MD5Hash.Hash(hashInput.ToString(), out hash);

            // Invoke Initialize method on external PayEx PxOrder web service
            var payexOrder = GetPxOrderClient();
            var xmlReturn  = await payexOrder.AddSingleOrderLine2Async(
                Account.AccountNumber, request.OrderRef, request.ItemNumber,
                request.ItemDescription1,
                request.ItemDescription2 ?? "",
                request.ItemDescription3 ?? "",
                request.ItemDescription4 ?? "",
                request.ItemDescription5 ?? "",
                request.Quantity, convAmount, vatPrice, vatPercent, hash);

            // Parse the result
            var result = ResultParser.ParseBaseResult(xmlReturn);

            return(result);
        }