Jump to content


Photo

Payflow_Dotnet.dll V4.4 - Transaction Submit Not Reaching Paypal - Server Issue?

payflowpro transaction submit

Best Answer kforan , 02 February 2016 - 03:46 PM

We found our solution:

 

We originally had these SSL Cipher Suites disabled for security reasons on Production Server, enabling them allowed PayPal Flow Pro to work correctly.

 

TLS RSA with AES 256 GCM SHA384

TLS RSA with AES 256 CBC SHA256

TLS RSA with AES 256 CBC SHA

TLS RSA with 3DES EDE CBC SHA

TLS RSA with AES 128 GCM SHA256

TLS RSA with AES 128 CBC SHA256

TLS RSA with AES 128 CBC SHA

 

Hope this helps anyone that has issues like we did.

Go to the full post


  • Please log in to reply
1 reply to this topic

#1 kforan

kforan

    Newbie

  • Members
  • Pip
  • 2 posts

Posted 01 February 2016 - 03:56 PM

My company has a project that has a form using the PayFlow_dotNET.dll the form submits with no issues on our Dev Server, we pushed the project to Production and now the information is not getting received by PayPal.

 

We have made sure that both the test and production PayPal urls work on the Dev server, neither work on the Production server.

 

Our IT infrastructure team have reviewed the servers and determined no differences are the issue. We have also reviewed the code with PayPal and believe it is not the code.

 

Has anyone run into any issues submitting their transactions to PayPal using PayFlowPro??

 

Code:

        private void ProcessPayment(PaymentModel model, PaymentResponseModel respModel)
        {
            // Process Payment using PayFlow
            String RequestID = PayflowUtility.RequestId;

            UserInfo User = new UserInfo("AOAITSL2650", "AOAITSL2650", "VERISIGN", "AOAsspw265009");
            PayflowConnectionData Connection = new PayflowConnectionData(ConfigurationManager.AppSettings["PayFlowPro"], 443, 45, "", 0, "", "");
            Invoice Inv = new Invoice();
            CultureInfo us = new CultureInfo("en-US");
            String usCurrency = "USD";

            Currency Amt = new Currency(Convert.ToDecimal(model.totalAmount), usCurrency);
            Inv.Amt = Amt;

            Inv.PoNum = "PO12345";
            Inv.InvNum = "INV12345";
            Inv.CustRef = "CustRef1";

            Inv.Comment1 = model.selectedAffiliate + " - " + model.orderNumber;
            Inv.Comment2 = model.MasterCustomerId;

            // Create the BillTo object.
            BillTo Bill = new BillTo();
            Bill.BillToFirstName = model.FirstName;
            Bill.BillToLastName = model.LastName;
            Bill.BillToStreet = model.Addr1;
            Bill.BillToStreet2 = model.Addr2;
            Bill.BillToCity = model.City;
            Bill.BillToState = model.State;
            Bill.BillToZip = model.Zip;

            // Set the BillTo object into invoice.
            Inv.BillTo = Bill;
            Inv.EchoData = "ADDRESS";

            if (model.ExpMonth.Length == 1)
            {
                model.ExpMonth = model.ExpMonth.PadLeft(2, '0');
            }

            PayPal.Payments.DataObjects.CreditCard CC = new PayPal.Payments.DataObjects.CreditCard(model.CardNumber, string.Concat(model.ExpMonth, model.ExpYear.Substring(2, 2)));
            CC.Cvv2 = model.CVV;

            CardTender Card = new CardTender(CC);
            SaleTransaction Trans = new SaleTransaction(User, Connection, Inv, Card, RequestID);

            // Set the transaction verbosity to HIGH to display most details.
            Trans.Verbosity = "HIGH";

            // Try to submit the transaction up to 3 times with 5 second delay.  This can be used
            // in case of network issues.  The idea here is since you are posting via HTTPS behind the scenes there
            // could be general network issues, so try a few times before you tell customer there is an issue.
            int trxCount = 1;
            bool RespRecd = false;
            while (trxCount <= 3 && !RespRecd)
            {
                if (Trans != null)
                {
                    respModel.errorMessage = "EXP YEAR:" + model.ExpYear.Substring(2, 2);
                    respModel.errorMessage = respModel.errorMessage + " Trans RequestId: " + Trans.mRequestId;
                    respModel.errorMessage = respModel.errorMessage + " Trans Request: " + Trans.Request;
                    respModel.errorMessage = respModel.errorMessage + " Trans Response: " + Trans.Response;
                }
                else
                {
                    respModel.errorMessage = "Trans = null";
                }

                // Submit the Transaction
                Response Resp = Trans.SubmitTransaction();

                // Display the transaction response parameters.
                if (Resp != null)
                {

                    respModel.errorMessage = respModel.errorMessage + " SubmittedTransation Request: " + Resp.RequestString;
                    respModel.errorMessage = respModel.errorMessage + " SubmittedTransation Response: " + Resp.ResponseString;
                    respModel.errorMessage = respModel.errorMessage + " SubmittedTransation RecurringResponse: " + Resp.RecurringResponse;

                    RespRecd = true;  // Got a response.

                    // Get the Transaction Response parameters.
                    TransactionResponse TrxnResponse = Resp.TransactionResponse;

                    // Refer to the Payflow Pro .NET API Reference Guide and the Payflow Pro Developer's Guide
                    // for explanation of the items returned and for additional information and parameters available.
                    if (TrxnResponse != null)
                    {
                        //Payment Process received a response
                        respModel.Result = TrxnResponse.Result;
                        return;
                    }
                }
                else
                {
                    Thread.Sleep(5000); // let's wait 5 seconds to see if this is a temporary network issue.

                    trxCount++;
                }
            }
            if (!RespRecd)
            {
                //Payment Process Failed multiple times
                respModel.Result = -10000;
                return;
            }
        }

I've tried writing out the information as you can see above. Request and Response never come back with a value. Line 70 is where the problem lies. We can't step into the trans.SubmitTransaction() because that code is inside the dll. All we can tell is it is coming back NULL.

 

We have talked to PayPal and they say they don't see our request hitting their system. They said our code looks good, and our Infrastructure team says this goes outside our firewall, outside of our control.

 

Has anyone run into any issue like this??

 

Out of ideas...

 

Thanks!!!



#2 kforan

kforan

    Newbie

  • Members
  • Pip
  • 2 posts

Posted 02 February 2016 - 03:46 PM   Best Answer

We found our solution:

 

We originally had these SSL Cipher Suites disabled for security reasons on Production Server, enabling them allowed PayPal Flow Pro to work correctly.

 

TLS RSA with AES 256 GCM SHA384

TLS RSA with AES 256 CBC SHA256

TLS RSA with AES 256 CBC SHA

TLS RSA with 3DES EDE CBC SHA

TLS RSA with AES 128 GCM SHA256

TLS RSA with AES 128 CBC SHA256

TLS RSA with AES 128 CBC SHA

 

Hope this helps anyone that has issues like we did.






0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users