प्रोग्रामेटिक रूप से पेमेंट पेज पर रीडायरेक्ट करने वाले अनाम उपयोगकर्ताओं के लिए ड्रुपल कॉमर्स में एक ऑर्डर तैयार करना


19

रयान के पास कुछ बेहतरीन कोड हैं जिन्हें आप प्रोग्राम करके एक ऑर्डर बना सकते हैं

<?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

मेरे पास एक साइट है जहां मैं अनाम दान लेना चाहता हूं इसलिए मुझे दो समस्याएं हैं।

  1. यदि कोई उपयोगकर्ता साइट में लॉग इन नहीं है, तो उन्हें एक्सेस अस्वीकृत संदेश मिलता है
  2. चेकआउट प्रक्रिया नाम, पता आदि पूछती है।

जो मैं करना चाहता हूं, वह एक पृष्ठ है जहां आप राशि की पुष्टि करते हैं फिर भुगतान पृष्ठ पर ले जाएं। इस मामले में मैं PayPal WPS का उपयोग कर रहा हूं, इसलिए वहां पुनर्निर्देशन करना बहुत अच्छा होगा।

किसी भी सलाह तुम दे सकता है सराहना की जाएगी।


महान, आप सवाल करते हैं कि मुझे सवाल पूछने के लिए रोकें और मेरी समस्या को आकर्षक रूप से हल करें :)
Yusef

@zhilevan टिप्पणी करने के लिए धन्यवाद, मुझे यह काम मिला इसलिए बस खुद को जवाब याद दिलाने की जरूरत है। मैं इसे और भी जोड़
दूंगा

मैं इस कोड को किसी अन्य प्रोजेक्ट में लागू करता हूं, लेकिन जब रूट उपयोगकर्ता इसे चलाते हैं, तो पृष्ठ वापस नहीं मिला !!!
यूसुफ

अनुरोधित पृष्ठ "/ nashrtest / checkout / 12" नहीं मिला।
युसेफ

जवाबों:


12

आप कॉमर्स ड्रश नामक एक नए मॉड्यूल का परीक्षण करने की कोशिश कर सकते हैं जिसमें निम्नलिखित सिंटैक्स है:

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

मैनुअल समाधान

वाणिज्य में क्रमबद्ध रूप से एक आदेश बनाने के लिए, आप निम्न कोड का उपयोग कर सकते हैं (यह ड्रश के साथ भी काम करता है, जैसे drush -vd -u "$1" scr order_code-7.php)। कृपया ध्यान दें कि commerce_payment_exampleमॉड्यूल की आवश्यकता है।

<?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.");
  }

नोट: जैसा कि टिप्पणी में सुझाया गया है, यदि आपको ऑर्डर सहेजते समय भुगतान पद्धति के बारे में त्रुटि अज्ञात है , तो सुनिश्चित करें कि आपने इसे निर्दिष्ट किया है, जैसे

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

2
कॉमर्स ड्रश मॉड्यूल एक भयानक उपकरण की तरह लगता है।
फ्रांसिस्को लूज

मैनुअल समाधान भाग के संबंध में, आदेश ईमेल अधिसूचना के साथ एक समस्या है। भुगतान विधि "अज्ञात" है मुझे यकीन नहीं है कि, मैंने पहले से ही उदाहरण भुगतान पद्धति का उपयोग करके परीक्षण किया है और "अज्ञात" है
fkaufusi

@fkaufusi आपको नए प्रश्न को उठाना होगा, फिर यह जांचने के लिए कि क्या चल रहा है।
केनोरब

अब मुझे ऑर्डर ईमेल पर "अज्ञात" भुगतान पद्धति के लिए एक समाधान मिला। मुझे ऑर्डर सहेजने से पहले भुगतान विधि को आदेश में जोड़ना होगा। यह टोकन सिस्टम को भुगतान पद्धति को चुनने और ऑर्डर ईमेल पर उपयोग करने की अनुमति देगा। $ आदेश-> डेटा ['भुगतान_मेथोड'] = 'वाणिज्य_पेमेंट_एक्सप्लिमेंटेशन | कॉमर्स_पेमेंट_कॉमर्स_पेमेंट_एक्सप्लिमेंट ’; commerce_order_save ($ क्रम);
23

5

अनाम उपयोगकर्ताओं के लिए भी यह संशोधित स्क्रिप्ट काम करती है:

<?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

आपको Commerce_cart_order_session_save () जोड़ना होगा ताकि अनाम उपयोगकर्ता के पास कार्ट सामग्री के साथ ब्राउज़र को लिंक करने के लिए अपना सत्र हो।


-1

1. यदि कोई उपयोगकर्ता साइट में लॉग इन नहीं है, तो उन्हें एक्सेस अस्वीकृत संदेश मिलता है

मुझे कुछ काम मिला लेकिन मुझे बहुत संदेह है कि यह सबसे अच्छा अभ्यास है।

अंत में मैंने धोखा दिया। मेरे फॉर्म पर जहां आप अपना विवरण ईमेल पते सहित डालते हैं, मैं मक्खी पर एक उपयोगकर्ता खाता बनाता हूं और फिर उपयोगकर्ता को लॉग इन करता हूं। यदि मैं एक ईमेल पता उपयोग करने के लिए तैयार हूं, तो मैं उपयोगकर्ता को लॉग इन करता हूं। (मुझे यकीन है कि आप उपयोग नहीं कर रहे हैं। व्यवस्थापक ईमेल पता)।

जैसा कि मेरी साइट में केवल दान प्रपत्र पृष्ठ है, जब आप उस पृष्ठ को हिट करते हैं तो यह सुनिश्चित करता है कि आप लॉग आउट हैं (यदि आप व्यवस्थापक नहीं हैं)। एक सफल लेनदेन पर यह आपको लॉग आउट करता है। मैंने ऑर्डर हिस्ट्री को बंद कर दिया है / रीडायरेक्ट डाल दिया है ताकि आप केवल उन पेजों पर जा सकें, जिनके बारे में मुझे पता है कि लॉग इन करते समय। कोई भी व्यक्तिगत विवरण संग्रहीत नहीं किया जाता है और पिछले दान नहीं देख सकते हैं।

मेरी स्थिति में मैं खुश हूं कि यह कैसे काम करता है। यह आदर्श नहीं है और केवल कुछ मामलों में काम करेगा।

2. चेकआउट प्रक्रिया नाम, पता आदि के लिए पूछती है।

में गया था

/ व्यवस्थापक / वाणिज्य / config / चेकआउट

और अक्षम कर दिया

  • खाते की जानकारी
  • बिलिंग जानकारी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.