So I'm running into an issue where a customer checks out with PayPal Express and it fails, so they chose to pay with credit card and when PayPal tries to process this it comes back with a duplicate order id. This is a problem because obviously the order hasn't been placed yet, or charged. But because of the first failed attempt with PayPal Express, the subsequent attempts fail because the order id has already been used.
What version of Magento are you using?
Is the Credit Card also processed by PayPal as well or another provider?
We are using 1.13.10 EE. PayPal Payflow Pro handles both the credit card processing and the Express side.
This only happens when the customer attempts to pay with Express first and it fails, then they move and try to pay with a credit card. PayPal rejects every attempt after for having a duplicate order id.
I know there is a setting in PayPal to allow more than one charge for an order id or not, and we have that set to not for business reasons. But there obviously hasn't been a successful charge made since one it failed and two we are only asking for authorization. The charge happens when we ship. So it's failing on the auth part.
You may need to have a developer to examine the logs and go through the process step by step.
I had this issue as well last year. However as a business we decided to change the setting in PayPal that allowed multiple payments for a order ID. We have had no issues after that setting was changed.
However, here is a issue similar to yours that I thought might be of interest: http://magento.stackexchange.com/questions/85910/paypal-gateway-has-rejected-request-payment-has-alr...
I could also see a possible solution is when a order fails, programmatically remove the reserve order ID.
Thanks. I'll check into that.
I am looking into setting the reserved_order_id to null when it fails. We already have some custom stuff to show messages when ti fails.
I've tried multiple ways but it never saves the quote. I pull the quote from the checkout/session and I've tried writing a query to directly edit the database (bad I know). But neither work. The database stays the same and I refresh it while I step through the code.