Swish QR-koder via APIt

2019-05-27 | Teknik

Uppdatering: En mer utförlig beskrivning av hur du anropar Swish QR-generator API samt exempel i cURL och Python finns här.

Swish QR-koder förenklar betalningar via Swish. Genereringen av QR-koder kan ske statiskt eller dynamiskt.

Statiska QR-koder är inte specifika för ett visst köp utan kan återanvändas för flera betalningar. Ett exempel är försäljning av en viss typ av vara med ett fast pris (t.ex. enskilda majblommor) – betalningsuppgifter så som mottagare, meddelande och belopp förändras inte från försäljning till försäljning utan är konstanta. Statiska QR-koder går enkelt att skapa via QR-generatorn på Swish hemsida.

Dynamiska QR-koder är bra när betalningsuppgifterna varierar från köp till köp, exempelvis vid varuförsäljning på nätet. Vi ska titta närmare på dynamiska QR-koder. Dessa kan skapas via Swish QR API.

Dynamiska QR-koder

Nedan ska vi använda Swish QR API för att generera en QR-kod som innehåller en mottagares Swishnummer, ett betalningsmeddelande och ett belopp. När användaren scannar QR-koden med Swish-appen så blir dessa uppgifter förifyllda.

Några exempel med curl

Första steget blir att bekanta sig med Swish QR-API. Detta kan vi med fördel göra med curl.

API-dokumentationen (under General QR Code > View Guide) ger vägledning kring hur ett API-anrop ska se ut. API-resursen som vi är ute efter kallas ”Prefilled” i dokumentationen och har (idag) urlen:

https://mpc.getswish.net/qrg-swish/api/v1/prefilled

API-servern förväntar sig ett POST-anrop med Content-Type: application/json. Övrig data ska finnas i request-bodyn. Det krävs ingen autentisering i Prefill-fallet.

Dokumentationen innehåller inget konkret exempel på hur en Prefilled-förfrågan ska se ut. Däremot finns där ett JSON-schema som specificerar anropets utseende, så att det går att validera om ens anrop är okej.

Vi kan ta en JSON-validator till hjälp (det finns en t.ex. här) och utifrån JSON-schemat konstruera ett anrop som är okej. Efter en stunds testande med curl så fick jag fram kommando som hämtar en QR-kod och sparar den till output.png:

curl –data ’{”format”:”png”,”size”:300,”message”:{”value”:”test message”,”editable”:true},”amount”:{”value”:100,”editable”:false}}’ –header ”Content-Type: application/json” –output output.png –request POST https://mpc.getswish.net/qrg-swish/api/v1/prefilled

Om man scannar QR-koden så får man ett förifyllt betalmeddelandet (”test message”) och belopp (100 kr). Vi tittar snart på hur man även kan lägga till en mottagare.

curl-parametrar:

  • –data ’<json-sträng>’ är datat i anropets request-body
  • –header ”Content-Type: application/json” lägger till en header i anropet som säger att anropet innehåller json-data
  • –output output.png spara serverns respons (bild-datat) till en lokal fil
  • –request POST är anropets-metod; vi skickar ett POST-anrop

Det finns information om request-bodyns format i dokumentationen. I korthet: format är filformatet vi vill ha QR-koden i och size är bildens pixelstorlek (300 innebär 300×300 pixlar). editable styr huruvida användaren ska kunna ändra innehållet i respektive fält.

Om man även vill fördefinera en betalningsmottagare så gäller samma mönster som för message och amount:

"payee":{"value":"123456789","editable":true}

Om mottagarnumret är felaktigt så genereras QR-koden, men går inte att scanna i Swish-appen. Här är den färdiga QR-koden:

Swish QR-kod med meddelande (”test message”) och belopp (100). Mottagare är inte förifylld. Bildstorlek: 300×300 pixlar. Filstorlek: 38KB

När vi nu har ett fungerande anrop till API-servern så vet vi tillräckligt för att implementera detta på en hemsida eller webbtjänst.