Re: One-Page Checkout [Support Thread]
Further investigation shows that Square Payment is somehow inserting itself into the OPC proccess. We were getting
Code:
paymentform:1 Uncaught Error: SqPaymentForm element with id `square_cc-number` not found. Has the DOM finished loading?
See: https://docs.connect.squareup.com/articles/adding-payment-form/#generatingpaymentform
at s.buildIframeController (paymentform:1)
at s.buildIframeControllers (paymentform:1)
at s.build (paymentform:1)
at s.build (paymentform:1)
s.buildIframeController @ paymentform:1
s.buildIframeControllers @ paymentform:1
s.build @ paymentform:1
s.build @ paymentform:1
And, we still got the error without OPC using PayPal and the standard, three-page checkout.
PayPal brings the customer back to OPC and Square is looking for the cc number.
When PayPal brings the customer back to Step 2 of 3 in the standard checkout, the Square error is also there BUT, it disappears when the customer goes to Step 3 of 3. Once on Step 3 of 3, PayPal will confirm even with Square turned on as the error disappears between steps 2 and 3.
The system goes through all steps including registering the New Customer, emailing info, order shows up, etc.
Again, ALL failed testing is done as never before customer, using PayPal from Split-Page Login.
Conversely, when a logged-in user orders an item and clicks on Checkout (OPC ON - Square ON), the OPC is shown with the options for a CC or PayPal Express. Choosing PayPal Express and clicking Confirm takes the logged-in user to PayPal and completes the order on return. It does not return to OPC to give the user the option to confirm but, goes immediately to completion.
Synopsis:
We were wondering why some PayPal orders were coming in and we were getting emails that PayPal would not allow others to check out. Current trials result in:
1. Customer NOT logged in and NOT a previous customer with both Square and OPC enabled
* Places item in cart
* Selects Check Out
* Arrives a split-login
* Selects PayPal Express
* Browser opens PayPal
* Customer selects method of payment and pays
* Browser returns to site with "uncaught Error" from Square
* Customer is unable to complete the transaction as the Confirm Order Button does nothing
2. Returning Customer Or Newly Registered Customer, logged in with both Square and OPC enabled.
* Places item in cart
* Selects Check Out
* Arrives at OPC with options for Square, PayPal, or Money Order
* Selects PayPal Express
* Browser opens PayPal
* Customer selects method of payment and pays
* Browser returns to site and completes the transaction without requiring any further action from the Customer
We are still not certain whether Square or OPC is the culprit but, one of them is "sticking it's nose in where it doesn't belong.":P
Re: One-Page Checkout [Support Thread]
Sorry, didn't catch my error until after edit time.
Quote:
Further investigation shows that Square Payment is somehow inserting itself into the OPC proccess. We were getting
should read
Quote:
Further investigation shows that Square Payment is somehow inserting itself into the OPC proccess when a non-logged in customer selects PayPal Express from the split-login page. We were getting
Re: One-Page Checkout [Support Thread]
@dbltoe, thanks for the detailed investigation. I'm in the middle of another investigation right now, but will give this a look real-soon-now.
Re: One-Page Checkout [Support Thread]
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
haredo
Thank You Cindy
No problem. Is this available on the test site that @dbltoe provided me access to a couple of months ago?
Re: One-Page Checkout [Support Thread]
Give me an hour it will be there and I will PM you the access credentials
Re: One-Page Checkout [Support Thread]
Re: One-Page Checkout [Support Thread]
@dbltoe and @haredo, rather than replying with quote I thought I'd save the zen-cart site a little storage.:P
My initial hunch is that there's something that OPC needs to do to "convince" Square that the payment method is already determined and that it (and any other payment-module except for Express Checkout) can "bow out".
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
lat9
@dbltoe and @haredo, rather than replying with quote I thought I'd save the zen-cart site a little storage.:P
My initial hunch is that there's something that OPC needs to do to "convince" Square that the payment method is already determined and that it (and any other payment-module except for Express Checkout) can "bow out".
OK, I've had a chance to look into this a bit more. It turns out that there is also an issue with OPC and payeezyjszc during PayPal Express Checkout (i.e. like the customer can't complete their PP-ec purchase due to a jQuery issue).:oops:
The issue with OPC (and possibly the 3-page-checkout mode as well) is that all enabled payment methods are being loaded when the current order is being paid with PayPal-ec and some of those methods' javascript/jQuery scripts are getting confused since their payment-selections aren't rendered during "special checkout".
It might take me a couple of days, but I've at least got a direction to look!
Re: One-Page Checkout [Support Thread]
Quote:
Originally Posted by
lat9
OK, I've had a chance to look into this a bit more. It turns out that there is also an issue with OPC and payeezyjszc during PayPal Express Checkout (i.e. like the customer can't complete their PP-ec purchase due to a jQuery issue).:oops:
The issue with OPC (and possibly the 3-page-checkout mode as well) is that all enabled payment methods are being loaded when the current order is being paid with PayPal-ec and some of those methods' javascript/jQuery scripts are getting confused since their payment-selections aren't rendered during "special checkout".
It might take me a couple of days, but I've at least got a direction to look!
The issue with the integration of PayPal Express Checkout, One-Page Checkout and payment methods that use a separate checkout_payment page jscript module is as follows.
Requirements to "expose" the issue:
The site has enabled the PayPal Express Checkout (and its shortcut button) and either Square or Payeezyjs in addition to One-Page Checkout.
A new customer chooses to pay via the PP-EC shortcut button and the email address associated with the customer's PayPal account is not associated with a customer on the site.
The problem:
The jscript processing associated with those payment methods (and possibly others) currently loads so long as the associated payment-method is enabled in the admin. When the customer makes a purchase using the PP-ec Shortcut button, the payment-gathering page is rendered only with the PayPal-related form elements. Unfortunately, the jscript for these payment methods assumes that its form-elements have been rendered if the jscript is loaded. When that jscript attempts to verify settings of an unrendered HTML element, a javascript error is raised; that error subsequently results in the One-Page Checkout's "Confirm Order" button failing to activate.
The solution:
Unfortunately, this change requires updates to both the One-Page Checkout and the payment-methods' processing.
First, the OPC's entry-page processing will check to see if the customer is currently in "special checkout" (a.k.a. checkout using the PP-ec shortcut) and, if so, "resets" the payment methods to activate only the special-checkout payment method. Note that this is a chicken/egg situation, since for OPC to determine whether or not the customer is in "special checkout", all currently-enabled payment methods must be loaded.
When OPC sees that the customer is in "special checkout", OPC reloads the payment methods to specify that the active payment-method is the "special checkout" one. This does not remove the object-instances associated with the other enabled payment methods, but does ensure that only the active payment-method will be called for subsequent payment actions.
Secondly, each payment-method that has a separate jscript_*.php module requires update to that module's loading to ensure that the associated javascript is only loaded when the customer is not in "special checkout".
The changes:
The file /includes/modules/pages/checkout_one/header_php.php:
Code:
// load all enabled payment modules
require DIR_WS_CLASSES . 'payment.php';
$payment_modules = new payment;
// -----
// Check to see if we're in "special checkout", i.e. the payment's being made via the PayPal Express
// Checkout's "shortcut" button. If so, "reset" the payment modules to include **only** the payment
// method presumed to be recorded in the current customer's session.
//
if ($payment_modules->in_special_checkout()) {
unset($payment_modules);
$payment_modules = new payment($_SESSION['payment']);
}
$payment_selections = $payment_modules->selection();
$flagOnSubmit = count($payment_selections);
This change is available on the OPC plugin's GitHub repository.
The jscript_square.php module, distributed as part of the Square payment-method:
Code:
if ($payment_modules->in_special_checkout() || !defined(MODULE_PAYMENT_SQUARE_STATUS) || MODULE_PAYMENT_SQUARE_STATUS != 'True' || (!defined('MODULE_PAYMENT_SQUARE_APPLICATION_ID') || MODULE_PAYMENT_SQUARE_ACCESS_TOKEN == '')) {
return false;
}
The jscript_payeezy.php module, distributed as part of the PayeezyJsZc payment-method:
Code:
if ($payment_modules->in_special_checkout() || !defined(MODULE_PAYMENT_PAYEEZYJSZC_STATUS) || MODULE_PAYMENT_PAYEEZYJSZC_STATUS != 'True' || (!defined('MODULE_PAYMENT_PAYEEZYJSZC_JSSECURITY_KEY') && !defined('MODULE_PAYMENT_PAYEEZYJSZC_JSSECURITY_KEY_SANDBOX') )) {
return false;
}
I'll be cross-posting a link to this post to the Square and PayeezyJsZc payment methods' support threads.