# Tron Payment API

[vissza az API indexhez](./index.md)

## Authentikáció

### Eszköz párosítása

`POST /tron/auth/pair-device?uid=...` - public api

A kérés fontos eleme a uid-nek átadott string, amit a photogram generál és a user profil oldalán olvasható be

A body-ba egy JSON-t vár a szerver:

```json
{
  "deviceInfo": "Ez egy teszt készülék", // ez lesz kiírva a user-nek amikor listázzuk a csatlakoztatott eszközöket
  "walletAddress": "TA7APJeWXfwTdNu6FZUUFpof7qrCmBKTEp"
}
```

Ha a uid hibás volt, vagy bármi egyéb probléma előállt, akkor a server **404**-el (NOT FOUND) tér vissza, mivel nem találta meg a user-t a uid alapján.

Ha minden rendben volt, akkor a szerver **201**-es (CREATED) státusszal tér vissza + egy json objektummal, ami tartalmazza az access és refresh token-eket:

```json
{
  "accessToken": "...",
  "refreshToken": "...",
  "contractAddress": "TKjb5nfygeDqybWbMip1DJzPLnkzdMjg49",
  "app": {
    "name": "Photogram",
    "icon": <url>
  }
}
```

### Párosítás megszűntetése

`DELETE /tron/auth/device` - private api

Ehhez az infókat a token-ből kiszedi a szerver és megszűnteti a párosítást

Sikeres hívás esetén **204**-es válasszal (NO CONTENT) tér vissza a szerver.

Sikertelen hívás esetén **401**-el (UNAUTHORIZED) és a válasz egy JSON objektum lesz, aminek 1 kulcsa van: `jwtError`, értéke pedig egy string.

### Token frissítés refreshToken használatával

`GET /tron/auth/token?refreshToken=.....` - public api

Ennél nem kell elküldeni az accessToken-t, ez publikusan elérhető

Ha a küldött refreshToken hibás, akkor **401**-es (UNAUTHORIZED) választ küld a szerver.

Ha viszont valid, de nem létező (mert pl a device párosítása meg lett szűntetve), akkor **403**-at (FORBIDDEN) küld a szerver.

Sikeres hívás esetén a válasz az alábbi json lesz az új accessToken-nel:

```json
{
  "accessToken": "...",
  "contractAddress": "TKjb5nfygeDqybWbMip1DJzPLnkzdMjg49"
}
```

## Kosár lekérdezése

`GET /tron/cart/` - private api

Válaszban egy objektum jön a tételekkel

( lásd [Kosár / Fizetés API](./cart.md) )

## Sikeres okosszerződés alárás

`POST /tron/payment/contractsignready` - public api

JSON-t kell küldeni a szervernek, ami az alábbi adatokat tartalmazza:

```json
{
  "info": {
    "tx": "51eeb08dddfdb88db0b88a2e21449165347de8570a1b20f88dc37be0d29b4a5b",
    "value": 7903201,
    "parameter": ["TFxQbCA7YyAY5YGGfL2VrCFxMZ3jhsJ3kT", 2647039, false],
    "smartfunction": "buyPhoto"
  }
}
```

visszatér

````json
{
    "success": true
}

## Sikeres fizetés visszaigazolása

`POST /tron/payment/success` - public api

JSON-t kell küldeni a szervernek, ami az alábbi adatokat tartalmazza:

```json
{
  "userid": <int>
}
````

Ha nincs a megadott user, akkor **404**-et (NOT FOUND) dob a szerver, különben **200**-as (OK) válasszal tér vissza.

## Sikertelen fizetés visszaigazolása

`POST /tron/payment/fail` - public api

JSON-t kell küldeni a szervernek, ami az alábbi adatokat tartalmazza:

```json
{
  "userid": <int>
}
```

Ha nincs a megadott user, akkor **404**-et (NOT FOUND) dob a szerver, különben **200**-as (OK) válasszal tér vissza.

## Okosszerződés generálása a kosár tartalmához

`GET /tron/cart/contract` - private api

Csak ready to pay (2) státuszú elemeket vesz figyelembe

```json
{
  "contractaddress": "TKjb5nfygeDqybWbMip1DJzPLnkzdMjg49",
  "data": [
    {
      "functionname": "buySector",
      "params": [
        [
          "TNudXXP4dVZLtxpgwUPYayeNx5h7x7rPcf",
          "TZ71NuWDzW9iLbVBDufRaxbZgiu4fenYWN",
          "TTHPbZapVtb9uQ4oDiifqX5iw5hcgT7pUe",
          "TCdBMmyrfTz6tMC9yhbkoPmBL6xzPPoapT",
          "TFxQbCA7YyAY5YGGfL2VrCFxMZ3jhsJ3kT",
          "TYcy3DpvK7rvJkWFtzUR2TB4zX45fWR8XA",
          "TAEX4iGBQ8C6xDBrYMs2CWzePiTicx9qEN",
          "TUZxrYnc1ZTLnH9K2wCQomvo1qexU9Xwxg",
          "TCVtt9RnA8gnaT1U2wEQGacj3yBnLscLFz",
          "TBvKzhJBTVnqPCebLLB7F8JjycimdFdkyJ"
        ]
      ],
      "options": {
        "feeLimit": 1000000000,
        "callValue": 668553468
      }
    }
  ],
  "usdtrx": "0.089746"
}
```
