Sample PHP Code
This code can be run on any modern web server with PHP and curl support.
$title="Title of the payment"
$amount="Money to be transferred"
$url="https://mpc.getswish.net/qrg-swish/api/v1/prefilled";
$payload='{"format":"png","size":300,"message":{"value":"'
.$title.
'","editable":false},"amount":{"value":'
.$amount.
',"editable":false},"payee":{"value":"123456789","editable":true}}';
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$result = curl_exec($ch);
curl_close($ch);Output with <img> tag
<?php echo "<img src='data:image/png;base64," . base64_encode( $result )."'>"; ?>
Full sample using Bootstrap 4
I prefer to run this kind of application as a Microservice with Docker or Podman, this example is using Docker.
Create a folder and a few files to get started
# mkdir swish-qr
# cd swish-qrCreate a Dockerfile
# vim DockerfileFROM php:8.1.1-apache COPY index.php /var/www/html
Create a shell script to deploy the container
# vim go.sh#!/bin/bash
_name="swish-qr"
_port="8080"
if [[ "$1" != "up" && "$1" != "down" ]]
then
echo "Syntax $0 up/down"
exit 1
fi
[[ "$1" == "up" ]] && docker run --rm --publish ${_port}:80 --name ${_name} --detach $(docker build -q .)
[[ "$1" == "down" ]] && docker stop ${_name}And a simple HTML form which will fetch the QR-code using cURL
Do not use in production without sanitizing the input!
# vim index.php<?php
if( isset($_POST['title']) && isset($_POST['amount']) )
{
$url="https://mpc.getswish.net/qrg-swish/api/v1/prefilled";
$payload='{"format":"png","size":300,"message":{"value":"'
.$_POST['title'].
'","editable":false},"amount":{"value":'
.$_POST['amount'].
',"editable":false},"payee":{"value":"123456789","editable":true}}';
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$result = curl_exec($ch);
curl_close($ch);
}
?><!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<title>Swish QR</title>
</head>
<body>
<div class="container">
<?php if (!isset($result)) : ?>
<div class="row justify-content-md-center mt-5">
<div class="col-md-4">
<form method=post>
<div class="form-group">
<label for="title">Benämning</label>
<input name="title" type="text" class="form-control" id="title" aria-describedby="title" placeholder="Benämning..." value="<?php echo isset($_POST['title']) ? $_POST['title'] : ""; ?>" required>
<small id="emailHelp" class="form-text text-muted">Ordernummer eller beskrivning</small>
</div>
<div class="form-group">
<label for="amount">Pris</label>
<input name="amount" type="number" class="form-control" id="amount" aria-describedby="amount" placeholder="Summa..." value="<?php echo isset($_POST['amount']) ? $_POST['amount'] : ""; ?>" required>
<small id="emailHelp" class="form-text text-muted">Pris i SEK, inkl moms</small>
</div>
<button type="submit" class="btn btn-primary">Swish QR-Kod</button>
</form>
</div>
</div>
<?php else : ?>
<div class="row justify-content-md-center mt-5">
<div class="col-md-4 text-align-center">
<div class="card">
<h5 class="card-header text-center">
<strong><?php echo $_POST['title']; ?></strong>
</h5>
<div class="card-body">
<?php echo "<img src='data:image/png;base64," . base64_encode( $result )."'>"; ?>
<br>
</div>
<h3 class="card-footer bg-white text-center">
<?php echo $_POST['amount']; ?>kr <small>exkl moms.</small>
</h3>
</div>
<a href="/" class="btn btn-light mt-3">Tillbaka</a>
</div>
</div>
<?php endif; ?>
</div>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
</body>
</html>
