This problem turned out to be the card number. I was using 4111 1111 1111 1111. Full disclosure: My problem was not with PayFlow but with the In-Context Express Checkout. Yet, it manifested exactly the same way. Using the example: https://developer.paypal.com/demo/checkout/#/pattern/client Clicked PayPal button. Clicked Pay with Debit or Credit Card. Checkout window loaded with: "https://www.sandbox.paypal.com/checkoutweb/signup?buttonSessionID=..." for input of card number, expiration, and CVV as well as billing address. Billing address includes first and last name. Entered card number 4111 1111 1111 1111 and remainder of inputs with any valid data. Clicked Continue. Checkout window is loaded with: "https://www.sandbox.paypal.com/webapps/xoonboarding?buttonSessionID=...". This is a slightly different card info input page with the first and last name part of the card credentials instead of the billing address. Entered card number 4111 1111 1111 1111, again, along with valid data for the other inputs. Clicked Pay Now. Payment was successful. Using my In-Context Express Checkout, there was no difference except for the query string parameters of the checkout window URLs. After step 2, the checkout window was loaded with "https://www.sandbox.paypal.com/checkoutnow?token=..." After step 4, the checkout window was loaded with "https://www.sandbox.paypal.com/webapps/xoonboarding?token=..." In both cases, checkout succeeded, without loading the 2nd card input page, if I used a card number created by the Credit Card Generator in my PayPal Developer Dashboard. Only the card number was required using the expiration date and CVV from the card generator did not matter. Any valid values would suffice. I hope this helps somebody avoid the time-consuming, hair tearing-out, process I went through trying to find help and track down the solution to this problem. Certainly, it would have been more useful to have some kind of error rather than the load of a second input page. But, barring that, try choosing a different card number. Update: I have confirmed using 4111 1111 1111 1111 for the card number, in production, works the same way. The second payment fields input page is loaded after completing the input in the first page and clicking "Continue". Clicking "Pay Now" in the second page responds with the message "We weren't able to add this card...". However, using a card number created using the Card Number Generator (not a valid number in production), the process works correctly, showing the error message after clicking "Continue" on the first page. The second page is never loaded.
... View more