Skip to content

Payment via FPS

General Information

The partner can implement payment with its own payment form using FPS (Faster Payments System). In this case, the client can pay for an order without entering their bank card details: they scan a QR code and receive a payment link that can be opened in a banking app.

To connect this payment method, please contact our support service.

Please Note

The integration of a new payment method assumes that the partner has already implemented the «Partner Form Payment» scenario.

Payment Processing

To process a payment, the partner needs to send a QR code generation request (both POST and PUT method can be used).

POST /partner/payin/v1/sites/test-01/sbp/qrCodes HTTP/1.1
Accept: application/json
Authorization: Bearer 5c4b25xx93aa435d9cb8cd17480356f9
Content-type: application/json
Host: b2b-api.qiwi.com

{
    "qrCodeUid": "Test12",
    "amount": {
        "value": 100.00,
        "currency": "RUB"
    },
    "qrCode": {
        "type": "DYNAMIC",
        "ttl": 60,
        "image": {
            "mediaType": "image/png",
            "width": 300,
            "height": 300
        }
    },
    "paymentPurpose": "Flower for my girlfriend",
    "redirectUrl": "http://example.com"
}
HTTP/1.1 200 OK
Content-Type: application/json

{
    "qrCodeUid": "Test12",
    "amount": {
        "currency": "RUB",
        "value": "1.00"
    },
    "qrCode": {
        "type": "DYNAMIC",
        "ttl": 60,
        "image": {
            "mediaType": "image/png",
            "width": 300,
            "height": 300,
            "content": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAA"
        },
        "payload": "https://qr.nspk.ru/AD10006M8KH234K782OQM0L13JI31LQD?type=02&bank=100000000009&sum=200&cur=RUB&rc=C63A",
        "status": "CREATED"
    },
    "createdOn": "2022-08-11T20:10:32+03:00"
}

Request and response are provided as an example: for the current format and list of parameters, refer to the API documentation.

The response contains QR code data:

  • qrCode.image.content — base64-encoded QR code.
  • qrCode.payload — URL-based QR code for redirecting the client to the bank app.

The value needs to be decoded. The code image obtained after decoding should be displayed to the client.

To determine the current status of the QR code (including whether it has expired), use the status code request: check the value of the qrCode.status field in the response.