Làm thế nào để buộc tạo tài khoản trước khi thanh toán thương mại hoàn tất?


7

Tôi hiện đang có một kiểm tra một trang hoạt động tuyệt vời cho người dùng ẩn danh. Sau khi thanh toán hoàn tất, một tài khoản được tạo bằng quy tắc thanh toán 'Tạo tài khoản mới cho đơn đặt hàng ẩn danh'.

Bây giờ tôi cần thêm một sản phẩm đăng ký vào trang web và lên kế hoạch sử dụng Thanh toán giấy phép thương mại và giấy phép thương mại để bán một vai trò. Để xử lý các khoản thanh toán định kỳ, tôi dự định sử dụng Thẻ thương mại trên tệp.

Điều này gây ra sự cố vì Thẻ trên Tệp yêu cầu người dùng được xác thực để lưu thẻ. Xem https://www.drupal.org/node/1553468

Làm cách nào tôi có thể tạo tài khoản người dùng trước khi thanh toán kết thúc để Thẻ trên Tệp có thể lưu thẻ đúng cách?

Lý tưởng nhất, sẽ có một trang thanh toán tùy chỉnh buộc đăng ký tài khoản là bước đầu tiên trong thanh toán, nhưng chỉ dành cho người dùng mua sản phẩm đăng ký.

Tôi không cho phép khách truy cập đăng ký trên trang web vào lúc này (ngoại trừ thông qua Commerce Checkout) và tôi không muốn thay đổi điều đó.

Câu trả lời:


1

Tôi đề nghị các bước sau:

  • tạo một ngăn kiểm tra tùy chỉnh (xem checkout_pane_example.module ) và nhúng biểu mẫu đăng ký người dùng trong khung đó:

    /**
     * Implements hook_commerce_checkout_pane_info().
     */
    function vts_register_commerce_checkout_pane_info() {
      $panes['register'] = array(
        'title' => t('Create an account'),
        'base' => 'vts_register_pane',
        'name' => t('NAME'),
        'page' => 'checkout',
        'weight' => -5,
      );
      return $panes;
    }
    /*
     * Add user_register_form to register pane
     */
    function vts_register_pane_checkout_form($form, &$form_state, $checkout_pane, $order) { 
      $pane_form = drupal_get_form('user_register_form');
      return $pane_form;
    }
    /*
     * Alter checkout form register pane
     */
    function vts_register_form_commerce_checkout_form_checkout_alter(&$form, &$form_state, $form_id) {
      unset($form['register']['actions']); 
    }
    /**
     * checkout form submission callback.
     */
    function vts_register_pane_checkout_form_submit($form, &$form_state, $checkout_pane, $order) {
      $new_user = array(
        //dsm to find the correct $form_state['input'] for username here, because I have an altered user register form...
        'name' => $form_state['input']['field_name_first']['und'][0]['value'].'_'.$form_state['input']['field_name_last']['und'][0]['value'],
        'pass' => user_password(),
        'mail' => $form_state['input']['mail'],
        'init' => $form_state['values']['mail'],
        'status' => 1,
        'roles' => array(DRUPAL_AUTHENTICATED_RID => TRUE),
      );
      if($GLOBALS['user']->uid == '0') {
        $user = user_save('', $new_user);
        //ASSIGN the current order to created user
        $order->uid = $user->uid;
        commerce_order_save($order);
        $GLOBALS['user'] = $user;
      }
      //check that you got a new user and the order was assigned to him
      dsm($user, 'user');
      dsm($order, 'order');
    }
    /**
     * Validation callback.
     */
    function vts_register_pane_checkout_form_validate($form, &$form_state, $checkout_pane, $order) {
      //validation stuff
      return TRUE;
    }
    /**
     * Ouputs Review checkout pane.
     */
    function vts_register_pane_review($form, $form_state, $checkout_pane, $order) {
      // add some info to review pane
      return;
    }
  • Đi tới quản trị viên / thương mại / cấu hình / kiểm tra và đặt nó là vô hiệu hóa

  • Cài đặt quy tắc thương mại Extra , nó bổ sung các tính năng bạn cần:

Điều kiện quy tắc: Tổng sản phẩm so sánh số lượng loại

Quy tắc hành động: Thay đổi thuộc tính khung: Thay đổi mức độ hiển thị, trang, trọng lượng của khung

  • Tạo quy tắc:
    • Sự kiện: Khung kiểm tra quy trình.
    • Điều kiện: người dùng là ẩn danh; số lượng sản phẩm đăng ký> 0.
    • Hành động: Thay đổi thuộc tính khung: enable: true; di chuyển đến kiểm tra.

