Adyen / adyen-prestashop

Adyen Payment plugin for Prestashop
MIT License
14 stars 14 forks source link

Can not place order with "Pay by Bancontact card" #240

Closed EGxw closed 11 months ago

EGxw commented 2 years ago

Describe the bug We have many feedbacks that our Belgian customers could not place their orders with the option "Pay by Bancontact card" on our production site after an upgrade of the module to v3.7.1.

The same problem has been also reproduced in test mode on our test site. With several debug by our dev teams, we found the cause : it seems like that in checkout-component-renderer.js the onChange handler can not put correctly 'bcmc' ( type code for Bancontact card ) in 'state', therefore, this payment method will not be in 'placeOrderAllowed' array which controls the triggers for the payment-form.submit() events.

To Reproduce

  1. select Pay by Bancontact card at payment method stage
  2. fill the form : card number, date, name of card holder
  3. click on "pay my order" button
  4. nothing will happen.......

Expected behavior Place the order as other payment methods

Screenshots

image

and in chrome dev tool, i don't see any ajax from 'checkout-component-renderer.js', which means nothing triggered for the payment method form.

image

Desktop (please complete the following information):

Smartphone (please complete the following information):

Additional context Our debugs : if we put a log in this place , we can see the changes triggered by filling the form :

image

and the log will be :

image

For me it means no "bcmc" type will be putted in placeOrderAllowed array, however this placeOrderAllowed array is used for checking if this payment method is allowed to placing the order:

image

In my option: it has something wrong by confusing the brand "bcmc" and the type "bcmc" , or taking the wrong paymentForm between "Bancontact" and "Pay by bank card" in our case.

Please let me know if you need further informations.

Thank you Best regards

arouiadib commented 2 years ago

Hi,

Thanks @EGxw for the detailed report. Starting from where you ended, I found that: on form submit the lines:

                if (!paymentMethod.details) {
                    placeOrderAllowed[paymentMethod.type] = true;
                }

are the cause of the problem.

paymentMethod.details is not empty and the code in if statement doesn't execute. We need the type bcmc to be allowed (i.e placeOrderAllowed['bcmc'] = true;)

console.log(placeOrderAllowed);` just before it. You will find that in all cases, the scheme type is allowed. That's why bank card works but not bancontact.

When I remove the if statement and execute only its body, tho order starts to be processed. placeOrderAllowed[paymentMethod.type] = true;

I am using this solution as a temporary fix because a PR needs more than removing an if statement. I am not yet convinced that we need empty details so that we add bcmc to allowed payments! And why bank card is allowed by default!?

Morerice commented 2 years ago

Hi guys,

Apologies for the delay. As @arouiadib pointed out that particular code snippet was the cause of the issue. In https://github.com/Adyen/adyen-prestashop/pull/245 we have updated the Adyen checkout component version which means that we are now provided a nicer way to validate if the placeOrderAllowed buttons is set to true.

This PR will be released in the near future. In the meantime if you want, you can replicate on your end.

Best regards, Jean Adyen

merijndebeer-adyen commented 11 months ago

Dear reporter, we would like to notify you that the Adyen x Prestashop integration has received a full overhaul. From Oktober 1st 2023, we will offer a full featured, new integration that has been built from scratch. Thank you for your product feedback. We will take your suggestion into consideration and prioritize accordingly. If you are experiencing any ongoing issues with this integration please contact Adyen Support and we will make sure you will get the answers you need to get going.