Jump to content

[Solved] How to skip "sign in to see payment methods" in one page checkout


Recommended Posts

I have just one country and one payment method available for all counties. How can I make to view the payment method instead of "sign in to see payment methods"?
It's pretty annoying and confusing for a visitor to see this message.

Also, if I have just one payment method, how could I do to skip the click on payment method?

PS. I'm testing 1.4.2.5, so I reffer to this version.

Link to comment
Share on other sites

If you change to allow guest checkout mode, then you don't have sign in. Other wise you will have to sign in.
But in guest checkout, PS will not create an account for your customer, that means your customer will not receive account information. You can change this checkout mode at your back office, Preference page.

Or if you are using Paypal payment method, please take a look at my Agile Paypal Express Checkout module at here, customer can checkout just in a few clicks without log in and registering an account. The module will take care of everything.
http://www.prestashop.com/forums/viewthread/77195/

Link to comment
Share on other sites

I just installed 1.4.2.5, and checked your scenario. It works fines.
I think you misunderstand the specification.

Even if you enabled Guest Checkout, you must click "Guest Checkout" button and input address info and click "Save", then you can go forward. See attached screen shot.

46629_4cLLiYsxp7bhIvxfeVLE_t

Link to comment
Share on other sites

I'll ignore the rude answer from above. Did you make an account just to tell me that?

@shokinro: You may be laughing, and I know all that you have said, that if I fill the address and click save, the payment method will appear.
But imagine what a customer will say, when he click on guest checkout and he'll see that message. He will or he will not leave the page? He won't even bother to fill the address anymore.
So, what should I do? To write a little story instead of that message, to explain customers what to do? Or to show directly what the payment methods are?
And I don't understand, if I have just one payment method, why has the customer to fill the address to view this?


So, no, my problem was not solved.

PS. I've edited the topic title. It's more understandable now? I don't know how to ask this in other way.

  • Like 1
Link to comment
Share on other sites

@diana13:
I am here tried to help you. maybe I misunderstood what you were looking for.
I spent my time to installed the new version and tried out you problem, even created a screenshot for you.
And tell you my test result. If you want to "Skip sign in, you have to click "Guest Checkout" button and fill in address information. I thought that was what you looking for.

>I’ll ignore the rude answer from above.
If you think I am "rude" just because said "if this solved your problem, please mark it as SOLVED by click “mark as solved” button, thanks." then I apologize.

  • Like 1
Link to comment
Share on other sites

@shokinro, the rude answer part was for johnnywhatever, who seems that he made an account just to tell me that I'm a "computer illiterate". Sorry that I didn't make myself clear.

I appreciate very much that you spent your time to give me an answer. Many hugs for that :)

Take a look at the image below. I'm on the guest checkout page, so I don't want to make an account, but then I see the text marked with red. What should I think as a customer? "Com'on, I'll buy from another shop, this one try to fool me". Do you think that he'll fill the address just to see what's happening next?

PS. I was translated the page with Google to show you the image, because I've deactivated all other languages except my default one. So there are some minor inaccuracy from original texts and my texts.

46633_wpsWD4xdqLPZ2mrvEnb9_t

Link to comment
Share on other sites

Sorry, I seems I really misunderstood you this time. :-)

Take a look at the image below. I’m on the guest checkout page, so I don’t want to make an account, but then I see the text marked with red. What should I think as a customer?

I think it is really confusing, especially for those customer to do guest checkout.
My suggestion is change message to "Please sign in or click Guest Checkout to fill your address to see payment".
This is the easiest way to do to avoid confusing.

You can change message though translation function of PrestaShop

Tools - Translations - choose "Error Message Translations"
Link to comment
Share on other sites

It seems that it's not an easy way to show directly the payment method. Eventually, I'll change the message, but it's very strange to see that message, when I have just one payment method. It seems that I have some sort of secret payment methods hiding there :))

I don't know if I should mark this topic as solved. I am tempted to leave it as it is now, maybe someone will find a solution to display directly the payment method.

Link to comment
Share on other sites

In PrestaShop, shipping and payment method are related to country/region, so it requires customer address to get the list of payment methods. I don't think there is any easy to change that, it will requires some customization coding.

It doesn't matter leave this topic as open so maybe someone could give a better answer.

Link to comment
Share on other sites

Hmmm, maybe I can remove the point 3 entirely. From what to choose, from one payment method?
Maybe there is a way to skip this point and when a customer make an order, to save in db my default (and only one) payment method.

