...
Namn | Typ | Krav vid update/create | Beskrivning | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id | int | Genereras | Servicens id, genereras av servern. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
providerId | int | Obligatorisk | Id till serviceplatsen som tillhandahåller servicen, se Serviceplatser. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
servicePrincipalId | int | Obligatorisk | Id för servicens huvudman, se Huvudman. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
serviceTypeId | int | Obligatorisk | Id till typen av service som utförs, se Servicetyp. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
properties | dictionary | Frivillig | En dictionary med nycklar och värden som är knutna till specifik servicetyp.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
forms | array | Obligatorisk | Det sätt som servicen tillhandahålls. Form är knutet till servicetyp. En service kan ha en eller flera former. Giltiga värden för form för respektive servicetyp beskrivs nedan.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
active | bool | Obligatorisk | Anger om servicen tillfälligt är inaktiv, ex. säsongsbutik som bara är öppen under sommarhalvåret. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
year | int | Frivillig (Sätts till nutid) | Det år servicen tillhör. Default är 0 vilket motsvarar aktuellt år. Vid varje årsskifte körs en intern process som arkiverar det gångna årets service. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
timelinessDate | date | Frivillig | Senast uppdaterad. För aktuellt år måste datumet ligga inom intervallet xxxx-01-01 till aktuellt datum. För historiskt data ska datumet ligga inom året. |
...
Namn | Typ | Krav vid update/create | Beskrivning |
---|---|---|---|
id | int | Genereras | Mallens id, genereras av servern. |
principalOrganisationId | int | Obligatorisk | Id till den organisation som äger mallen, se Organisation |
serviceTypeId | int | Obligatorisk | Id till typen av service som utförs, se Servicetyp. |
serviceFormId | int | Obligatorisk | Id till formen som utförs, se Serviceform. |
openHoursPerWeek | int | Frivillig | Öppettider anges i timmar per vecka under normalvecka. Med normalvecka avses en vecka som består av fem helgfria dagar samt lördag och söndag utan extra helgdagar, under normalsäsong. Om platsen för kontanttjänsten finns i en lokal eller inrättning som har kortare öppettider än platsen anges lokalens eller inrättningens öppettider. Giltiga värden är 0 till 168. |
closedWeeksPerYear | int | Frivillig | Anges i antal veckor per år som platsen är stängd. Giltiga värden är 0 till 53. |
advancedOpenHourDescription | string | Frivillig | Fält där avgiftsmodellen kan förklaras i fritext om den inte passar in i ovanstående alternativ eller om det finns olika avgifter för olika kunder. |
withdrawalLimit | int | Frivillig | Ange högsta tillåtna belopp per uttag, som du som huvudman tillåter. Ange 0 om inte maxbelopp tillämpas. |
minFlatFee | int | Frivillig | Fylls i med lägsta fasta avgift. Beloppet anges i kronor. |
minPercentageFee | float | Frivillig | Fylls i med lägsta rörliga avgift i form av procent av uttag. Anges i procent, giltiga värden är 0 till 100. |
maxFlatFee | int | Frivillig | Fylls i med högsta fasta avgift. Beloppet anges i kronor. |
maxPercentageFee | float | Frivillig | Fylls i med högsta rörliga avgift i form av procent av uttag. Anges i procent, giltiga värden är 0 till 100. |
advancedFeeDescription | string | Frivillig | Fält där avgiftsmodellen kan förklaras i fritext om den inte passar in i ovanstående alternativ eller det finns olika avgifter för olika kunder. |
depositLimit | int | Frivillig | Ange högsta tillåtna belopp per insättning, som du som huvudman tillåter. Beloppet ska anges i kronor. Ange 0 om inte maxbelopp tillämpas. |
withdrawalLimitDescription | string | Frivillig | Fält där modell för lägsta maxbelopp för insättning eller uttag kan förklaras i fritext om den inte passar in i ovanstående alternativ. |
weeklyDepositLimit | int | Frivillig | Ange högsta tillåtna belopp, som du som huvudman tillåter, att kunden får sätta in på en vecka. Beloppet ska anges i kronor. Ange 0 om inte maxbelopp tillämpas. |
accessBarrier | bool | Frivillig | Tillträdeshinder. Sant om det krävs inträdesbiljett och/eller specifik behörighet till område/lokal. Om tillträdeshinder är sant ska attributet accessBarrierDescription anges. |
accessBarrierDescription | string | Frivillig | Fält där tillträdeshindret kan förklaras i fritext. |
...
Namn | Typ | Krav vid update/create | Beskrivning |
---|---|---|---|
id | int | Genereras | Anpassningens id, genereras av servern. |
serviceId | int | Obligatorisk | Id till den service som anpassningen hör till. |
serviceFormId | int | Obligatorisk | Id till den serviceform som anpassningen hör till. |
accessBarrier | bool | Frivillig | Tillträdeshinder. Sant om det krävs inträdesbiljett och/eller specifik behörighet till område/lokal. Om tillträdeshinder är sant ska attributet accessBarrierDescription anges. |
accessBarrierDescription | string | Frivillig | Fält där tillträdeshindret kan förklaras i fritext. |
openHoursPerWeek | int | Frivillig | Öppettider anges i timmar per vecka under normalvecka. Med normalvecka avses en vecka som består av fem helgfria dagar samt lördag och söndag utan extra helgdagar, under normalsäsong. Om platsen för kontanttjänsten finns i en lokal eller inrättning som har kortare öppettider än platsen anges lokalens eller inrättningens öppettider. Giltiga värden är 0 till 168. |
closedWeeksPerYear | int | Frivillig | Anges i antal veckor per år som platsen är stängd. Giltiga värden är 0 till 53. |
advancedOpenHourDescription | string | Frivillig | Fält där avgiftsmodellen kan förklaras i fritext om den inte passar in i ovanstående alternativ eller om det finns olika avgifter för olika kunder. |
withdrawalLimit | int | Frivillig | Ange högsta tillåtna belopp per uttag, som du som huvudman tillåter. Ange 0 om inte maxbelopp tillämpas. |
minFlatFee | int | ObligatoriskFrivillig | Fylls i med lägsta fasta avgift. Beloppet anges i kronor. |
minPercentageFee | float | ObligatoriskFrivillig | Fylls i med lägsta rörliga avgift i form av procent av uttag. Anges i procent, giltiga värden är 0 till 100. |
maxFlatFee | int | ObligatoriskFrivillig | Fylls i med högsta fasta avgift. Beloppet anges i kronor. |
maxPercentageFee | float | ObligatoriskFrivillig | Fylls i med högsta rörliga avgift i form av procent av uttag. Anges i procent, giltiga värden är 0 till 100. |
advancedFeeDescription | string | Frivillig | Fält där avgiftsmodellen kan förklaras i fritext om den inte passar in i ovanstående alternativ eller det finns olika avgifter för olika kunder. |
depositLimit | int | Frivillig | Ange högsta tillåtna belopp per insättning, som du som huvudman tillåter. Beloppet ska anges i kronor. Ange 0 om inte maxbelopp tillämpas. |
withdrawalLimitDescription | string | Frivillig | Fält där modell för lägsta maxbelopp för uttag eller insättning kan förklaras i fritext om den inte passar in i ovanstående alternativ. Ange 0 om inte maxbelopp tillämpas. |
weeklyDepositLimit | int | Frivillig | Ange högsta tillåtna belopp, som du som huvudman tillåter, att kunden får sätta in på en vecka. Beloppet ska anges i kronor. Ange 0 om inte maxbelopp tillämpas. |
...
Namn | Typ | Krav vid update/create | Beskrivning |
---|---|---|---|
id | int | Genereras | Modellens id, genereras av servern. |
supplierOrganisationId | int | Obligatorisk | Organisations-id till det kreditinstitut eller filial till utländskt kreditinstitut som omfattas av skyldigheten att tillhandahålla kontanttjänster. |
principalOrganisationId | int | Obligatorisk | Organisations-id till den huvudman som driver eller på annat sätt råder över kontanttjänsten. |
serviceTypeId | int | Obligatorisk | Servicetyps-id till den typ av betaltjänst som erbjuds (kontantuttag, dagskasseinsättning eller betalningsförmedling). |
serviceFormId | int | Obligatorisk | Serviceforms-id till den serviceform modellen gäller. |
minFlatFee | int | Obligatorisk | Avgift per uttag (fast avgift). |
minPercentageFee | float | Obligatorisk | Avgift per uttag (rörlig avgift). |
maxFlatFee | int | Obligatorisk | Avgift per uttag (fast avgift). Totala högsta fasta avgift som era slutkunder får betala när de använder den aktuella betaltjänsten hos ovan vald huvudman. Belopp anges i kronor. |
maxPercentageFee | float | Obligatorisk | Avgift per uttag (rörlig avgift). Totala högsta rörliga avgift som era slutkunder får betala när de använder den aktuella betaltjänsten hos ovan vald huvudman. Värdet anges i %. |
advancedWithdrawalFeeDescription | string | Frivillig | Fält där avgiftsmodellen kan förklaras i fritext om den inte passar in i ovanstående alternativ. |
withdrawalLimit | int | Frivillig | Ange högsta tillåtna belopp per uttag för era slutkunder när de gör uttag från ert betalkonto genom tjänst hos aktuell huvudman och för vald serviceform. Beakta gränser för maxbelopp hos er och hos huvudmannen (dvs välj det lägsta av de två). Beloppet ska anges i kronor. Ange 0 om inte maxbelopp tillämpas. |
weeklyDepositLimit | int | Frivillig | Ange högsta tillåtna belopp som era slutkunder får sätta in på en vecka på betalkonto hos er genom tjänst hos ovan vald huvudman och för ovan vald serviceform. Beakta gällande maxbelopp hos er och hos huvudmannen (dvs välj det lägsta av de två). Beloppet anges i kronor. Ange 0 om inte maxbelopp tillämpas. |
depositLimit | int | Frivillig | Ange högsta tillåtna belopp per insättning som era slutkunder får sätta in på betalkonto hos er genom tjänst hos ovan vald huvudman och för ovan serviceform. Beakta gällande maxbelopp hos er och hos huvudmannen (dvs välj det lägsta av de två). Beloppet anges i kronor. Ange 0 om inte maxbelopp tillämpas. |
withdrawalLimitDescription | string | Frivillig | Fält där modell för lägsta maxbelopp för insättning eller uttag kan förklaras i fritext om den inte passar in i ovanstående alternativ. |
includedServiceIds | int[] | Frivillig | Inkludera bara specifika platser för kontanttjänster hos vald huvudman. Listan innehåller id till 19529744service. |
Address
Beskrivning av attribut
...
Code Block | ||||
---|---|---|---|---|
| ||||
#-*- coding: utf-8 -*-
import urllib.request
import urllib.error
import urllib.parse
import json
BASE_URL = 'https://kontantanalys.tillvaxtverket.se/test/'
def acquire_token(username, password):
""" Login and acquire a valid token """
url = BASE_URL + '/Token'
data = {
'grant_type': 'password',
'username': username,
'password': password
}
opener = urllib.request.build_opener()
response = opener.open(url, urllib.parse.urlencode(data).encode("utf-8"))
if response.getcode() == 200:
content = response.read()
data = json.loads(content)
return data['access_token']
return None
def create_provider(provider, token):
headers = {
'Authorization': 'Bearer %s' % token,
'Content-Type': 'application/json',
'Accept': 'application/json'
}
envelope = {
"data": provider
}
url = BASE_URL + '/api/providers/'
data = json.dumps(envelope).encode('utf8')
req = urllib.request.Request(url, headers=headers)
try:
response = urllib.request.urlopen(req, data=data)
content = response.read()
new_object = json.loads(content)
return new_object['data']
except urllib.error.HTTPError as e:
content = e.read()
if content:
errors = json.loads(content)
print ('Error (%d) create provider' % e.code)
for error in errors['errors']:
print (error)
else:
print ('Error (%d) create provider' % e.code)
return None
def find_provider(provider_id, token):
""" Get provider by id """
opener = urllib.request.build_opener()
opener.addheaders = [('Authorization', 'Bearer %s' % token)]
url = BASE_URL + '/api/Providers/%d' % provider_id
response = opener.open(url)
content = response.read()
data = json.loads(content)
return data['data']
def main():
token = acquire_token('testbanken', 'Sommar&sol2020')
provider = {
'type': 'provider',
'attributes': {
'name': 'INGO Örebro, Adolfsbergsvägen',
'visitingAddress': 'Adolfsbergsvägen 4',
'postalCode': '702 27',
'postTown': 'ÖREBRO',
'x': 509886.4,
'y': 6568855.5
}
}
new_provider = create_provider(provider, token)
if new_provider:
provider = find_provider(new_provider['id'], token)
assert provider['attributes']['name'] == new_provider['attributes']['name']
if __name__== "__main__":
main() |
...
Code Block | ||||
---|---|---|---|---|
| ||||
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Web;
using Newtonsoft.Json;
namespace PiPoS.Examples
{
public class ApiExamples
{
static readonly string BASE_URL = "https://kontantanalys.tillvaxtverket.se/test/";
public static void Main(string[] args)
{
var token = AcquireToken("testbanken", "Sommar&sol2020");
var provider = new Provider {
Name = "INGO Örebro, Adolfsbergsvägen",
VisitingAddress = "Adolfsbergsvägen 4",
PostalCode = "702 27",
PostTown = "ÖREBRO",
X = 509886.4,
Y = 6568855.5
};
var newProvider = CreateProvider(provider, token);
provider = FindProvider(newProvider.Id, token);
System.Diagnostics.Debug.Assert(newProvider.Name == provider.Name);
}
static string AcquireToken(string username, string password)
{
string token = string.Empty;
using (var client = new WebClient())
{
client.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");
var formData = string.Format("grant_type=password&username={0}&password={1}",
HttpUtility.UrlEncode(username),
HttpUtility.UrlEncode(password)
);
var htmlResult = client.UploadString(BASE_URL + "/Token", formData);
var json = JsonConvert.DeserializeObject<Dictionary<string, object>>(htmlResult);
if (json.ContainsKey("access_token"))
{
token = json["access_token"] as string;
}
}
return token;
}
static Provider CreateProvider(Provider provider, string token)
{
using (var client = new WebClient())
{
client.Headers.Add(HttpRequestHeader.Authorization, string.Format("Bearer {0}", token));
client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
client.Headers.Add(HttpRequestHeader.Accept, "application/json");
var envelope = new Envelope<Provider>
{
Data = new Data<Provider>
{
Attributes = provider,
Type = "provider"
}
};
var json = JsonConvert.SerializeObject(envelope);
var result = string.Empty;
try
{
result = client.UploadString(BASE_URL + "/api/providers/", json);
}
catch (WebException exception)
{
var responseStream = exception.Response?.GetResponseStream();
if (responseStream != null)
{
using (var reader = new StreamReader(responseStream))
{
var responseText = reader.ReadToEnd();
if (!string.IsNullOrEmpty(responseText))
{
try
{
var responseData = JsonConvert.DeserializeObject<Error>(responseText);
foreach (var error in responseData?.Errors)
{
Console.Error.WriteLine($"Error:\t{error}");
}
}
catch (JsonReaderException)
{
Console.Error.WriteLine(responseText);
}
}
}
}
throw exception;
}
var newProvider = JsonConvert
.DeserializeObject<Envelope<Provider>>(result)
.Data
.Attributes;
return newProvider;
}
}
static Provider FindProvider(int providerId, string token)
{
using (var client = new WebClient())
{
client.Headers.Add(HttpRequestHeader.Authorization, string.Format("Bearer {0}", token));
using (var data = client.OpenRead(BASE_URL + $"/api/providers/{providerId}"))
using (var reader = new StreamReader(data))
{
var provider = JsonConvert
.DeserializeObject<Envelope<Provider>>(reader.ReadToEnd())
.Data
.Attributes;
return provider;
}
}
}
public class Envelope<TEntity>
{
[JsonProperty(PropertyName = "data")]
public Data<TEntity> Data { get; set; }
}
public class Data<TEntity>
{
[JsonProperty(PropertyName = "attributes")]
public TEntity Attributes { get; set; }
[JsonProperty(PropertyName = "id")]
public int Id { get; set; }
[JsonProperty(PropertyName = "type")]
public string Type { get; set; }
}
public class Provider
{
[JsonProperty(PropertyName = "id")]
public int Id { get; set; }
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "code")]
public string Code { get; set; }
[JsonProperty(PropertyName = "x")]
public double X { get; set; }
[JsonProperty(PropertyName = "y")]
public double Y { get; set; }
[JsonProperty(PropertyName = "visitingAddress")]
public string VisitingAddress { get; set; }
[JsonProperty(PropertyName = "postalCode")]
public string PostalCode { get; set; }
[JsonProperty(PropertyName = "postTown")]
public string PostTown { get; set; }
[JsonIgnore]
public string TypeName => "provider";
}
public class Error
{
[JsonProperty(PropertyName = "errors")]
public List<string> Errors { get; set; }
}
}
} |
...