bigcommerce / checkout-sdk-js

BigCommerce Checkout JavaScript SDK
MIT License
133 stars 217 forks source link

paypalcommercecredit payment provider: click_initiate_payment_reject #1847

Open fresh5447 opened 1 year ago

fresh5447 commented 1 year ago

I am successfully initializing the paypalcommercecredit payment option, however when I click the "Pay Later" button that is injected, the paypal modal opens and is stuck in a spinning state, and I receive the following error:

Screenshot 2023-02-15 at 3 24 27 PM

Here you can see the payment successfully injecting the pay later option:

Screenshot 2023-02-15 at 3 24 15 PM

This is what my initialization is:

                   const options = {
                        methodId: 'paypalcommercecredit',
                        paypalcommerce: {
                            container: '#checkoutButton--paypalcommercecredit',
                            clientId: clientId,
                            initializesOnCheckoutPage: true,
                            currencyCode: 'USD',
                            submitForm: () => {
                                console.log("paypalcommercecredit submitForm Triggered")
                                getRoot(self).setLoading(true)
                                // Example function
                                getRoot(self).service.submitOrder({payment: { methodId: 'paypalcommercecredit' }})
                                    .then(() => {
                                        return window.location.assign('/checkout/order-confirmation');
                                    }).catch((err) => {
                                        console.error("Order Submit Error", err)
                                        return window.location.assign('/cart.php');
                                    })
                            },
                            onComplete: () => console.log("On Complete Fired"),
                            onRenderButton: (resolve, reject) => {
                                console.log("paypalcommercecredit ON RENDER BUTTON??")
                                const hasError = getRoot(self).service.getState().errors.getInitializePaymentError();
                                if (hasError) {
                                    console.error("PayPal on onRenderButton:", getRoot(self).service.getState().errors.getInitializePaymentError())
                                } else {
                                    console.log("paypalcommercecredit  onRenderButton success")
                                }
                            },
                        },
                    }

                    await service.initializePayment(options);

I have also ensured the PayLater option is enabled in BigCommerce

Screenshot 2023-02-15 at 3 28 58 PM

Currently running @bigcommerce/checkout-sdk" version": "1.183.0"

Any tips on debugging this would be great, thanks!

animesh1987 commented 1 year ago

Hey @serhii-tkachenko can your team please take a look at this query?

serhii-tkachenko commented 1 year ago

Hey @fresh5447 👋

As far as I see, this error occurred because onValidate callback is not provided. Also you have several options in paypal commerce object, that don't use in initializePayment method.

                   const options = {
                        methodId: 'paypalcommercecredit',
                        paypalcommerce: {
                            container: '#checkoutButton--paypalcommercecredit',
                            clientId: clientId,
                            submitForm: () => {
                                console.log("paypalcommercecredit submitForm Triggered")
                                getRoot(self).setLoading(true)
                                // Example function
                                getRoot(self).service.submitOrder({payment: { methodId: 'paypalcommercecredit' }})
                                    .then(() => {
                                        return window.location.assign('/checkout/order-confirmation');
                                    }).catch((err) => {
                                        console.error("Order Submit Error", err)
                                        return window.location.assign('/cart.php');
                                    })
                            },
                            onRenderButton: (resolve, reject) => {
                                console.log("paypalcommercecredit ON RENDER BUTTON??")
                                const hasError = getRoot(self).service.getState().errors.getInitializePaymentError();
                                if (hasError) {
                                    console.error("PayPal on onRenderButton:", getRoot(self).service.getState().errors.getInitializePaymentError())
                                } else {
                                    console.log("paypalcommercecredit  onRenderButton success")
                                }
                            },
                            onValidate: (resolve, reject) => {
                                // --- here is you validation code here
                            }
                        },
                    }

                    await service.initializePayment(options);

I might recommend to check the initialization typescript interface for PayPalCommerce here: https://github.com/bigcommerce/checkout-sdk-js/blob/master/packages/core/src/payment/strategies/paypal-commerce/paypal-commerce-payment-initialize-options.ts#L79

Please, let us know if it fixes the issue. Thanks!

bc-0dp commented 8 months ago

Hi @fresh5447 was this resolved?