Skip to content

Commit

Permalink
Add support for GetQR and SpbPayTest endpoints
Browse files Browse the repository at this point in the history
Co-authored-by: Nikita Vanyasin <nikita.vanyasin@gmail.com>
  • Loading branch information
AlexTransit and nikita-vanyasin authored Apr 4, 2022
1 parent 77806fa commit 69eae27
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 0 deletions.
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,19 @@ res, err := client.Init(req)
fmt.Println("payment form url: %s", res.PaymentPageURL)
```

#### Create QR
```go
req := &tinkoff.InitRequest{
Amount: 1000, // минимум 1000 копеек
OrderID: "123456",
Data: map[string]string{"": "",}, // nil - недопустим.
res, err := client.Init(req)
gqr := &tinkoff.GetQrRequest{
PaymentID: res.PayID,
}
resQR, errQ := client.GetQR(gqr)
```
#### Cancel or refund payment
[Cancel](https://oplata.tinkoff.ru/develop/api/payments/cancel-description/)
```go
Expand Down
72 changes: 72 additions & 0 deletions qr.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package tinkoff

type GetQRRequest struct {
BaseRequest

PaymentID string `json:"PaymentId"` // Идентификатор платежа в системе банка. По офф. документации это number(20), но фактически значение передается в виде строки
DataType string `json:"DataType"` //Тип возвращаемых данных. PAYLOAD – В ответе возвращается только Payload (по-умолчанию). IMAGE – В ответе возвращается SVG изображение QR
}

func (i *GetQRRequest) GetValuesForToken() map[string]string {
return map[string]string{
"PaymentId": i.PaymentID,
"TerminalKey": i.TerminalKey,
}
}

type GetQRResponse struct {
BaseResponse
OrderID string `json:"OrderId"` // Номер заказа в системе Продавца
Data string `json:"Data"` // Payload - или SVG
PaymentID int `json:"PaymentId"` // Идентификатор платежа в системе банка.
}

type GetQRTestRequest struct {
BaseRequest

PaymentID string `json:"PaymentId"` // Идентификатор платежа в системе банка. По офф. документации это number(20), но фактически значение передается в виде строки
IsDeadlineExpired bool `json:"IsDeadlineExpired"` // Признак эмуляции отказа проведения платежа Банком по таймауту. true – требуется эмуляция (не может быть использован вместе с IsRejected = true)
IsRejected bool `json:"IsRejected"` // Признак эмуляции отказа Банка в проведении платежа. true – требуется эмуляция (не может быть использован вместе с IsDeadlineExpired = true)
}

func (i *GetQRTestRequest) GetValuesForToken() map[string]string {
return map[string]string{
"PaymentId": i.PaymentID,
"TerminalKey": i.TerminalKey,
}
}

func (c *Client) GetQR(request *GetQRRequest) (*GetQRResponse, error) {
response, err := c.PostRequest("/GetQr", request)
if err != nil {
return nil, err
}
defer response.Body.Close()

var res GetQRResponse
err = c.decodeResponse(response, &res)
if err != nil {
return nil, err
}

return &res, res.Error()
}

// SPBPayTest тестовый метод описанный в API.
// на рабочем терминале - функция не работает.
// тестовый терминал не работает у банка.
func (c *Client) SPBPayTest(request *GetQRTestRequest) (*GetQRResponse, error) {
response, err := c.PostRequest("/SpbPayTest", request)
if err != nil {
return nil, err
}
defer response.Body.Close()

var res GetQRResponse
err = c.decodeResponse(response, &res)
if err != nil {
return nil, err
}

return &res, res.Error()
}

0 comments on commit 69eae27

Please sign in to comment.