Link to comment
Share on other sites

I dont think anyone here really understood diana's question.

The message 'sign in to see payment methods' is wrongly worded.

Diana i suggest you try changing that sentence to something more logical.

Iam doing the same for my site , example 'Please fill all account details correctly to proceed further'

You can go to back office > translations> error messages and change the line.

raj

Link to comment
Share on other sites

Iam doing the same for my site , example ‘Please fill all account details correctly to proceed further’

that's what I have suggested diana13 to do. here is my comment on 04 June 2011 12:36 AM ;-)


You can change message though translation function of PrestaShop

Tools – Translations – choose “Error Message Translations”
Link to comment
Share on other sites

I don't understand why you say it's "wrongly worded". I've put the message like it appears in one page checkout.
But it looks like I'll have nothing else to do but to change the message.
Thank you all for your responses.

Link to comment
Share on other sites

diana13 I had the same problem.. and I was solved this by doing these steps

1. Open file: classes/Module.php
2. Find function hookExecPayment() and change line:

     AND mc.id_country = '.(int)($billing->id_country).'


to

       AND mc.id_country = YOUR_COUNTRY_ID


of course replace YOUR_COUNTRY_ID to yours.
You can find it in database in ps_country table

2A. And delete line in sql querry:

INNER JOIN `'._DB_PREFIX_.'customer_group` cg on (cg.`id_group` = mg.`id_group` AND cg.`id_customer` = '.(int)($id_customer).')



3. You must turn off few warnings in controllers/OrderOpcController.php, to do this, find function _getPaymentMethods() and do comments to lines:

/*
if (!$this->isLogged)
           return ''.Tools::displayError('Please sign in to see payment methods').'';
*/


/*
       if (!self::$cart->id_customer OR !Customer::customerIdExistsStatic(self::$cart->id_customer) OR Customer::isBanned(self::$cart->id_customer))
           return '
'.Tools::displayError('Error: no customer').'';
*/


/*
       if (!self::$cart->id_address_delivery OR !self::$cart->id_address_invoice OR !Validate::isLoadedObject($address_delivery) OR !Validate::isLoadedObject($address_invoice) OR $address_invoice->deleted OR $address_delivery->deleted)
           return '
'.Tools::displayError('Error: please choose an address').'';
       if (!self::$cart->id_carrier AND !self::$cart->isVirtualCart())
           return '
'.Tools::displayError('Error: please choose a carrier').'';
       elseif (self::$cart->id_carrier != 0)
       {
           $carrier = new Carrier((int)(self::$cart->id_carrier));
           if (!Validate::isLoadedObject($carrier) OR $carrier->deleted OR !$carrier->active)
               return '
'.Tools::displayError('Error: the carrier is invalid').'';
       }
*/



4. And that's all :)

Maybe it's not the best solution, but it works fine to me..

EDIT:
I forgot to write thah You should del one line in sql querry -> it's now describle in 2A

  • Like 2
Link to comment
Share on other sites

Having the same issue. Especially since I only deliver to one country there really is no need for that. I'll try lysybogu suggestion later today. Thanks in advance lysybogu.

Overall, I'm waiting eagerly for the 1.4 One Page Checkout from http://www.canin.sk/prestashop/presta-modules/18-one-page-checkout.html. Using this with my old presta 1.2.5 shop and it works like a charm.

Link to comment
Share on other sites

You can also go the easy route and change the message at the bottom of your cart.

Go to this file on your FTP Server:
controllers/OrderOpcController.php

& EDIT THE FOLLOWING LINE :

Change this line:
if (!$this->isLogged)
return ''.Tools::displayError('Please sign in to see payment methods').'';


Change To:
if (!$this->isLogged)
return '

'.Tools::displayError('Click Instant Checkout & add your address & hit save to see Payment methods or Login!').'

';

Now it will say this- Click Instant Checkout & add your address & hit save to see Payment methods or Login!
*You can change this to whatever you want just dont mess with any of the code out side of the ( )
  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...
  • 2 months later...
  • 3 months later...
  • 5 months later...

What does it mean delete line in sql query, how do I do this?

INNER JOIN `'._DB_PREFIX_.'customer_group` cg on (cg.`id_group` = mg.`id_group` AND cg.`id_customer` = '.(int)($id_customer).')

Also is there a way to reverse this if something goes wrong?

 

I'm looking for the payment options to always be displayed.

