Drupal Commerce'de ödeme sayfasına yönlendiren anonim kullanıcılar için programlı olarak sipariş oluşturma


19

Ryan'ın programlı bir sipariş oluşturabileceğiniz harika bir kodu var

<?php
global $user;
$product_id = 1;
// Create the new order in checkout; you might also check first to
// see if your user already has an order to use instead of a new one.
$order = commerce_order_new($user->uid, 'checkout_checkout');

// Save the order to get its ID.
commerce_order_save($order);

// Load whatever product represents the item the customer will be
// paying for and create a line item for it.
$product = commerce_product_load($product_id);
$line_item = commerce_product_line_item_new($product, 1, $order->order_id);

// Save the line item to get its ID.
commerce_line_item_save($line_item);

// Add the line item to the order using fago's rockin' wrapper.
$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
$order_wrapper->commerce_line_items[] = $line_item;

// Save the order again to update its line item reference field.
commerce_order_save($order);

// Redirect to the order's checkout form. Obviously, if this were a
// form submit handler, you'd just set $form_state['redirect'].
drupal_goto('checkout/' . $order->order_id);
?>

http://www.drupalcommerce.org/questions/3259/it-possible-drupal-commerce-work-without-cart-module

Anonim bağışlar almak istediğim bir sitem var, bu yüzden iki problemim var.

  1. Bir kullanıcı siteye giriş yapmazsa erişim reddedildi mesajı alır
  2. Ödeme işlemi ad, adres vb. İster.

Yapmak istediğim, tutarı onayladığınız ve daha sonra ödeme sayfasına yönlendirdiğiniz bir sayfanız var. Bu durumda PayPal WPS kullanıyorum, bu yüzden yönlendirme harika olurdu.

Verebileceğiniz herhangi bir tavsiye takdir edilecektir.


Harika, soru sormamı engellememi ve sorunumu büyüleyici bir şekilde çözmemi engelle :)
Yusef

@zhilevan Bu çalışmayı aldığım için yorum yaptığınız için teşekkürler, sadece cevabı kendime hatırlatmam gerekiyor. Bunu da ekleyeceğim
user13134 26:13

Bu kodu başka bir projede uyguluyorum, ama ne zaman ne de kök kullanıcı çalıştırdığında, dönüş sayfası bulunamadı !!!
Yusef

İstenen "/ nashrtest / checkout / 12" sayfası bulunamadı.
Yusef

Yanıtlar:


12

Aşağıdaki sözdizimine sahip Commerce Drush adlı yeni bir modülü test etmeyi deneyebilirsiniz :

drush commerce-order-add 1
drush --user=admin commerce-order-add MY_SKU123

Manuel çözüm

Ticarette programlı bir sipariş oluşturmak için aşağıdaki kodu kullanabilirsiniz (örneğin, drush ile de çalışır drush -vd -u "$1" scr order_code-7.php). Lütfen commerce_payment_examplemodülün gerekli olduğunu unutmayın .

<?php

  if (!function_exists('drush_print')) {
    function drush_print ($text) {
      print $text . "\n";
    }
  }

  $is_cli = php_sapi_name() === 'cli';

  global $user;

  // Add the product to the cart
  $product_id = 5;
  $quantity = 1;

  if ($is_cli) {
    drush_print('Creating new order for ' . $quantity . ' item(s) of product ' . $product_id . '...');
  }

  // Create the new order in checkout; you might also check first to
  // see if your user already has an order to use instead of a new one.
  $order = commerce_order_new($user->uid, 'checkout_checkout');

  // Save the order to get its ID.
  commerce_order_save($order);

  if ($is_cli) {
    drush_print('Order created. Commerce order id is now ' . $order->order_id);
    drush_print('Searching product ' . $product_id . ' in a Commerce system...');
  }

  // Load whatever product represents the item the customer will be
  // paying for and create a line item for it.
  $product = commerce_product_load((int)$product_id);

  if((empty($product->product_id)) || (!$product->status)){
    if ($is_cli) {
      drush_print('  Cannot match given product id with a Commerce product id.');
    }

    drupal_set_message(t('Invalid product id'));
    drupal_goto(); // frontpage
    return FALSE;
  }

  if ($is_cli) {
    drush_print('  Found a Commerce product ' . $product->product_id . '.');
  }

  // Create new line item based on selected product
  $line_item = commerce_product_line_item_new($product, 1, $order->order_id);

  if ($is_cli) {
    drush_print('  Added product to the cart.');
  }

  // Save the line item to get its ID.
  commerce_line_item_save($line_item);

  // Add the line item to the order using fago's rockin' wrapper.
  $order_wrapper = entity_metadata_wrapper('commerce_order', $order);
  $order_wrapper->commerce_line_items[] = $line_item;

  if ($is_cli) {
    drush_print('Saving order...');
  }

  // Save the order again to update its line item reference field.
  commerce_order_save($order);

  // Redirect to the order's checkout form. Obviously, if this were a
  // form submit handler, you'd just set $form_state['redirect'].

  if ($is_cli) {
    drush_print('Checking out the order...');
  }

  commerce_checkout_complete($order);

  if ($is_cli) {
    drush_print('Marking order as fully paid...');
  }

  $payment_method = commerce_payment_method_instance_load('commerce_payment_example|commerce_payment_commerce_payment_example');

  if (!$payment_method) {
    if ($is_cli) {
      drush_print("  No example payment method found, we can't mark order as fully paid. Please enable commerce_payment_example module to use this feature.");
    }
  }
  else {
    if ($is_cli) {
      drush_print("  Creating example transaction...");
    }

    // Creating new transaction via commerce_payment_example module.
    $charge      = $order->commerce_order_total['und'][0];

    $transaction = commerce_payment_transaction_new('commerce_payment_example', $order->order_id);
    $transaction->instance_id = $payment_method['instance_id'];
    $transaction->amount = $charge['amount'];
    $transaction->currency_code = $charge['currency_code'];
    $transaction->status = COMMERCE_PAYMENT_STATUS_SUCCESS;
    $transaction->message = 'Name: @name';
    $transaction->message_variables = array('@name' => 'Example payment');

    if ($is_cli) {
      drush_print("  Notifying Commerce about new transaction...");
    }

    commerce_payment_transaction_save($transaction);

    commerce_payment_commerce_payment_transaction_insert($transaction);
  }

  if ($is_cli) {
    drush_print("Marking order as completed...");
  }

  commerce_order_status_update($order, 'completed');

  if ($is_cli) {
    drush_print("\nDone.");
  }

