How to create a "pay per node" "pay to publish" type flow in Commerce 2?
You need to create an order and an order item yourself and then add those values, I assume you need to do this from the context of your node anyway and not use a standard "buy this product" form.

A snippet from a project:

$order_item_values = [
  'type' =&gt; 'order_item_type',
  'title' =&gt; 'label',
  'unit_price' =&gt; new Price(...),
  ...
];
$order_item = $this-&gt;entityTypeManager()-&gt;getStorage('commerce_order_item')-&gt;create($order_item_values);
$order_item-&gt;save();

$order_type = $this-&gt;orderTypeResolver-&gt;resolve($order_item);

$stores = $this-&gt;entityTypeManager()-&gt;getStorage('commerce_store')-&gt;loadMultiple();
$store = reset($stores);

// Create the new order.
/** @var \Drupal\commerce_order\Entity\OrderInterface $order */
$order = $this-&gt;entityTypeManager()-&gt;getStorage('commerce_order')-&gt;create([
  'type' =&gt; $order_type,
  'store_id' =&gt; $store-&gt;id(),
  'uid' =&gt; $this-&gt;currentUser()-&gt;id(),
  'cart' =&gt; FALSE,
]);

$order-&gt;addItem($order_item);
$order-&gt;save();

$this-&gt;cartSession-&gt;addCartId($order-&gt;id(), CartSessionInterface::COMPLETED);

return $this-&gt;redirect('commerce_checkout.form', ['commerce_order' =&gt; $order-&gt;id()]);


You don't even need to use products, you can define an order item that just has a price and reference to your node. But you can also use products to define e.g. the length/price.