Preview: Dette er dokumentasjonen for Altinn Studio v9, som er en forhåndsversjon. Gjeldende versjon er v8.
For å se dokumentasjonen for gjeldende versjon, velg v8 i versjonsvelgeren i menyen til venstre.
Implementere IOrderDetailsCalculator-interfacet i C#
Legg til en ny klasse der du har din custom-kode, for eksempel App/logic/OrderDetailsCalculator.cs.
Her implementerer du logikken din for å regne ut hva brukeren skal betale for. Du kan for eksempel aksessere skjemadata, legge til obligatoriske avgifter eller bare legge til en fast kostnad for skjemaet.
Returverdien fra metoden CalculateOrderDetails angir:
- Betalingsbehandler som ordren skal bruke. Du gjør disse tilgjengelige ved å implementere interfacet
IPaymentProcessorog registrere dem somtransientiprogram.cs. Fyll utNets Easyfor å bruke standardimplementasjonen for Nets Easy. - Valuta
- Ordrelinjer
- Detaljer om betalingsmottaker. Brukes i kvittering.
- Detaljer om betaler (valgfritt), hvis du ønsker å forhåndsutfylle denne informasjonen hos Nets Easy. Du kan bruke dette i kombinasjon med Nets Easy sitt flagg
MerchantHandlesConsumerData, som vi har eksponert via appsettings.jsonNetsPaymentSettings.MerchantHandlesConsumerData. Hvis du setter den tiltrue, må du sende med detaljer om betaler, ellers feiler det.
I dette eksempelet regner systemet ut ordrelinjene basert på skjemadata:
public class OrderDetailsCalculator : IOrderDetailsCalculator
{
private readonly IDataClient _dataClient;
public OrderDetailsCalculator(IDataClient dataClient)
{
_dataClient = dataClient;
}
public async Task<OrderDetails> CalculateOrderDetails(Instance instance, string? language)
{
DataElement modelData = instance.Data.Single(x => x.DataType == "model");
InstanceIdentifier instanceIdentifier = new(instance);
Form formData = (Form) await _dataClient.GetFormData(instanceIdentifier.InstanceGuid, typeof(Form), instance.Org, instance.AppId,
instanceIdentifier.InstanceOwnerPartyId, new Guid(modelData.Id));
List<PaymentOrderLine> paymentOrderLines = formData.GoodsAndServicesProperties.Inventory.InventoryProperties
.Where(x => !string.IsNullOrEmpty(x.NiceClassification) && !string.IsNullOrEmpty(x.GoodsAndServices))
.Select((x, index) =>
new PaymentOrderLine
{
Id = index.ToString(), Name = $"{GetLocalizedName(x.Id, language)}", PriceExVat = GetPriceForInventoryItem(x), Quantity = 1, VatPercent = 0M
})
.ToList();
return new OrderDetails {
PaymentProcessorId = "Nets Easy",
Currency = "NOK",
OrderLines = paymentOrderLines,
Receiver = GetReceiverDetails(),
Payer = GetPayerDetails()};
}
}
Registrer IOrderDetailsCalculator-implementasjonen i program.cs:
App/Program.csvoid RegisterCustomAppServices(IServiceCollection services, IConfiguration config, IWebHostEnvironment env)
{
// Register your apps custom service implementations here.
services.AddTransient<IOrderDetailsCalculator, OrderDetailsCalculator>();
}