mirror of
https://github.com/valitydev/swag-wallets.git
synced 2024-11-06 02:45:19 +00:00
parent
b8b19e1d82
commit
da5112091b
23
.github/workflows/build.yaml
vendored
Normal file
23
.github/workflows/build.yaml
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
name: build
|
||||||
|
on:
|
||||||
|
- pull_request
|
||||||
|
|
||||||
|
env:
|
||||||
|
NODEJS_VERSION: '16'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
bundle:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: ${{ env.NODEJS_VERSION }}
|
||||||
|
cache: npm
|
||||||
|
- run: npm install
|
||||||
|
- name: Bundle specification
|
||||||
|
run: npm run build
|
||||||
|
- name: Validate specification
|
||||||
|
run: npm run test
|
28
.github/workflows/gh-pages.yaml
vendored
Normal file
28
.github/workflows/gh-pages.yaml
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
name: gh-pages
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [master]
|
||||||
|
|
||||||
|
env:
|
||||||
|
NODEJS_VERSION: '16'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: ${{ env.NODEJS_VERSION }}
|
||||||
|
cache: npm
|
||||||
|
- run: npm install
|
||||||
|
- name: Bundle specification
|
||||||
|
run: npm run build
|
||||||
|
- name: Publish ReDoc on Github Pages
|
||||||
|
uses: peaceiris/actions-gh-pages@v3
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
publish_dir: ./dist
|
||||||
|
exclude_assets: 'swagger-ui'
|
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,6 +1,6 @@
|
|||||||
# Dir for API portal deploy
|
# Dir for API portal deploy
|
||||||
dist
|
dist/
|
||||||
out
|
out/
|
||||||
|
|
||||||
# Logs
|
# Logs
|
||||||
logs
|
logs
|
||||||
@ -35,6 +35,3 @@ node_modules
|
|||||||
|
|
||||||
# CI
|
# CI
|
||||||
.wercker
|
.wercker
|
||||||
|
|
||||||
# Generated
|
|
||||||
web_deploy/
|
|
||||||
|
@ -1,10 +1 @@
|
|||||||
# Wallet API Specification
|
# Wallet API Specification
|
||||||
|
|
||||||
## TODO
|
|
||||||
|
|
||||||
* Надо бы ввести identity service terms.
|
|
||||||
* Кажется всё-таки, что identity classes и identity levels на одном уровне иерархии.
|
|
||||||
* Можно попробовать identity classes и levels совместить во что-то одно (типа badges) и позволять набивать их в identity в произвольном количестве.
|
|
||||||
* Вообще, withdrawal может включать и user interaction.
|
|
||||||
* Ресурсы _currencies_ и _residences_ выглядят как достаточно универсальные, чтобы их вынести в отдельную спеку.
|
|
||||||
* Пропатчить _swagger-repo_ так, чтобы _swagger-editor_ корректно работал с репозиториями, в которых больше одной спеки.
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
authData:
|
authData:
|
||||||
description: Данные для авторизации операции по карте
|
description: Данные для авторизации платежа по карте
|
||||||
type: string
|
type: string
|
||||||
minLength: 1
|
minLength: 1
|
||||||
maxLength: 1000
|
maxLength: 1000
|
||||||
|
@ -1,19 +1,11 @@
|
|||||||
description: Платёжная система
|
description: Платежная система
|
||||||
type: string
|
type: string
|
||||||
enum:
|
# enum:
|
||||||
- visa
|
# - visa
|
||||||
- mastercard
|
# - mastercard
|
||||||
- visaelectron
|
# - amex
|
||||||
- maestro
|
# - dinersclub
|
||||||
- forbrugsforeningen
|
# - discover
|
||||||
- dankort
|
# - unionpay
|
||||||
- amex
|
# - jcb
|
||||||
- dinersclub
|
# - nspkmir
|
||||||
- discover
|
|
||||||
- unionpay
|
|
||||||
- jcb
|
|
||||||
- nspkmir
|
|
||||||
- elo
|
|
||||||
- rupay
|
|
||||||
- dummy
|
|
||||||
- uzcard
|
|
||||||
|
@ -2,4 +2,3 @@ type: object
|
|||||||
allOf:
|
allOf:
|
||||||
- $ref: '#/definitions/SecuredBankCard'
|
- $ref: '#/definitions/SecuredBankCard'
|
||||||
- $ref: '#/definitions/AuthData'
|
- $ref: '#/definitions/AuthData'
|
||||||
- $ref: '#/definitions/ValidUntil'
|
|
||||||
|
@ -1,20 +1,17 @@
|
|||||||
swagger: '2.0'
|
swagger: '2.0'
|
||||||
info:
|
info:
|
||||||
version: '0.0.1'
|
version: '0.1.0'
|
||||||
title: RBKmoney Payment Resource API
|
title: Vality Payment Resource API
|
||||||
description: >
|
description: >
|
||||||
|
|
||||||
Платформа предоставляет возможность токенизации исходных данных пользовательских платёжных ресурсов.
|
Vality Payment Resource API служит для токенизации чувствительных данных платёжных ресурсов пользователей.
|
||||||
Используя RBKmoney Payment Resource API вы можете для своего платёжного ресурса получить уникальный токен,
|
|
||||||
который может быть использован для переводов.
|
|
||||||
|
|
||||||
|
termsOfService: https://vality.dev/
|
||||||
termsOfService: http://rbk.money/
|
|
||||||
contact:
|
contact:
|
||||||
name: RBKmoney support team
|
name: Команда техподдержки
|
||||||
email: support@rbk.money
|
email: support@vality.dev
|
||||||
url: https://rbk.money
|
url: https://vality.dev/
|
||||||
host: api.rbk.money
|
host: api.vality.dev
|
||||||
basePath: /payres/v0
|
basePath: /payres/v0
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
description: Исходные чувствительные данные персональные документа
|
|
||||||
type: object
|
|
||||||
discriminator: type
|
|
||||||
required:
|
|
||||||
- type
|
|
||||||
properties:
|
|
||||||
type:
|
|
||||||
description: Вид документа
|
|
||||||
type: string
|
|
||||||
enum:
|
|
||||||
- RUSDomesticPassportData
|
|
||||||
- RUSRetireeInsuranceCertificateData
|
|
@ -1,20 +0,0 @@
|
|||||||
description: Открытые данные национального паспорта гражданина РФ
|
|
||||||
allOf:
|
|
||||||
- $ref: '#/definitions/SecuredPrivateDocument'
|
|
||||||
- type: object
|
|
||||||
properties:
|
|
||||||
seriesMasked:
|
|
||||||
description: Маскированная серия паспорта
|
|
||||||
type: string
|
|
||||||
example: "45**"
|
|
||||||
readOnly: true
|
|
||||||
numberMasked:
|
|
||||||
description: Маскированный номер паспорта
|
|
||||||
type: string
|
|
||||||
example: "*****6"
|
|
||||||
readOnly: true
|
|
||||||
fullnameMasked:
|
|
||||||
description: Маскированное полное имя гражданина
|
|
||||||
type: string
|
|
||||||
example: "И***** И.И."
|
|
||||||
readOnly: true
|
|
@ -1,69 +0,0 @@
|
|||||||
description: Исходные данные национального паспорта гражданина РФ
|
|
||||||
allOf:
|
|
||||||
- $ref: '#/definitions/PrivateDocument'
|
|
||||||
- type: object
|
|
||||||
required:
|
|
||||||
- series
|
|
||||||
- number
|
|
||||||
- issuer
|
|
||||||
- issuerCode
|
|
||||||
- issuedAt
|
|
||||||
- familyName
|
|
||||||
- firstName
|
|
||||||
- birthDate
|
|
||||||
- birthPlace
|
|
||||||
properties:
|
|
||||||
series:
|
|
||||||
description: Серия паспорта
|
|
||||||
type: string
|
|
||||||
example: "4567"
|
|
||||||
pattern: '^[0-9]{4}$'
|
|
||||||
number:
|
|
||||||
description: Номер паспорта
|
|
||||||
type: string
|
|
||||||
example: "123456"
|
|
||||||
pattern: '^[0-9]{6}$'
|
|
||||||
issuer:
|
|
||||||
description: Наименование выдавшего паспорт органа
|
|
||||||
type: string
|
|
||||||
example: |
|
|
||||||
Отделение УФМС России по Кемеровской области в Юргинском районе
|
|
||||||
maxLength: 1000
|
|
||||||
issuerCode:
|
|
||||||
description: Код подразделения выдавшего паспорт органа
|
|
||||||
type: string
|
|
||||||
example: |
|
|
||||||
666-777
|
|
||||||
pattern: '^[0-9]{3}-[0-9]{3}$'
|
|
||||||
issuedAt:
|
|
||||||
description: Дата выдачи паспорта
|
|
||||||
type: string
|
|
||||||
format: date
|
|
||||||
familyName:
|
|
||||||
description: Фамилия гражданина
|
|
||||||
type: string
|
|
||||||
example: "Иванов"
|
|
||||||
# pattern: "^[А-Яа-я'-]{1,100}$"
|
|
||||||
maxLength: 100
|
|
||||||
firstName:
|
|
||||||
description: Имя гражданина
|
|
||||||
type: string
|
|
||||||
example: "Иван"
|
|
||||||
# pattern: "^[А-Яа-я'-]{1,100}$"
|
|
||||||
maxLength: 100
|
|
||||||
patronymic:
|
|
||||||
description: Отчество гражданина
|
|
||||||
type: string
|
|
||||||
example: "Иванович"
|
|
||||||
# pattern: "^[А-Яа-я'-]{1,100}$"
|
|
||||||
maxLength: 100
|
|
||||||
birthDate:
|
|
||||||
description: Дата рождения гражданина
|
|
||||||
type: string
|
|
||||||
format: date
|
|
||||||
birthPlace:
|
|
||||||
description: Место рождения гражданина
|
|
||||||
type: string
|
|
||||||
# pattern: "^[ .0-9А-Яа-я'-]{1,100}$"
|
|
||||||
maxLength: 100
|
|
||||||
example: "дер. Белянино"
|
|
@ -1,13 +0,0 @@
|
|||||||
description: |
|
|
||||||
Открытые данные страхового свидетельства обязательного пенсионного страхования
|
|
||||||
гражданина РФ
|
|
||||||
allOf:
|
|
||||||
- $ref: '#/definitions/SecuredPrivateDocument'
|
|
||||||
- type: object
|
|
||||||
properties:
|
|
||||||
numberMasked:
|
|
||||||
description: |
|
|
||||||
Маскированный [СНИЛС](https://ru.wikipedia.org/wiki/Страховой_номер_индивидуального_лицевого_счёта)
|
|
||||||
type: string
|
|
||||||
example: "12*-***-*** *4"
|
|
||||||
readOnly: true
|
|
@ -1,15 +0,0 @@
|
|||||||
description: |
|
|
||||||
Исходные данные страхового свидетельства обязательного пенсионного страхования
|
|
||||||
гражданина РФ
|
|
||||||
allOf:
|
|
||||||
- $ref: '#/definitions/PrivateDocument'
|
|
||||||
- type: object
|
|
||||||
required:
|
|
||||||
- number
|
|
||||||
properties:
|
|
||||||
number:
|
|
||||||
description: |
|
|
||||||
[СНИЛС](https://ru.wikipedia.org/wiki/Страховой_номер_индивидуального_лицевого_счёта)
|
|
||||||
type: string
|
|
||||||
example: "123-456-789 64"
|
|
||||||
pattern: "^[0-9]{3}-[0-9]{3}-[0-9]{3} [0-9]{2}$"
|
|
@ -1,15 +0,0 @@
|
|||||||
description: |
|
|
||||||
Персональный документ, токенизированный с целью сокрытия чувствительных данных
|
|
||||||
type: object
|
|
||||||
discriminator: type
|
|
||||||
required:
|
|
||||||
- token
|
|
||||||
properties:
|
|
||||||
type:
|
|
||||||
x-rebillyMerge:
|
|
||||||
- $ref: '#/definitions/SecuredPrivateDocumentType'
|
|
||||||
- readOnly: true
|
|
||||||
token:
|
|
||||||
description: Токен, уникально идентифицирующий исходные данные
|
|
||||||
type: string
|
|
||||||
example: 7kodCm5gr68ji4O11KpVn0
|
|
@ -1,5 +0,0 @@
|
|||||||
description: Тип документа
|
|
||||||
type: string
|
|
||||||
enum:
|
|
||||||
- RUSDomesticPassport
|
|
||||||
- RUSRetireeInsuranceCertificate
|
|
@ -1 +0,0 @@
|
|||||||
../../../../../spec/definitions/responses/BadRequest.yaml
|
|
@ -1,20 +0,0 @@
|
|||||||
post:
|
|
||||||
operationId: storePrivateDocument
|
|
||||||
summary: Сохранить персональный документ
|
|
||||||
tags:
|
|
||||||
- Private Documents
|
|
||||||
parameters:
|
|
||||||
- $ref: '#/parameters/requestID'
|
|
||||||
- name: proof
|
|
||||||
description: Данные документа
|
|
||||||
in: body
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/PrivateDocument'
|
|
||||||
responses:
|
|
||||||
'201':
|
|
||||||
description: Документ токенизирован
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/SecuredPrivateDocument'
|
|
||||||
'400':
|
|
||||||
$ref: '#/responses/BadRequest'
|
|
@ -1,61 +0,0 @@
|
|||||||
swagger: '2.0'
|
|
||||||
info:
|
|
||||||
version: '0.0.1'
|
|
||||||
title: RBKmoney Private Document API
|
|
||||||
description: >
|
|
||||||
|
|
||||||
RBKmoney Private Document API служит для токенизации чувствительных данных
|
|
||||||
персональных документов пользователей.
|
|
||||||
|
|
||||||
termsOfService: http://rbk.money/
|
|
||||||
contact:
|
|
||||||
name: RBKmoney support team
|
|
||||||
email: support@rbk.money
|
|
||||||
url: https://rbk.money
|
|
||||||
host: api.rbk.money
|
|
||||||
basePath: /privdoc/v0
|
|
||||||
schemes:
|
|
||||||
- https
|
|
||||||
consumes:
|
|
||||||
- application/json; charset=utf-8
|
|
||||||
produces:
|
|
||||||
- application/json; charset=utf-8
|
|
||||||
securityDefinitions:
|
|
||||||
bearer:
|
|
||||||
type: apiKey
|
|
||||||
name: Authorization
|
|
||||||
in: header
|
|
||||||
description: >
|
|
||||||
Для аутентификации вызовов мы используем [JWT](https://jwt.io).
|
|
||||||
Cоответствующий ключ передается в заголовке.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
Authorization: Bearer {TOKENIZATION|PRIVATE_JWT}
|
|
||||||
```
|
|
||||||
|
|
||||||
security:
|
|
||||||
- bearer: []
|
|
||||||
|
|
||||||
responses:
|
|
||||||
|
|
||||||
BadRequest:
|
|
||||||
description: Недопустимые для операции входные данные
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/BadRequest'
|
|
||||||
|
|
||||||
parameters:
|
|
||||||
|
|
||||||
requestID:
|
|
||||||
name: X-Request-ID
|
|
||||||
in: header
|
|
||||||
description: Уникальный идентификатор запроса к системе
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
maxLength: 32
|
|
||||||
minLength: 1
|
|
||||||
|
|
||||||
tags:
|
|
||||||
|
|
||||||
- name: Private Documents
|
|
||||||
x-displayName: Персональные документы
|
|
||||||
description: ""
|
|
@ -8,7 +8,7 @@ properties:
|
|||||||
description: |
|
description: |
|
||||||
Тип ресурса приёмника средств.
|
Тип ресурса приёмника средств.
|
||||||
|
|
||||||
См. [RBKmoney Payment Resource API](?api/payres/swagger.yaml).
|
См. [Vality Payment Resource API](?api/payres/swagger.yaml).
|
||||||
type: string
|
type: string
|
||||||
enum:
|
enum:
|
||||||
- BankCardDestinationResource
|
- BankCardDestinationResource
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
description: Уникальный в рамках платформы идентификатор участника.
|
description: Уникальный в рамках системы идентификатор участника.
|
||||||
type: string
|
type: string
|
||||||
minLength: 1
|
minLength: 1
|
||||||
maxLength: 40
|
maxLength: 40
|
||||||
|
@ -12,7 +12,7 @@ properties:
|
|||||||
description: |
|
description: |
|
||||||
Человекочитаемое наименование провайдера услуг
|
Человекочитаемое наименование провайдера услуг
|
||||||
type: string
|
type: string
|
||||||
example: НКО «ЭПС»
|
example: ООО «СЕРВИС ПРОВАЙДЕР»
|
||||||
residences:
|
residences:
|
||||||
type: array
|
type: array
|
||||||
description: |
|
description: |
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
description: Идентификатор провайдера услуг
|
description: Идентификатор провайдера услуг
|
||||||
type: string
|
type: string
|
||||||
example: ncoeps
|
example: serviceprovider
|
||||||
|
@ -8,7 +8,7 @@ properties:
|
|||||||
description: |
|
description: |
|
||||||
Тип ресурса получателя средств.
|
Тип ресурса получателя средств.
|
||||||
|
|
||||||
См. [RBKmoney Payment Resource API](?api/payres/swagger.yaml).
|
См. [Vality Payment Resource API](?api/payres/swagger.yaml).
|
||||||
type: string
|
type: string
|
||||||
enum:
|
enum:
|
||||||
- BankCardReceiverResource
|
- BankCardReceiverResource
|
||||||
|
@ -8,7 +8,7 @@ properties:
|
|||||||
description: |
|
description: |
|
||||||
Тип ресурса получателя средств.
|
Тип ресурса получателя средств.
|
||||||
|
|
||||||
См. [RBKmoney Payment Resource API](?api/payres/swagger.yaml).
|
См. [Vality Payment Resource API](?api/payres/swagger.yaml).
|
||||||
type: string
|
type: string
|
||||||
enum:
|
enum:
|
||||||
- BankCardReceiverResourceParams
|
- BankCardReceiverResourceParams
|
||||||
|
@ -8,7 +8,7 @@ properties:
|
|||||||
description: |
|
description: |
|
||||||
Тип ресурса отправителя средств.
|
Тип ресурса отправителя средств.
|
||||||
|
|
||||||
См. [RBKmoney Payment Resource API](?api/payres/swagger.yaml).
|
См. [Vality Payment Resource API](?api/payres/swagger.yaml).
|
||||||
type: string
|
type: string
|
||||||
enum:
|
enum:
|
||||||
- BankCardSenderResource
|
- BankCardSenderResource
|
||||||
|
@ -8,7 +8,7 @@ properties:
|
|||||||
description: |
|
description: |
|
||||||
Тип ресурса отправителя средств.
|
Тип ресурса отправителя средств.
|
||||||
|
|
||||||
См. [RBKmoney Payment Resource API](?api/payres/swagger.yaml).
|
См. [Vality Payment Resource API](?api/payres/swagger.yaml).
|
||||||
type: string
|
type: string
|
||||||
enum:
|
enum:
|
||||||
- BankCardSenderResourceParams
|
- BankCardSenderResourceParams
|
||||||
|
@ -1,24 +1,16 @@
|
|||||||
swagger: '2.0'
|
swagger: '2.0'
|
||||||
info:
|
info:
|
||||||
version: '0.0.1'
|
version: '0.1.0'
|
||||||
title: RBKmoney Wallet API
|
title: Vality Wallet API
|
||||||
description: >
|
description: >
|
||||||
|
|
||||||
RBKmoney Wallet API является базовой и единственной точкой взаимодействия с
|
Vality Wallet API является базовой и единственной точкой взаимодействия с системой кошельков. Все изменения состояний системы осуществляются с помощью вызовов соответствующих методов API. Любые сторонние приложения, включая наши веб-сайты и другие UI-интерфейсы, являются внешними приложениями-клиентами.
|
||||||
платформой кошельков. Все изменения состояний платформы осуществляются с
|
|
||||||
помощью вызовов соответствующих методов API. Любые сторонние приложения,
|
|
||||||
включая наши веб-сайты и другие UI-интерфейсы являются внешними
|
|
||||||
приложениями-клиентами.
|
|
||||||
|
|
||||||
RBKmoney API работает поверх HTTP-протокола. Мы используем REST архитектуру,
|
Vality API работает поверх HTTP-протокола. Мы используем REST архитектуру, схема описывается в соответствии с [OpenAPI 2.0](https://spec.openapis.org/oas/v2.0). Коды возврата описываются соответствующими HTTP-статусами. Система принимает и возвращает значения JSON в теле запросов и ответов.
|
||||||
схема описывается в соответствии со [Swagger](http://swagger.io/). Коды
|
|
||||||
возврата описываются соответствующими HTTP-статусами. Платформа принимает и
|
|
||||||
возвращает значения JSON в теле запросов и ответов.
|
|
||||||
|
|
||||||
## Формат содержимого
|
## Формат содержимого
|
||||||
|
|
||||||
Любой запрос к API должен выполняться в кодировке UTF-8 и с указанием
|
Любой запрос к API должен выполняться в кодировке UTF-8 и с указанием содержимого в формате JSON.
|
||||||
содержимого в формате JSON.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
Content-Type: application/json; charset=utf-8
|
Content-Type: application/json; charset=utf-8
|
||||||
@ -26,7 +18,7 @@ info:
|
|||||||
|
|
||||||
## Формат дат
|
## Формат дат
|
||||||
|
|
||||||
Платформа принимает значения date-time в формате, описанном в RFC 3339, например:
|
Система принимает и возвращает значения отметок времени в формате `date-time`, описанном в [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339):
|
||||||
|
|
||||||
```
|
```
|
||||||
2017-01-01T00:00:00Z
|
2017-01-01T00:00:00Z
|
||||||
@ -35,43 +27,37 @@ info:
|
|||||||
|
|
||||||
## Максимальное время обработки запроса
|
## Максимальное время обработки запроса
|
||||||
|
|
||||||
К любому вызову методов API можно добавить параметр отсечки по времени,
|
При любом обращении к API в заголовке `X-Request-Deadline` соответствующего запроса можно передать параметр отсечки по времени, определяющий максимальное время ожидания завершения операции по запросу:
|
||||||
определяющий максимальное время ожидания завершения операции по запросу.
|
|
||||||
Данная отсечка передается в соответствующем заголовке HTTP-запроса:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
X-Request-Deadline: 10s
|
X-Request-Deadline: 10s
|
||||||
```
|
```
|
||||||
|
|
||||||
Значение отсечки может быть задано в формате, описанном в RFC 3339 (см. [Формат дат](#section/Format-dat)),
|
По истечении указанного времени система прекращает обработку запроса. Рекомендуется указывать значение не более одной минуты, но не менее трёх секунд.
|
||||||
либо в относительных величинах, например:
|
|
||||||
|
|
||||||
`150000ms`, `540s`, `3.5m`
|
`X-Request-Deadline` может:
|
||||||
При этом возможные единицы измерения `ms`, `s`, `m`.
|
|
||||||
В обоих случаях не рекомендуется, чтобы задаваемое значение было
|
* задаваться в формате `date-time` согласно [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339);
|
||||||
меньше **3 секунд** и превышало **1 минуту**.
|
* задаваться в относительных величинах: в миллисекундах (`150000ms`), секундах (`540s`) или минутах (`3.5m`).
|
||||||
|
|
||||||
## Ошибки обработки запросов
|
## Ошибки обработки запросов
|
||||||
|
|
||||||
В процессе обработки запросов силами нашей платформы могут происходить
|
В процессе обработки запросов силами нашей системы могут происходить различные непредвиденные ситуации. Об их появлении система сигнализирует по протоколу HTTP соответствующими [статусами][5xx], обозначающими ошибки сервера.
|
||||||
различные непредвиденные ситуации. Об их появлении платформа сигнализирует
|
|
||||||
по протоколу HTTP соответствующими [статусами][5xx], обозначающими ошибки
|
|
||||||
сервера.
|
|
||||||
|
|
||||||
| Код | Описание |
|
| Код | Описание |
|
||||||
| ------- | ---------- |
|
| ------- | ---------- |
|
||||||
| **500** | В процессе обработки платформой запроса возникла непредвиденная ситуация. При получении подобного кода ответа мы рекомендуем обратиться в техническую поддержку. |
|
| **500** | В процессе обработки системой запроса возникла непредвиденная ситуация. При получении подобного кода ответа мы рекомендуем обратиться в техническую поддержку. |
|
||||||
| **503** | Платформа временно недоступна и не готова обслуживать данный запрос. Запрос гарантированно не выполнен, при получении подобного кода ответа попробуйте выполнить его позднее, когда доступность платформы будет восстановлена. |
|
| **503** | Система временно недоступна и не готова обслуживать данный запрос. Запрос гарантированно не выполнен, при получении подобного кода ответа попробуйте выполнить его позднее, когда доступность системы будет восстановлена. |
|
||||||
| **504** | Платформа превысила допустимое время обработки запроса, результат запроса не определён. Попробуйте отправить запрос повторно или выяснить результат выполнения исходного запроса, если повторное исполнение запроса нежелательно. |
|
| **504** | Система превысила допустимое время обработки запроса, результат запроса не определён. Попробуйте отправить запрос повторно или выяснить результат выполнения исходного запроса, если повторное исполнение запроса нежелательно. |
|
||||||
|
|
||||||
[5xx]: https://tools.ietf.org/html/rfc7231#section-6.6
|
[5xx]: https://tools.ietf.org/html/rfc7231#section-6.6
|
||||||
|
|
||||||
termsOfService: http://rbk.money/
|
termsOfService: 'https://vality.dev/'
|
||||||
contact:
|
contact:
|
||||||
name: RBKmoney support team
|
name: Команда техподдержки
|
||||||
email: support@rbk.money
|
email: support@vality.dev
|
||||||
url: https://rbk.money
|
url: 'https://api.vality.dev'
|
||||||
host: api.rbk.money
|
host: api.vality.dev
|
||||||
basePath: /wallet/v0
|
basePath: /wallet/v0
|
||||||
schemes:
|
schemes:
|
||||||
- https
|
- https
|
||||||
@ -85,11 +71,10 @@ securityDefinitions:
|
|||||||
name: Authorization
|
name: Authorization
|
||||||
in: header
|
in: header
|
||||||
description: >
|
description: >
|
||||||
Для аутентификации вызовов мы используем [JWT](https://jwt.io).
|
Для аутентификации вызовов мы используем [JWT](https://jwt.io). Соответствующий ключ передается в заголовке.
|
||||||
Cоответствующий ключ передается в заголовке.
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
Authorization: Bearer {TOKENIZATION|PRIVATE_JWT}
|
Authorization: Bearer {YOUR_API_KEY_JWT}
|
||||||
```
|
```
|
||||||
|
|
||||||
security:
|
security:
|
||||||
@ -142,15 +127,6 @@ parameters:
|
|||||||
maxLength: 40
|
maxLength: 40
|
||||||
minLength: 1
|
minLength: 1
|
||||||
|
|
||||||
challengeID:
|
|
||||||
name: challengeID
|
|
||||||
in: path
|
|
||||||
description: Идентификатор процедуры идентификации личности
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
maxLength: 40
|
|
||||||
minLength: 1
|
|
||||||
|
|
||||||
walletID:
|
walletID:
|
||||||
name: walletID
|
name: walletID
|
||||||
in: path
|
in: path
|
||||||
@ -322,12 +298,6 @@ parameters:
|
|||||||
|
|
||||||
tags:
|
tags:
|
||||||
|
|
||||||
- name: Payment Resources
|
|
||||||
x-displayName: Платёжные ресурсы
|
|
||||||
description: >
|
|
||||||
Платформа предоставляет возможность токенизации исходных данных пользовательских платёжных ресурсов.
|
|
||||||
См. [RBKmoney Payment Resource API](?api/payres/swagger.yaml).
|
|
||||||
|
|
||||||
- name: Providers
|
- name: Providers
|
||||||
x-displayName: Провайдеры услуг
|
x-displayName: Провайдеры услуг
|
||||||
description: ""
|
description: ""
|
||||||
@ -365,27 +335,19 @@ tags:
|
|||||||
description: ""
|
description: ""
|
||||||
|
|
||||||
- name: W2W
|
- name: W2W
|
||||||
x-displayName: Переводы внутри платформы
|
x-displayName: Переводы внутри системы
|
||||||
description: "Переводы средств между кошельками внутри платформы"
|
description: "Переводы средств между кошельками внутри системы"
|
||||||
|
|
||||||
- name: Webhooks
|
- name: Webhooks
|
||||||
x-displayName: Webhooks
|
x-displayName: Webhooks
|
||||||
description: >
|
description: >
|
||||||
## RBKmoney Webhooks Management API
|
## Vality Webhooks Management API
|
||||||
|
|
||||||
В данном разделе описаны методы, позволяющие управлять Webhook'ами, или
|
В данном разделе описаны методы, позволяющие управлять Webhook'ами, или инструментами для получения асинхронных оповещений посредством HTTP-запросов при наступлении одного или группы интересующих вас событий, например, о том, что выплата в рамках созданного кошелька была успешно проведена.
|
||||||
инструментами для получения асинхронных оповещений посредством
|
|
||||||
HTTP-запросов при наступлении одного или группы интересующих вас событий,
|
|
||||||
например, о том, что выплата в рамках созданного кошелька была успешно
|
|
||||||
проведена.
|
|
||||||
|
|
||||||
## RBKmoney Webhooks Events API
|
## Vality Webhooks Events API
|
||||||
|
|
||||||
Внимание! Только Webhooks Management API является частью платформы
|
Внимание! Только Webhooks Management API является частью системы Vality, а следовательно и данной спецификации. Для реализации обработчика присылаемых уведомлений вам необходимо будет ознакомиться с OpenAPI-спецификацией [Vality Wallets Webhook Events API](https://vality.github.io/swag-wallets-webhook-events/).
|
||||||
RBKmoney, а следовательно и данной спецификации. Для реализации
|
|
||||||
обработчика присылаемых уведомлений вам необходимо будет ознакомиться со
|
|
||||||
Swagger-спецификацей [RBKmoney Wallet Webhooks Events
|
|
||||||
API](https://rbkmoney.github.io/wallet-webhook-events-api/).
|
|
||||||
|
|
||||||
- name: Error Codes
|
- name: Error Codes
|
||||||
x-displayName: Коды ошибок
|
x-displayName: Коды ошибок
|
||||||
@ -399,5 +361,4 @@ tags:
|
|||||||
| InvalidReceiverResource| Неверный получатель перевода (введен номер несуществующей карты и т.п.) |
|
| InvalidReceiverResource| Неверный получатель перевода (введен номер несуществующей карты и т.п.) |
|
||||||
| InsufficientFunds | Недостаточно средств на счете банковской карты |
|
| InsufficientFunds | Недостаточно средств на счете банковской карты |
|
||||||
| PreauthorizationFailed | Предварительная авторизация отклонена (введен неверный код 3D-Secure, на форме 3D-Secure нажата ссылка отмены) |
|
| PreauthorizationFailed | Предварительная авторизация отклонена (введен неверный код 3D-Secure, на форме 3D-Secure нажата ссылка отмены) |
|
||||||
| RejectedByIssuer | Перевод отклонён эмитентом (установлены запреты по стране списания, запрет на покупки в интернете, платёж отклонен антифродом эмитента и т.п.) |
|
| RejectedByIssuer | Перевод отклонён эмитентом (установлены запреты по стране списания, запрет на покупки в интернете, платеж отклонен антифродом эмитента и т.п.) |
|
||||||
|
|
||||||
|
26
gulpfile.js
26
gulpfile.js
@ -1,14 +1,14 @@
|
|||||||
var gulp = require('gulp');
|
const gulp = require('gulp');
|
||||||
var util = require('gulp-util')
|
const util = require('gulp-util');
|
||||||
var gulpConnect = require('gulp-connect');
|
const gulpConnect = require('gulp-connect');
|
||||||
var connect = require('connect');
|
const connect = require('connect');
|
||||||
var cors = require('cors');
|
const cors = require('cors');
|
||||||
var path = require('path');
|
const exec = require('child_process').exec;
|
||||||
var exec = require('child_process').exec;
|
const portfinder = require('portfinder');
|
||||||
var portfinder = require('portfinder');
|
const swaggerRepo = require('swagger-repo');
|
||||||
var swaggerRepo = require('swagger-repo');
|
|
||||||
|
|
||||||
var DIST_DIR = 'dist';
|
const DIST_DIR = 'dist';
|
||||||
|
const SPEC_DIR = 'spec';
|
||||||
|
|
||||||
gulp.task('build', function (cb) {
|
gulp.task('build', function (cb) {
|
||||||
exec('npm run build', function (err, stdout, stderr) {
|
exec('npm run build', function (err, stdout, stderr) {
|
||||||
@ -17,22 +17,22 @@ gulp.task('build', function (cb) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
gulp.task('edit', function () {
|
gulp.task('edit', function () {
|
||||||
portfinder.getPort({ port: 5000 }, function (err, port) {
|
portfinder.getPort({ port: 5000 }, function (err, port) {
|
||||||
var app = connect();
|
let app = connect();
|
||||||
app.use(swaggerRepo.swaggerEditorMiddleware());
|
app.use(swaggerRepo.swaggerEditorMiddleware());
|
||||||
app.listen(port);
|
app.listen(port);
|
||||||
util.log(util.colors.green('swagger-editor started http://localhost:' + port));
|
util.log(util.colors.green('swagger-editor started http://localhost:' + port));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
gulp.task('reload', gulp.series('build', function () {
|
gulp.task('reload', gulp.series('build', function () {
|
||||||
gulp.src(DIST_DIR).pipe(gulpConnect.reload())
|
gulp.src(DIST_DIR).pipe(gulpConnect.reload())
|
||||||
}));
|
}));
|
||||||
|
|
||||||
gulp.task('watch', function () {
|
gulp.task('watch', function () {
|
||||||
gulp.watch(['api/**/*', 'spec/**/*', 'web/**/*'], gulp.series('reload'));
|
gulp.watch([`${SPEC_DIR}/**/*`, 'web/**/*'], gulp.series('reload'));
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('serve', gulp.parallel('build', 'edit', 'watch', function () {
|
gulp.task('serve', gulp.parallel('build', 'edit', 'watch', function () {
|
||||||
|
13105
package-lock.json
generated
13105
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
12
package.json
12
package.json
@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"name": "rbkmoney-wallet-api-spec",
|
"name": "vality-wallet-openapi-spec",
|
||||||
"version": "0.0.1",
|
"version": "0.1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bower": "^1.7.7",
|
"bower": "^1.7.7",
|
||||||
"connect": "^3.4.1",
|
"connect": "^3.4.1",
|
||||||
"cors": "^2.7.1",
|
"cors": "^2.7.1",
|
||||||
"gulp": "^4.0.2",
|
|
||||||
"gulp-connect": "^4.2.0",
|
"gulp-connect": "^4.2.0",
|
||||||
"gulp-util": "^3.0.7",
|
"gulp-util": "^3.0.7",
|
||||||
"json-merge-patch": "^0.2.3",
|
"json-merge-patch": "^0.2.3",
|
||||||
"npm": "^5.7.1",
|
"npm": "^8.1.3",
|
||||||
"portfinder": "^1.0.3",
|
"portfinder": "^1.0.3",
|
||||||
"shelljs": "^0.7.0",
|
"shelljs": "^0.7.0",
|
||||||
"swagger-repo": "^1.5.1",
|
"swagger-repo": "^1.5.1",
|
||||||
@ -19,7 +18,10 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "node ./scripts/build.js",
|
"build": "node ./scripts/build.js",
|
||||||
"swagger": "swagger-repo",
|
"swagger": "swagger-repo",
|
||||||
"test": "swagger-repo validate --basedir api/wallet/spec/ && swagger-repo validate --basedir api/privdoc/spec/ && swagger-repo validate --basedir api/payres/spec/",
|
"test": "swagger-repo validate --basedir api/wallet/spec/ && swagger-repo validate --basedir api/payres/spec/",
|
||||||
"start": "gulp serve"
|
"start": "gulp serve"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"gulp": "github:gulpjs/gulp"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@ properties:
|
|||||||
- NoMatch
|
- NoMatch
|
||||||
- InvalidResourceToken
|
- InvalidResourceToken
|
||||||
- InvalidToken
|
- InvalidToken
|
||||||
- AmbiguousPartyID
|
|
||||||
example: NotFound
|
example: NotFound
|
||||||
name:
|
name:
|
||||||
description: Имя или идентификатор элемента сообщения, содержащего недопустимые данные
|
description: Имя или идентификатор элемента сообщения, содержащего недопустимые данные
|
||||||
|
@ -2,11 +2,10 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>RBKmoney Wallets API</title>
|
<title>Vality Wallets API</title>
|
||||||
<!-- needed for adaptive design -->
|
<!-- needed for adaptive design -->
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js">
|
<script src="https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js">
|
||||||
</script>
|
</script>
|
||||||
<!--
|
<!--
|
||||||
|
Loading…
Reference in New Issue
Block a user