It needs to be explicitly clear for the end user when their order is going to be processed and they will be charged.

Currently the submit buttons usually just say "Continue to next step". This implies (at least to me, and I assume most customers) that there's another step to go before your credit card will be charged.

I assume we may have gone this route, because it's hard (with dynamic configurable checkout flow) to understand when exactly the end user will be charged.

The problem is though, every store should make this explicitly clear.

I would recommend at the very least, changing the wording of the "Review" pane submit_value to "Proceed with purchase" or "Process this order". Or better yet, make it configurable to checkout pane.

You can currently manipulate the values for each pane by using the `hook_commerce_checkout_page_info_alter(&$pages)`;

Here's a snippet:

function mymodule_commerce_checkout_page_info_alter(&$pages) {
  //dpm(array("PAGES" => $pages));
  if(!empty($pages['review'])) {
    $pages['review']['submit_value'] = t('Proceed with purchase');
  }
}  

Some sites won't use the review pane, so Drupal Commerce by default should be smart enough to pick this up, and display an appropriate message letting the user know they will be charged.

It might also be nice to be able to display a message to the end user on the bottom near these buttons. This could probably be done currently by re-organizing where $page['mypage']['help'] is displayed in the theme.

Comments

rszrama’s picture

One additional core challenge to work around is the fact that we don't know until form submission whether payment will be processed immediately or require the intermediate redirect step. That ambiguity (and the general ambiguity you described) is the reason it was left generic and open for alteration; perhaps a simple contrib can provide a form for altering these since we don't have settings forms for checkout pages.

