发布于 2019-06-13 09:45:44
我设法创造了新的支付和修改授权金额。以下是我到目前为止所拥有的:
public static function getSubscribedEvents() {
$events = ['commerce_order.place.post_transition' => ['captureFee', -50]];
return $events;
}
public function captureFee(WorkflowTransitionEvent $event) {
/** @var \Drupal\commerce_order\Entity\OrderInterface $order */
$order = $event->getEntity();
if ($order->bundle() != 'training') {
return;
}
/** @var \Drupal\commerce_payment\Entity\PaymentGatewayInterface $payment_gateway */
$payment_gateway = $order->payment_gateway->entity;
$payment_gateway_plugin = $payment_gateway->getPlugin();
$payment_storage = $this->entityTypeManager->getStorage('commerce_payment');
// Load first order payment
$payments = $payment_storage->loadMultipleByOrder($order);
$first_payment = current($payments);
// Only proceed if payment is not captured
if ($first_payment->isCompleted()) {
return;
}
// Default fee amount
$fee_amount = new \Drupal\commerce_price\Price('50.00', 'USD');
// Get fee amount from product variation
if (isset($order->getItems()[0]->getPurchasedEntity()->field_app_fee) && !$order->getItems()[0]->getPurchasedEntity()->field_app_fee->isEmpty()) {
$fee_amount = $order->getItems()[0]->getPurchasedEntity()->field_app_fee->first()->toPrice();
}
// Create fee payment
/** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */
$payment = $payment_storage->create([
'state' => 'new',
'amount' => $fee_amount,
'payment_gateway' => $payment_gateway->id(),
'order_id' => $order->id(),
]);
// Capture fee payment
if ($payment_gateway_plugin instanceof OnsitePaymentGatewayInterface) {
$payment->payment_method = $order->payment_method->entity;
$payment_gateway_plugin->createPayment($payment, 'capture');
}
elseif ($payment_gateway_plugin instanceof ManualPaymentGatewayInterface) {
$payment_gateway_plugin->createPayment($payment, TRUE);
}
else {
return;
}
// Subtract captured amount from authorized amount and save first payment
$first_payment_amount = $first_payment->getAmount();
$first_payment->setAmount($first_payment_amount->subtract($fee_amount));
$first_payment->save();
}我有“训练”包,限制在每个购物车一项。这是结果,变价设定为$2,100.00和$45.00的费用。

https://drupal.stackexchange.com/questions/282167
复制相似问题