public PayPalTrasactions DoTransaction(string billingAgreementID, string orderDescription, string itemName, double itemAmount, string serviceDescription, out string PaypalResponse)
        {
            string response = string.Empty;

            // Create request object
            DoReferenceTransactionRequestType request = new DoReferenceTransactionRequestType();

            populateRequestObject(request, billingAgreementID, orderDescription, itemName, itemAmount, serviceDescription);
            // Invoke the API
            DoReferenceTransactionReq wrapper = new DoReferenceTransactionReq();

            wrapper.DoReferenceTransactionRequest = request;
            // Configuration map containing signature credentials and other required configuration.
            // For a full list of configuration parameters refer in wiki page
            // [https://github.com/paypal/sdk-core-dotnet/wiki/SDK-Configuration-Parameters]
            Dictionary <string, string> configurationMap = Configuration.GetAcctAndConfig();

            // Create the PayPalAPIInterfaceServiceService service object to make the API call
            PayPalAPIInterfaceServiceService service = new PayPalAPIInterfaceServiceService(configurationMap);

            string requestString = "  Paypal DoTransaction Request billingAgreementID: " + billingAgreementID + ":  ";

            requestString = requestString + JsonConvert.SerializeObject(wrapper);

            // # API call
            // Invoke the DoReferenceTransaction method in service wrapper object
            DoReferenceTransactionResponseType doReferenceTxnResponse = service.DoReferenceTransaction(wrapper);
            PayPalTrasactions responsePaypal = new PayPalTrasactions();

            responsePaypal = ProcessTrasactionResponse(doReferenceTxnResponse);
            response       = JsonConvert.SerializeObject(doReferenceTxnResponse);
            PaypalResponse = requestString + "  Paypal DoTransaction Response billingAgreementID: " + billingAgreementID + " : " + response;
            return(responsePaypal);
        }
        private PayPalTrasactions ProcessTrasactionResponse(DoReferenceTransactionResponseType setECResponse)
        {
            PayPalTrasactions responseObject = new PayPalTrasactions();

            responseObject.ApiStatus = setECResponse.Ack.ToString();
            if (setECResponse.Ack.Equals(AckCodeType.FAILURE) ||
                (setECResponse.Errors != null && setECResponse.Errors.Count > 0))
            {
                responseObject.ResponseError = setECResponse.Errors;
            }
            else
            {
                responseObject.ResponseError = null;
                DoReferenceTransactionResponseDetailsType transactionDetails = setECResponse.DoReferenceTransactionResponseDetails;
                responseObject.TransactionID      = transactionDetails.TransactionID;
                responseObject.BillingAgreementID = transactionDetails.BillingAgreementID;

                if (transactionDetails.PaymentInfo != null)
                {
                    if (transactionDetails.PaymentInfo.PaymentStatus != null)
                    {
                        responseObject.PaymentStatus = transactionDetails.PaymentInfo.PaymentStatus.Value.ToString();
                    }
                    if (transactionDetails.PaymentInfo.PendingReason != null)
                    {
                        responseObject.PendingReason = transactionDetails.PaymentInfo.PendingReason.Value.ToString();
                    }
                    responseObject.PaymentDate   = transactionDetails.PaymentInfo.PaymentDate.ToString();
                    responseObject.GrossAmount   = transactionDetails.PaymentInfo.GrossAmount.value;
                    responseObject.TransactionID = transactionDetails.PaymentInfo.TransactionID;


                    responseObject.ItemTotal = transactionDetails.PaymentInfo.GrossAmount.value;

                    //responseObject.ResponseError = transactionDetails.PaymentInfo.PaymentError;

                    // comment by nitendra 16 March 2016
                    //responseObject.OrderTotal = transactionDetails.Amount.value;

                    responseObject.OrderTotal = transactionDetails.PaymentInfo.GrossAmount.value;
                }
            }
            return(responseObject);
        }