Create Account with Apple Pay
-
I am trying to understand whether it is possible to create an account when the user is checking out with Apple Pay. We have a loyalty program that requires an account to track points.
We have a checkbox field to create an account visible on the form, which is checked by default. This field does work with normal CC and GPay, but seems to be bypassed with Apple Pay.
-
Hi @frankyw,
Do you have Apple Pay enabled on product pages or the cart page? It’s possible that’s why the account is not created since the account checkbox isn’t present on those pages.
The code for all gateways is the same when it comes to submission of data on the checkout page.
For automatic account creation for orders placed on product or cart pages you would need to add a small snippet of code.
Kind regards,
Ahh that is a good thought, that does seem to be it after asking the customer.
Would you have any idea as to how to enable this to work with your plugin?
We currently have the following in the functions.php file:
// Check create account box on checkout add_filter('woocommerce_create_account_default_checked' , function ($checked){ return true; });Hi @frankyw,
There are several filters you can use to ensure the create account property is checked when the checkout process runs from the product or cart page. Filter
woocommerce_checkout_posted_datais probably the best option. Here is an example:add_filter('woocommerce_checkout_posted_data', function($post_data){ if(isset($_POST['page_id']) && in_array($_POST['page_id'], array('cart', 'product'))){ $post_data['createaccount'] = 1; } return $post_data; });Kind Regards,
-
This reply was modified 5 years, 7 months ago by
Clayton R.
Thank you @mrclayton, that is helpful to understand how it could work.
Is there a way to programmatically check if the user is using Apple Pay or GPay?
Obviously using the code snippet you posted as-is would throw an error if an account already exists, so would need some checking to see if a user already exists. In addition, our existing box-checking code also throws an error if the user uses Apple Pay/GPay from the checkout page, so we have removed that.
Where I am going with this is that I would like to connect mobile wallet checkouts to existing accounts, without them having to specifically log in (which defeats the purpose of using a low friction checkout method.
The post data object contains a property called payment_method which you can use to determine which gateway is being used.
Wordpress provides all the methods to find a user ID based on an email address so you could fetch the user ID by email and then add that ID to the order.
Kind regards,
Ok thank you, I will take a look at that. Cheers.
Just in case anyone else is interested in accomplishing this, this was my solution. Thanks again @mrclayton.
add_filter('woocommerce_checkout_posted_data', function($post_data){ // check if not already logged in if ( !is_user_logged_in() ) { // if payment method is mobile wallet if (isset($post_data) && in_array($post_data['payment_method'], array('stripe_applepay', 'stripe_googlepay'))) { //Check if user exists $user = get_user_by('email', $post_data['billing_email']); if($user){ // user found, log them in wp_set_current_user($user->ID); wp_set_auth_cookie($user->ID, true); } else { // no matching user, create account $post_data['createaccount'] = 1; } } } return $post_data; });Hi @frankyw,
I strongly suggest you edit your code. Your current code contains a serious security issue. In Apple Pay, a user can edit their email address to whatever they want it to be. So in your current code, someone could edit their email address in Apple Pay to be the admin email and with your logic they will be automatically logged in to your site as the admin.
Do not log the user in with this method. You need to just assign the order’s customer ID by using the
woocommerce_checkout_customer_idfilter.Kind Regards,
Hi @mrclayton
Ok good to know, my understanding was the email was fixed to a verified email attached to an Apple ID.
Here is version two, appreciate any feedback you may have.
// Create user if one does not exist function tn_checkout_create_acct( $post_data ) { if ( !is_user_logged_in() ) { $user = get_user_by('email', $post_data['billing_email']); if ( !isset($user) ) { $post_data['createaccount'] = 1; } } return $post_data; } add_filter('woocommerce_checkout_posted_data', 'tn_checkout_create_acct'); // Attach order to existing account if user not logged in function tn_checkout_set_customer_id( $current_user_id ) { if ( !is_user_logged_in() ) { $user = get_user_by('email', $_POST['billing_email']); if ( isset($user) ) { $current_user_id = $user->ID; } } return $current_user_id; } add_filter('woocommerce_checkout_customer_id', 'tn_checkout_set_customer_id');@frankyw your revisions look good to me.
Great, thank you very much for your help (even though this turned out to not really be anything to do with your plugin!)
Hi @frankyw I always appreciate a good review on the WordPress.org page.
https://wordpress.org/support/plugin/woo-stripe-payment/reviews/
-
This reply was modified 5 years, 7 months ago by
The topic ‘Create Account with Apple Pay’ is closed to new replies.