Link to comment
Share on other sites

Well I solved this for my shop rather simply. I added a carrier that's always free, pick up from the store. Now that there's always a carrier displayed independently of the customer's delivery address, the payment methods are also always displayed. Obviously this will only work with a shop that also has a retail location, which is true in my case.

 

If anyone can foresee a problem using this method please let me know.

Link to comment
Share on other sites

  • 3 weeks later...

Well I solved this for my shop rather simply. I added a carrier that's always free, pick up from the store. Now that there's always a carrier displayed independently of the customer's delivery address, the payment methods are also always displayed. Obviously this will only work with a shop that also has a retail location, which is true in my case.

 

If anyone can foresee a problem using this method please let me know.

 

Can you send me manual for these?

I try everything but still shows me "Please sign in to see payment methods"

Link to comment
Share on other sites

  • 2 weeks later...

What does it mean delete line in sql query, how do I do this?

INNER JOIN `'._DB_PREFIX_.'customer_group` cg on (cg.`id_group` = mg.`id_group` AND cg.`id_customer` = '.(int)($id_customer).')

Also is there a way to reverse this if something goes wrong?

 

I'm looking for the payment options to always be displayed.

 

Dan1 in the original file classes/Module.php this is probably the line 439,

you must remove or comment out this line by typing // at beginning

 

of course, the operation can be reversed, simply follow the steps in reverse order

Link to comment
Share on other sites

  • 2 months later...
  • 1 year later...

You can also go the easy route and change the message at the bottom of your cart.

 

Go to this file on your FTP Server:

controllers/OrderOpcController.php

 

& EDIT THE FOLLOWING LINE :

 

Change this line:

if (!$this->isLogged)

return '

 

I used your solution and it worked, so thanks for this work around :)

 

Specifically, I did the following (PS 1.5.6):

1. Copy file controllers/front/OrderOpcController.php to dir override/controllers/front/

2. Open copied file and change line

class OrderOpcControllerCore extends ParentOrderController

to

class OrderOpcController extends OrderOpcControllerCore

3. Delete all content of this class except method _getPaymentMethods()

4. Inside this _getPaymentMethods() method, comment out these conditions:

if (!$this->isLogged)
return '<p class="warning">'.Tools::displayError('Please sign in to see payment methods.').'</p>';
if ($this->context->cart->OrderExists())
return '<p class="warning">'.Tools::displayError('Error: This order has already been validated.').'</p>';
if (!$this->context->cart->id_customer || !Customer::customerIdExistsStatic($this->context->cart->id_customer) || Customer::isBanned($this->context->cart->id_customer))
return '<p class="warning">'.Tools::displayError('Error: No customer.').'</p>';
$address_delivery = new Address($this->context->cart->id_address_delivery);
$address_invoice = ($this->context->cart->id_address_delivery == $this->context->cart->id_address_invoice ? $address_delivery : new Address($this->context->cart->id_address_invoice));
if (!$this->context->cart->id_address_delivery || !$this->context->cart->id_address_invoice || !Validate::isLoadedObject($address_delivery) || !Validate::isLoadedObject($address_invoice) || $address_invoice->deleted || $address_delivery->deleted)
return '<p class="warning">'.Tools::displayError('Error: Please select an address.').'</p>';
if (count($this->context->cart->getDeliveryOptionList()) == 0 && !$this->context->cart->isVirtualCart())
{
if ($this->context->cart->isMultiAddressDelivery())
return '<p class="warning">'.Tools::displayError('Error: None of your chosen carriers deliver to some of  the addresses you\'ve selected.').'</p>';
else
return '<p class="warning">'.Tools::displayError('Error: None of your chosen carriers deliver to the address you\'ve selected.').'</p>';
}
if (!$this->context->cart->getDeliveryOption(null, false) && !$this->context->cart->isVirtualCart())
return '<p class="warning">'.Tools::displayError('Error: Please choose a carrier.').'</p>';
if (!$this->context->cart->id_currency)
return '<p class="warning">'.Tools::displayError('Error: No currency has been selected.').'</p>';

5. Delete file cache/class_index.php (PS will regenerate it for you - this is for override to take effect)

6. You are done :)

Edited by Dejv (see edit history)
  • Like 2
Link to comment
Share on other sites

HI Dejv, is that code so that user does not need to click "SAVE"

 

Clicking "SAVE" is the most confusing part when creating a guest check or instant checkout.. Infact i don't think i have seen this "SAVE" in any other eCommerce platform or site.. It is very confusing for the users.

 

 