Tuyệt vời, tôi sẽ thử điều này. Bạn có bất kỳ đề xuất nào về cách tự động phê duyệt tài khoản mới và đăng nhập người dùng trước khi chuyển sang bước tiếp theo không?
Dave Bruns

@DaveBruns Tôi đã chỉnh sửa câu trả lời, điều này khó hơn một chút
Kojo

cảm ơn tôi đánh giá cao bạn nhìn vào điều này và cung cấp thêm chi tiết. Mã này sẽ chuyển hướng trở lại để kiểm tra sau khi tạo tài khoản? Tôi cũng tìm thấy một cái gì đó tương tự trong drupal.org/project/c Commerce_extra, (xem mô-đun phụ Trang đăng nhập bổ sung thương mại) nhưng chuyển hướng không hoạt động với tôi.
Dave Bruns

Ý tưởng là không rời khỏi quá trình thanh toán. Đăng ký và đăng nhập ngay lập tức khi đi xem lại khung. Đã kiểm tra một vài lần mã trên. Bạn có thể phải điều chỉnh nó một chút, nhưng điều này hoàn toàn trả lời câu hỏi của bạn tôi tin. Hãy cho tôi biết
Kojo

Phải, tất nhiên. Xin lỗi một chút quá nhiều mô-đun, xin lỗi. Tôi đã nhận được mã của mình trong một mô-đun, nhưng chức năng gửi không thành công vì một số lý do $ form_state trống.
Dave Bruns

0

Ngoài giải pháp tuyệt vời của Kojo, tôi có thể thêm rằng tôi tin rằng trường nhập tên người dùng chính xác cho cài đặt Drupal thông thường nằm ở:

'name' => $form_state['input']['name']

Mô-đun vẫn chuyển hướng đến trang hồ sơ người dùng mới, nhưng tôi sẽ điều tra nguyên nhân hơn nữa vào hôm nay.


0

Có một thiết lập cũng là một thiết lập trong drupalc Commerce cho drupal 8.

/admin/commerce/config/checkout-flows/manage/default

Bây giờ bạn sẽ thấy

Đăng nhập hoặc tiếp tục với tư cách khách

Bấm vào biểu tượng bánh răng, bấm và sau đó bỏ chọn Allow guest checkout.

Đó là tất cả những gì bạn cần làm.


Điều này trả lời tiêu đề của câu hỏi, nhưng không phải chính câu hỏi.
joshmiller

0

đây là cách tôi đạt được để tạo ngăn kiểm tra thương mại user_register_form:

/**
 * Implements hook_commerce_checkout_pane_info().
 */
function edw_commerce_dc_commerce_checkout_pane_info() {
  $panes['register'] = [
    'title' => t('Create an account'),
    'base' => 'edw_commerce_dc_register_pane',
    'name' => t('Authentication'),
    'file' => 'edw_commerce_dc.pane.inc',
    'page' => 'checkout',
    'weight' => -5,
  ];
  return $panes;
}

/*
 * Alter checkout form register pane
 */
function edw_commerce_dc_form_commerce_checkout_form_checkout_alter(&$form, &$form_state, $form_id) {
  unset($form['register']['actions']);
  if(isset($form['register'])){
    $form_id = 'user_register_form';
    $hooks = array('form');
    $hooks[] = 'form_' . $form_id;
    drupal_alter($hooks, $form['register'], $form_state, $form_id);
  }
}

    /*
 * Add user_register_form to register pane
 */
function edw_commerce_dc_register_pane_checkout_form($form, &$form_state, $checkout_pane, $order) {
  if (user_is_anonymous()) {
    $pane_form = drupal_retrieve_form('user_register_form', $form_state);
    $pane_form['#tree'] = FALSE;
    return $pane_form;
  }
}

/**
 * checkout form submission callback.
 */
function edw_commerce_dc_register_pane_checkout_form_submit($form, &$form_state, $checkout_pane, $order) {
  if (isset($form['register'])) {
    foreach ($form["register"]["#submit"] as $callback) {
      $callback($form['register'], $form_state);
    }
  }
}

/**
 * checkout form submission callback.
 */
function edw_commerce_dc_register_pane_checkout_form_validate($form, &$form_state, $checkout_pane, $order) {
  if (isset($form['register'])) {
    foreach ($form["register"]["#validate"] as $callback) {
      $callback($form['register'], $form_state);
    }
    if (!form_get_errors()) {
      return TRUE;
    }
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.