Hello,
I have developed a payment module.
Everything working fine except showing error messages.
After click place order, form submitted to
/rest/default/V1/carts/mine/payment-information
if there is an error, returns 400 Bad Request with message and trace
{"message":"An error occurred on the server. Please try to place the order again.", "trace": "#0 /vendor\/magento\/framework\/Interception\/Interceptor.php(146): Magento\\Checkout\\Model\\PaymentInformationManagement->savePaymentInformationAndPlaceOrder(386, Object(Magento\\Quote\\Model\\Quote\\Payment), Object(Magento\\Quote\\Model\\Quote\\Address)) #1 var\/generation\/Magento\/Checkout\/Model\/PaymentInformationManagement\/Interceptor.php(26): Magento\\Checkout\\Model\\PaymentInformationManagement\\Interceptor->___callPlugins('savePaymentInfo...', Array, Array) #2 [internal function]: Magento\\Checkout\\Model\\PaymentInformationManagement\\Interceptor->savePaymentInformationAndPlaceOrder(386, Object(Magento\\Quote\\Model\\Quote\\Payment), Object(Magento\\Quote\\Model\\Quote\\Address)) #3 /vendor\/magento\/module-webapi\/Controller\/Rest.php(307): call_user_func_array(Array, Array) #4 /vendor\/magento\/module-webapi\/Controller\/Rest.php(216): Magento\\Webapi\\Controller\\Rest->processApiRequest() #5 /var\/generation\/Magento\/Webapi\/Controller\/Rest\/Interceptor.php(37): Magento\\Webapi\\Controller\\Rest->dispatch(Object(Magento\\Framework\\App\\Request\\Http)) #6 /vendor\/magento\/framework\/App\/Http.php(135): Magento\\Webapi\\Controller\\Rest\\Interceptor->dispatch(Object(Magento\\Framework\\App\\Request\\Http)) #7 /vendor\/magento\/framework\/App\/Bootstrap.php(258): Magento\\Framework\\App\\Http->launch() #8 /index.php(39): Magento\\Framework\\App\\Bootstrap->run(Object(Magento\\Framework\\App\\Http)) #9 {main}"}
I need to show an error like "Payment failed: Reason - Message"
How can i do this ?
Thanks
Hello,
Any luck on this? I am having the same issue.
Hello,
I have had the same issue and found away around this with the following steps:
Edit the function savePaymentInformationAndPlaceOrder in vendor/magento/module-checkout/Model/PaymentInformationManagement.php
or for Guest orders in vendor/magento/module-checkout/Model/GuestPaymentInformationManagement.php
Change the function from:
public function savePaymentInformationAndPlaceOrder( $cartId, $email, \Magento\Quote\Api\Data\PaymentInterface $paymentMethod, \Magento\Quote\Api\Data\AddressInterface $billingAddress = null ) { $this->savePaymentInformation($cartId, $email, $paymentMethod, $billingAddress); try { $orderId = $this->cartManagement->placeOrder($cartId); } catch (\Exception $e) { throw new CouldNotSaveException( __('An error occurred on the server. Please try to place the order again.'), $e ); } return $orderId; }
to:
public function savePaymentInformationAndPlaceOrder( $cartId, $email, \Magento\Quote\Api\Data\PaymentInterface $paymentMethod, \Magento\Quote\Api\Data\AddressInterface $billingAddress = null ) { $this->savePaymentInformation($cartId, $email, $paymentMethod, $billingAddress); try { $orderId = $this->cartManagement->placeOrder($cartId); } catch (\Exception $e) { var_dump($e); throw new CouldNotSaveException( __('An error occurred on the server. Please try to place the order again.'), $e ); } return $orderId; }
So there has only been added a var_dump() to display the actual error.
When you changed this the error will be shown in the Network tab in your browser. (Open the element inspector go to the Network tab and click on the payment-information request en open the preview and you will see the actual error). You will probably be redirected to the cart so I recommend to enable Preserver Log in the Network tab.
This is just a work around for now and I am trying to find a clean way to maybe log the error. I will keep you posted as soon as I have a good solution.
Let me know if the above answer was the solution to find the problem in the checkout.