This is the best onepage checkout i have ever seen online so easy to use (see attachment) if someone can do this, i would certainly pay them for their time, and make this a addition on github for the community to share.

 

 

https://www.diamondcandles.com/cart

 

 

post-458754-0-76485600-1391077215_thumb.jpg

Link to comment
Share on other sites

  • 4 months later...

diana13 I had the same problem.. and I was solved this by doing these steps

 

1. Open file: classes/Module.php

2. Find function hookExecPayment() and change line:

AND mc.id_country = '.(int)($billing->id_country).'
to

AND mc.id_country = YOUR_COUNTRY_ID
of course replace YOUR_COUNTRY_ID to yours.

You can find it in database in ps_country table

 

2A. And delete line in sql querry:

INNER JOIN `'._DB_PREFIX_.'customer_group` cg on (cg.`id_group` = mg.`id_group` AND cg.`id_customer` = '.(int)($id_customer).')

3. You must turn off few warnings in controllers/OrderOpcController.php, to do this, find function _getPaymentMethods() and do comments to lines:

/* if (!$this->isLogged)            return '<option>'.Tools::displayError('Please sign in to see payment methods').'<option>';*/
/*        if (!self::$cart->id_customer OR !Customer::customerIdExistsStatic(self::$cart->id_customer) OR Customer::isBanned(self::$cart->id_customer))            return '<p class="warning">'.Tools::displayError('Error: no customer').'</p>';*/
/*        if (!self::$cart->id_address_delivery OR !self::$cart->id_address_invoice OR !Validate::isLoadedObject($address_delivery) OR !Validate::isLoadedObject($address_invoice) OR $address_invoice->deleted OR $address_delivery->deleted)            return '<p class="warning">'.Tools::displayError('Error: please choose an address').'</p>';        if (!self::$cart->id_carrier AND !self::$cart->isVirtualCart())            return '<p class="warning">'.Tools::displayError('Error: please choose a carrier').'</p>';        elseif (self::$cart->id_carrier != 0)        {            $carrier = new Carrier((int)(self::$cart->id_carrier));            if (!Validate::isLoadedObject($carrier) OR $carrier->deleted OR !$carrier->active)                return '<p class="warning">'.Tools::displayError('Error: the carrier is invalid').'</p>';        }*/

4. And that's all :)

 

Maybe it's not the best solution, but it works fine to me..

 

EDIT:

I forgot to write thah You should del one line in sql querry -> it's now describle in 2A

 

 

This doesn't work for 1.6 by the way.

Link to comment
Share on other sites

  • 6 months later...
  • 1 month later...
  • 3 months later...

Commenting all that stuff out may not be the best idea to bypass that message. It allows the customer to click the payment method button and proceed with missing data or not accepted rules, This can cause in effect even more confusion and make the customer resign.

 

It would be much better to display the payment methods, but with disabled links, that when clicked will make the customer stay on the checkout page and remind him of the remaining errors.

 

I am working on a small module doing just that, many people complain about this feature causing client's confusion.

Link to comment
Share on other sites

  • 2 months later...
  • 5 weeks later...

We have different payment methods for different countries, but most sales to home country.

Is there a way to show the default country payment options before entering any personal data, and then let it do the normal script when you push the save button.

 

Customer thinks it is "suspicious" that everything is hidden until all personal information has been entered. Which reduce conversions.

 

Running PS 1.4.8

 

  • Like 1
Link to comment
Share on other sites

  • 6 months later...

 

I used your solution and it worked, so thanks for this work around :)

 

Specifically, I did the following (PS 1.5.6):

1. Copy file controllers/front/OrderOpcController.php to dir override/controllers/front/

2. Open copied file and change line

class OrderOpcControllerCore extends ParentOrderController

to

class OrderOpcController extends OrderOpcControllerCore

3. Delete all content of this class except method _getPaymentMethods()

4. Inside this _getPaymentMethods() method, comment out these conditions:

