web-dev-qa-db-ja.com

Drupal認証されていない(匿名)ユーザーのCommerce APIを介して作成された注文の場合、チェックアウトページが見つかりません。

ルール内に次のコードがあります-アクション(Webフォームの送信によってトリガーされます)

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

ログインするとコードは完全に機能しますが、認証されていないユーザーとしてWebフォームを送信すると、checkout/12に送信され、ページが見つかりません。

ログにエラーはなく、バックエンドで注文が作成されたことがわかります...助けてください...

4

セッションに注文を追加する必要があります。 commerce_checkout_access() を参照してください。

このようなものはうまくいくはずです:

$_SESSION['commerce_cart_orders'][] = $order->order_id;

注文の保存とリダイレクトの間。

7
Berdir