For example, if I know my store will only ever support PayPal WPS, I can easily change the text of the button to say "Proceed to payment" or something like that. Or if I know I only support on-site CC payment, I could just have it say "Complete order". "Submit payment" would work as a better default for the Review page (or Checkout page if Review isn't used), though, if it's determined that it's the final page before the Payment / Completion pages.

Whaddya think?

j0rd’s picture

StatusFileSize
new95.5 KB

It's fairly easy to modify in a custom module.

function MYMODULE_commerce_checkout_page_info_alter(&$pages) {
  if(!empty($pages['review'])) {
    $pages['review']['submit_value'] = t('Proceed with purchase');
  }
}

If the names of the buttons were different for each stage (Proceed to Checkout, Proceed to Review, Proceed to Payment) then you could more simply use a string override in settings.php

I understand the problem is it being generic and hard to determine, but it really ruins the user experience.

Maybe something like this could be done. See attached image. Or another tab could be provided where one can easily manage the button names for each stage. Maybe the tab is best.

As mentioned before, it might be a good idea to be able to provide a small description near the buttons as well. Many users are terrified on checkout processes, of not knowing when their sale will be processed. Many go through the proceed up to the stage where they think they will be charged, to find out the total price including shipping + taxes before they decide if they want to purchase or not. You need to make it clear to them when they will be charged, otherwise they may just decide to stop poking around and you'll lose sales.

UPDATE: if we were going to make this configurable, we would most likely store the value in:
t(variable_get('commerce_checkout_button_name_review', 'Proceed with purchase'));

So maybe just wrapping it in a variable would suffice. Then it would be easily changeable from the database. Not sure what the best way to do this with passing it though t() for translation though.

1kenthomas’s picture

It is fairly easy to modify in a custom modules-- if you know what you're doing. It's also hackish (on a level that shouldn't require it). Moreover, this will result in plenty of implementations missing this detail and having poor end-user usability.

Yes, this will result in lost sales.

How about stuffing the correct pane into a variable (for now?) You could also use a table entry. Both are preferable to me, than needing a module to fix.

rszrama’s picture

Thinking about this again, I really think it's better suited to a contrib module that alters these options into the UI for sites that want it. In core, translatability is more important than customizability. You cannot translate the value of a variable as suggested in #2 - the function only supports string literals.

This still might be a good option for core if we decide it's fine to provide an interface for changing these so long as the translatable default remains in place. We do a similar thing in a couple other places. The big issue to work around, though, would still be the fact that we don't know in advance (when the form is rendered) what the next page will be because of the way the off-site redirect pane works (as described in comment #1).

4kant’s picture

Have just tested Commerce Kickstart demo.
Bought some stuff "by accident" because of this "Continue to the next step" button.
I don´t think this button should be left left like this.
Isn´t there any solution for this yet?

kdmport’s picture

Do the snippets above work as is or do I need additional code? I just realized this issue after launching a site and need to change the label to a ...Purchase one.

Thanks - I'm brand new to drupal.

-KM

**EDIT / UPDATE** - NM - It works when entered correctly...

brianlp’s picture

Priority: Normal » Major

Is there any news on this? The problem here in Germany is that there is a new law for customer protection. It regulates the text of the buy-button which confirms the terms of use. Ususally it is the last checkout button which hands you over to the payment process.

It specifies that the button text itself has to explicitly express that this click is subject to charge. It needs to say "BUY" or "Order subject to charge" or "Buy - fee required". Wording like "Order", "Continue" etc is not valid.

I haven't found a way to get this working and I'm not skilled enough in php to write custom modules. I'm quite concerned because German shops have to implement this until July 31st to avoid a warning by court (which is very expensive). Competitors can (and will to 99% ) sue violators over these details and can achieve a shutdown until you fix it.

Any help or hint is appreciated.

EDIT
Meanwhile I have crafted (copy & paste) a module that works and can be translated. Thanks to j0rd.

rszrama’s picture

Component: User experience » Contributed modules

Nothing new since my comment in #4; I'm not aware of any contrib solving this yet.

vasike’s picture

maybe this could be a feature for Commerce Checkout Pages module.
They already have some configurations for the Checkout Pages.

vasike’s picture

Status: Active » Needs review

Could Commerce Checkout Pages module be a part of Drupal Commerce, so the checkout pages titles, buttons or others could be configurable from UI?

rszrama’s picture

Priority: Major » Normal
Status: Needs review » Postponed

I'm not sure if it should be a core feature or not, but at the very least we won't be putting a module like that in before 2.x.

das-peter’s picture

This feature becomes more important since on August 1st in Germany a new law will become active which defines valid labels for buttons in online shops.
This is the official draft of the law: http://dipbt.bundestag.de/dip21/btd/17/077/1707745.pdf

The draft of the law says: It has to be absolutely clear that by pressing the button a financial commitment is made.
I guess this is mainly related to the button directly before the payment or the order completion (in the case there's no online payment).

Valid labels for Order-Buttons will be:

  • ? (zahlungspflichtig bestellen)
  • Order with costs (kostenpflichtig bestellen)
  • Contract with costs (zahlungspflichtigen Vertrag schließen)
  • Buy (kaufen)

Examples of invalid labels:

  • Register / sign up (Anmeldung)
  • Continue (weiter)
  • Order(bestellen)
  • Make order (Bestellung abgeben)
  • Complete your order (Bestellung abschließen)

The button's label must be legible and no further additions may be added here. The same applies for check boxes or hyperlinks to query the confirmation of the purchase decision.

Consequences of failure to comply:
If the contractor doesn't meet the requirements, no valid contract will be concluded. This means the contractor does not have the legal basis to force the customer to pay.
(... Erfüllt der Unternehmer seine Pflicht aus Absatz 3 nicht, kommt ein Vertrag insgesamt nicht zustande; der Unternehmer kann vom Verbraucher das Entgelt nicht verlangen.)

PS: Proper translations very welcome.

Following issue is related, but points to a Europe wide law: #1470330: Legally important special button text for last checkout step

brianlp’s picture

Peter, I have already mentioned it above and tried the solution posted. I made that rudimentary module which works for me. But as I am not a develper (and the hurdles on drupal.org are to high for me) I cant make a real module out of that. It lies in my git and if it makes sense, you or anyone else could improve and publish it.

Bojhan’s picture

Status: Postponed » Active

I am going to mark this back to active, it is indeed a serious issue that will cause conversion loss. I ran against this issue for Kickstart.

http://baymard.com/checkout-usability might be a worthwhile resource for DC.

dornea.nu’s picture

Hi! Thanks for #2. Unfortunately the code doesn't work for me.

@papalapp: could you please post your working code?

Thanks in advance.

EDIT: Sorry my own fault. It's working now! :)

vasike’s picture

Component: Contributed modules » Checkout
Status: Active » Needs review
StatusFileSize
new18.96 KB

i implemented Commerce Checkout Pages in the patch attached.
Unfortunately it seems this module has no update for almost a year.

  • it's part of Checkout module
  • I added the 2 new settings (customize buttons) required by the current issue.
  • I build an i18n translation for the customized Checkout pages.
rszrama’s picture

Status: Needs review » Postponed

See my comment in #11. Why not try to take over that module in the meantime, vasike?

vasike’s picture

Status: Postponed » Active

because of #14 : improve Commerce Kickstart usability.
and i am totally convinced that we definitely let people change some labels without coding and other custom contrib module.

vasike’s picture

Title: Cart Review "submit_value" of "Continue to next step" is confusing to end user » Customize Checkout Pages: Page names, pages order, buttons labels, help text, new custom pages
Status: Active » Needs review

retitleing.
the last patch doesn't change anything (the defaults). just adds new capabilities.

p.s. imho, this kind of capabilities (#1147690: Make "Add to cart" button text a display format setting (configurable at the field level by content type) this is another one) are basic (must have) capabilities that shouldn't miss.
it's like building fields without any UI labeling capability.

rszrama’s picture

Status: Needs review » Postponed

More specifically, the fact that I've said we won't be adding this patch to the 1.x branch. The problem is adding a whole new table and user interface at this point to what should be a stable core, and we currently aren't supporting i18n_string at all (the approach this patch takes to support translatable interface text). Commerce Kickstart could use the functionality just as easily if it were in a contrib module vs. core. : )

vasike’s picture

#1793200: Prepare for Drupal Commerce - new issue opened with patch for Commerce Checkout Pages module

it has an option to make a migration to Drupal commerce - it supposes that Drupal Commerce has something similar (what it's done the in the last patch #16).

brephraim’s picture

Patch in number 16 works for me!

TamB’s picture

Hi vasike,

The patch in #16 works perfectly fine!

Many thanks

SandraVdv’s picture

The patch in #16 works, but it is not possible to get a page before the "checkout" page.. That one is always on top.
When we install the Commerce Extra Login Page it is necessary to have a login page before the checkout page...
I tried altering a line in the function commerce_checkout_manage_form() from
'#disabled' => in_array($id, array('checkout', 'complete')), to '#disabled' => in_array($id, array('complete')),
It makes the "checkout" page also draggable, but the weight doesn't get saved for some reason...
Any lights on what is going wrong?

tmsimont’s picture

@sandravdv: I had the same issue. unfortunately it seems the Commerce Checkout Pages module seems to break the order of pages created by other custom modules by locking checkout and complete like this. I had created a few custom pages that exist before the "Checkout" page, but the dc_co_pages module forces "Checkout" to be the front page.

That module also seems to be abandoned.

I put up a patch here: #1865844: Don't lock checkout page and complete page that removes these locks, but I do fear what consequences might result. I wonder why those locks were put in place to begin with.

tmsimont’s picture

Issue summary: View changes

Made code example more clear

iKb’s picture

Status: Postponed » Needs review
iKb’s picture

Issue summary: View changes
StatusFileSize
new23.14 KB

New patch based on latest dev. I am still working on the i18n_string integration.

Status: Needs review » Needs work

The last submitted patch, 27: checkout_pages_customization-1308582-27.patch, failed testing.

fortozs’s picture

Any updates on this? I'm wary of using a year old patch. "Continue to next step" is misleading. I think "Complete Order" is meaningful even to payment redirect.

The last submitted patch, 16: checkout_pages_customization-1308582-16.patch, failed testing.

drdrstudio’s picture

Any update on this? I am not sure how to use the above snippet -

<?php
function mymodule_commerce_checkout_page_info_alter(&$pages) {
  //dpm(array("PAGES" => $pages));
  if(!empty($pages['review'])) {
    $pages['review']['submit_value'] = t('Proceed with purchase');
  }
}
?>

Would like a legit way make this edit (for similar reasons to above users), rather than the non drupal, hacky

<script>
jQuery("input.checkout-continue").val('Submit Payment');
</script>
Wtower’s picture

The hook works fine, but this still needs to be addressed better.

@drdrstudio
Create a directory under sites/all/modules with any name you want, for example drdrstudiomodule. In there, create a file drdrstudiomodule.info containing something like:

name = drdrstudiomodule
description = Some description.
package = Commerce (contrib)
core = 7.x
dependencies[] = commerce

And then a file named drdrstudiomodule.module with the code snipper. Be sure to replace 'mymodule' with 'drdrmodule' or whatever the module's name will be.

hkovacs’s picture

Why not just do a hook_form_alter?

I use a single page express checkout and did the following...

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'commerce_checkout_form_checkout') {
    $form['buttons']['continue']['#value'] = t('Desired Custom Text Here');
  }
}

HTH

Shamily A’s picture

Use form_alter to customize submit button values.

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case 'commerce_checkout_form_checkout':
      if (isset($form['buttons']['continue']['#value'])) {
        $form['buttons']['continue']['#value'] = t('Proceed with purchase');
      }
       break;
   }
}
bojanz’s picture

Status: Needs work » Closed (won't fix)

We're done making major changes to 1.x

tonytheferg’s picture

@j0rd thanks for the snippet in #2. :)

dbdrupal’s picture

Thought I'd try #2 since someone commented 5 months ago that it worked for them. However, it did not work for me and the button remains with the same text. I'm on the latest version of Commerce 1.x. Is it possible that my theme (Porto) is somehow not allowing the change? Seems like a simple solution, but simply not working. Any thoughts? Really a bad title on a button when clicking it initiates the payment transaction.