if (!$this->isLogged)
return '<p class="warning">'.Tools::displayError('Please sign in to see payment methods.').'</p>';
if ($this->context->cart->OrderExists())
return '<p class="warning">'.Tools::displayError('Error: This order has already been validated.').'</p>';
if (!$this->context->cart->id_customer || !Customer::customerIdExistsStatic($this->context->cart->id_customer) || Customer::isBanned($this->context->cart->id_customer))
return '<p class="warning">'.Tools::displayError('Error: No customer.').'</p>';
$address_delivery = new Address($this->context->cart->id_address_delivery);
$address_invoice = ($this->context->cart->id_address_delivery == $this->context->cart->id_address_invoice ? $address_delivery : new Address($this->context->cart->id_address_invoice));
if (!$this->context->cart->id_address_delivery || !$this->context->cart->id_address_invoice || !Validate::isLoadedObject($address_delivery) || !Validate::isLoadedObject($address_invoice) || $address_invoice->deleted || $address_delivery->deleted)
return '<p class="warning">'.Tools::displayError('Error: Please select an address.').'</p>';
if (count($this->context->cart->getDeliveryOptionList()) == 0 && !$this->context->cart->isVirtualCart())
{
if ($this->context->cart->isMultiAddressDelivery())
return '<p class="warning">'.Tools::displayError('Error: None of your chosen carriers deliver to some of  the addresses you\'ve selected.').'</p>';
else
return '<p class="warning">'.Tools::displayError('Error: None of your chosen carriers deliver to the address you\'ve selected.').'</p>';
}
if (!$this->context->cart->getDeliveryOption(null, false) && !$this->context->cart->isVirtualCart())
return '<p class="warning">'.Tools::displayError('Error: Please choose a carrier.').'</p>';
if (!$this->context->cart->id_currency)
return '<p class="warning">'.Tools::displayError('Error: No currency has been selected.').'</p>';

5. Delete file cache/class_index.php (PS will regenerate it for you - this is for override to take effect)

6. You are done :)

 

 

Works for 1.6! Thanx

Link to comment
Share on other sites

  • 3 months later...

Hi

 

Is there someone here  I can hire that can get my issues fixed . I have like 3 or 4 things going on and not working right. . I also have Simpfity installed and it is suppose to show other payments and also if they want to pay with a check that does not show up either. I have emailed Simpfity and they said sounds like it is not turn on in my prestashop back office . I can not see anything about picking how I want to pay for my stuff. Either by check or another credit card. I do have ssl so I can take credit cards. As for the paypal that as always worked as long as the customer does not fill out a check out as a guest. If someone tries to sign up or sign in it doesnot work either it takes you right back to where you have to sign in or check out. If I do the 5 step check out than if I fill out check out as guest or try to log in or make account it takes me back o that page again to sign in or check out. But if I fill out all the information than click on proceed to check out I get this error https://www.iowagoatmilksoap.com/en/login?back=http%253A%252F%252Fwww.iowagoatmilksoap.com%252Fen%252Forder%253Fstep%253D1
what in the world is that url?  Oh also this will not work with the default template either.

Link to comment
Share on other sites

Hi

 

Maybe some one did fine this I found this cool thing today that will get rid of where the guest has to check in and save there information before they see there payment options .  This is so cool. I just got it and so far I like it a lot. It did cost $15 plus $2 for handing but I think it is well worth it.  Here is the place I got it at http://codecanyon.net/item/show-payment-methods/14156779 Check it out.

  • Like 1
Link to comment
Share on other sites

  • 4 months later...

Can someone please paste how the full OrderOpcController.php should look after it is edited?

Dont understand the part: 

3. Delete all content of this class except method _getPaymentMethods()

 

There are atleast 7 of those variables, which one?

So just to make it easy a full paste of the entire file "edited" would probably help alot of people.

Link to comment
Share on other sites

Following this approach you remove one problem, but generate another - the customer can see active payment method buttons, can click and proceed, and that may cause even more errors if there is no address. I would recommend using the Show Payment Methods module, that shows the buttons, but makes them not active until all the required data is saved.

Link to comment
Share on other sites

  • 2 months later...

I'm going to give the below-listed module a try -- I'm absolutely flabbergasted with PS checkout requiring someone to fully check into your site during checkout, even though it's supposed to be a 1-page guest checkout. In fact, it's actually really rude and turns off the customer.  Checkout on PrestaShop should be a simple, fast and hassle-free process.  When we're telling our customers that they don't have to register -- but then they're denied payment options before completing checkout - how do you think it makes them feel??  C'mon PrestaShop.  Get with the program.  Stop giving excuses and start listening to what we've been saying.  

 

https://codecanyon.net/item/show-payment-methods/14156779/comments

Edited by madebyjoanne (see edit history)
  • Like 1
Link to comment
Share on other sites

×
×
  • Create New...