Purchase
Last updated: 2026-03-13
INTENT
se.westpay.softpos.PURCHASEInitiate a contactless card payment through WestPay SoftPOS
Request Body
amountstringrequiredPayment amount using a comma as the decimal separator, e.g. 100,50 for 100.50. Must be greater than zero.
currencyIdintrequiredISO 4217 numeric currency code, e.g. 752 for SEK, 978 for EUR.
gratuityAmountstringoptionalTip/gratuity amount in the same comma-decimal format as amount. Only used when gratuity is enabled.
gratuity_enabledbooleanoptionalWhen true, enables the tip/gratuity prompt on the SoftPOS terminal.
HTTP Status Code Summary
| Code | Description |
|---|---|
| RESULT_OK | The operation completed. Check isSuccess in the response extras to determine if the transaction was approved. |
| RESULT_CANCELED | The operation was cancelled or could not complete. Check the error / Error extra for the reason. |
Request
kotlin
1private val resultLauncher = registerForActivityResult(
2 ActivityResultContracts.StartActivityForResult()
3) { result ->
4 if (result.resultCode == Activity.RESULT_OK) {
5 val data = result.data
6 val success = data?.getBooleanExtra("isSuccess", false) ?: false
7 if (success) {
8 val transactionId = data?.getStringExtra("transactionId")
9 val amount = data?.getStringExtra("amount")
10 val cardType = data?.getStringExtra("cardType")
11 // Handle successful payment
12 } else {
13 val error = data?.getStringExtra("error")
14 val denialReason = data?.getStringExtra("denialReason")
15 // Handle failure
16 }
17 } else {
18 val error = result.data?.getStringExtra("error")
19 ?: result.data?.getStringExtra("Error")
20 // Handle cancellation
21 }
22}
23
24fun initiatePurchase(amount: String, currencyId: Int) {
25 val intent = Intent("se.westpay.softpos.PURCHASE").apply {
26 putExtra("amount", amount) // e.g. "100,50"
27 putExtra("currencyId", currencyId) // e.g. 752 for SEK
28 addCategory(Intent.CATEGORY_DEFAULT)
29 }
30 if (intent.resolveActivity(packageManager) != null) {
31 resultLauncher.launch(intent)
32 } else {
33 showError("WestPay SoftPOS is not installed")
34 }
35}
36
37// With tip/gratuity
38fun initiatePurchaseWithTip(amount: String, currencyId: Int, tipAmount: String? = null) {
39 val intent = Intent("se.westpay.softpos.PURCHASE").apply {
40 putExtra("amount", amount)
41 putExtra("currencyId", currencyId)
42 tipAmount?.let { putExtra("gratuityAmount", it) }
43 putExtra("gratuity_enabled", true)
44 addCategory(Intent.CATEGORY_DEFAULT)
45 }
46 resultLauncher.launch(intent)
47}Response
Response
1{
2 "isSuccess": true,
3 "amount": "100,50",
4 "currencyId": "752",
5 "transactionId": "TX123456",
6 "terminalId": "T001",
7 "acqRefNumber": 123456789,
8 "cardType": "Visa",
9 "maskedCardPan": "****1234",
10 "type": "Purchase",
11 "status": "Approved",
12 "time": "2025-01-06T10:30:00",
13 "denialReason": "None",
14 "error": "None",
15 "receiptDetails": "{...}"
16}