Not: Yorumda önerildiği gibi , sipariş kaydedilirken ödeme yöntemi hakkında bilinmeyen bir hata varsa , belirttiğinizden emin olun, örn.

$order->data['payment_method'] = 'commerce_payment_example|commerce_payment_commerce_payment_‌​example';
commerce_order_save($order); 

2
Commerce Drush modülü harika bir araç gibi geliyor.
Francisco Luz

Manuel çözüm kısmıyla ilgili olarak, sipariş e-posta bildirimi ile ilgili bir sorun var. Ödeme yöntemi "bilinmiyor" Neden olduğundan emin değilim, zaten örnek ödeme yöntemini kullanarak test ettim ve "bilinmiyor"
fkaufusi

@fkaufusi Neler olup bittiğini kontrol etmek için yeni soruyu sormanız gerekecek.
kenorb

Şimdi sipariş e-postasında "bilinmeyen" ödeme yöntemi için bir çözüm buldum. Siparişi kaydetmeden önce ödeme yöntemini siparişe eklemem gerekiyor. Bu, token sisteminin ödeme yöntemini almasına ve sipariş e-postasında kullanmasına izin verecektir. $ order-> data ['payment_method'] = 'commerce_payment_example | commerce_payment_commerce_payment_example'; ($ sipariş) commerce_order_save;
fkaufusi

5

Bu değiştirilmiş komut dosyası, anonim kullanıcılar için de çalışır:

<?php
global $user;

$product_id = 2;
// Create the new order in checkout; you might also check first to
// see if your user already has an order to use instead of a new one.
$order = commerce_order_new($user->uid, 'checkout_checkout');
// Save the order to get its ID.
commerce_order_save($order);

// Link anonymous user session to the cart
if (!$user->uid) {
    commerce_cart_order_session_save($order->order_id);
}

// Load whatever product represents the item the customer will be
// paying for and create a line item for it.
$product = commerce_product_load($product_id);
$line_item = commerce_product_line_item_new($product, 1, $order->order_id);

// Save the line item to get its ID.
commerce_line_item_save($line_item);

// Add the line item to the order using fago's rockin' wrapper.
$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
$order_wrapper->commerce_line_items[] = $line_item;

// Save the order again to update its line item reference field.
commerce_order_save($order);

// Redirect to the order's checkout form. Obviously, if this were a
// form submit handler, you'd just set $form_state['redirect'].
drupal_goto('checkout/' . $order->order_id);


-1

1. Bir kullanıcı siteye giriş yapmazsa erişim reddedildi mesajı alır

Çalışan bir şeyim var ama bunun en iyi uygulama olduğundan şüpheliyim.

Sonunda hile yaptım. E-posta adresi de dahil olmak üzere bilgilerinizi koyduğum formumda anında bir kullanıcı hesabı oluşturuyorum ve daha sonra kullanıcıyı oturum açıyorum. Bir e-posta adresi kullanıma hazırsa kullanıcıyı oturum açıyorum. ( yönetici e-posta adresi).

Sitemde bağış formu sayfası yalnızca bu sayfaya geldiğinizde oturumu kapattığınızdan (yönetici değilseniz) emin olmanızı sağlar. Başarılı bir işlemde oturumunuzu kapatırsınız. Sipariş geçmişini kapattım / yönlendirmeleri yerine koydum, böylece yalnızca giriş yaptığımda bildiğim sayfalara gidebilirsin. Hiçbir kişisel bilgi saklanmaz ve geçmiş bağışları göremezsiniz

Benim durumumda bunun işleyişinden memnunum. İdeal değildir ve sadece birkaç durumda çalışır.

2. Ödeme işlemi ad, adres vb. İster.

gittim

/ Admin / ticaret / config / çıkış

Ve devre dışı

  • Hesap Bilgileri
  • Fatura bilgileri
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.