I would like to set payment mode to charge in Klarna Checkout, to charge money when order is placed. I did this in KlarnaPaymentWidgetController.cs by setting checkoutFlowInfo.ExecutePaymentMode = ExecutePaymentMode.Charge;
The version of add-on I was using before, Litium.AddOns.Klarna 4.7.102, had a bug: KlarnaPaymentArgsCreator.CreatePaymentArgs would always set klarnaPaymentArgs.PaymentMode to Reserve. To avoid this I updated to latest version of add-on 4.7.103, and then I also had to make some changes in KlarnaPaymentWidgetConfigV3.cs, to use CheckoutOrder instead of CheckoutOrderData.
(Couldn’t find this in any accelerator, but I might be wrong, does latest version of Klarna Checkout work with any version of MVC Accelerator?)
Now klarnaPaymentArgs.PaymentMode is Charge when i debug but the payment in Litium is still Reserved and in Klarna it is Uncaptured.
Can you help me out? Should I look for something in the logs?
public PaymentInfoResult Capture(string externalOrderId, string paymentReferenceId)
{
var order = ModuleECommerce.Instance.Orders[externalOrderId, _adminToken];
if (order == null)
throw new DoesNotExistException($"order {externalOrderId} not found.");
var payment = order.PaymentInfo.FirstOrDefault(x => x.ReferenceID == paymentReferenceId);
if (payment == null)
throw new DoesNotExistException($"Payment {paymentReferenceId} is not found in order {externalOrderId}.");
var existingMessage = payment.ExternalMessage;
var paymentResult = payment.PaymentProvider.CompletePayment(new CapturePaymentArgs(), _adminToken);
var result = new PaymentInfoResult(externalOrderId, paymentReferenceId, paymentResult?.Success ?? false);
payment.PopulatePaymentInfoResult(result, existingMessage);
return result;
}