Платежен интерфейс EasyPSD

Настоящата документация е предназначена за банки и финансови организации, които в съответствие с разширената Директива на Европейския съюз относно платежните услуги PSD 2 Directive (EU) 2015/2366 желаят да предложат на клиентите си в своите платформи услуги, свързани с оперираните от Изипей АД платежни сметки. В документа такива организации са обозначени като "Дружества за платежни услуги"(ДПУ).


Всеки доставчик на услуги, получил лиценз за осъществяване на дейност по предоставяне на информация за сметка и/или за иницииране на плащания съгласно Directive (EU) 2015/2366, може да достъпи Портала на Изипей АД за разработчици и да осъществи връзка с разработените от Изипей API интерфейси.

При първоначалното осъществяване на връзка с Портала и осъществяване на връзка с разработените от Изипей API интерфейси Доставчикът се идентифицира чрез валиден сертификат QWAC (PSD2-compliant Qualified Web Authentication Certificate), който е издаден от някой от лицензирани доставчици на удостоверителни услуги (публикувани на EU list of trusted providers).

За да удостовери правото и ролята, за която съответния доставчик притежава лиценз - като Доставчик на услуги по предоставяне на информация за сметка и/или Доставчик на услуги по иницииране на плащане и/или Доставчик на платежни услуги, издаващи платежни инструменти, свързани с карти, Изипей извършва проверка в единен регистър на ЕБО за платежните институции и институциите за електронни пари, достъпен на https://www.eba.europa.eu/risk-analysis-and-data/register-payment-electronic-money-institutions-under-PSD2.

При предоставен валиден сертификат и изпратена заявка за първоначален достъп, ДПУ предоставя на Изипей валиден адрес за обратна връзка - REPLY_URI за WEB приложение и URL Scheme за мобилно приложение за осъществяване на комуникацията за обмен на информация. ДПУ предоставило валиден сертификат за достъп получава таен ключ на приложение и уникален идентификатор (APPID) - параметър, който Доставчикът изпраща в последствие с всяка заявка към сървърите на Изипей за осъществяване на достъп до сметките на клиентите, които са пожелали да ползват тази услуга чрез приложението на другия ДПУ и който се използва от Изипей за идентифициране на Доставчика във връзка с изпълнението на конкретната заявка.

Освен APPID, с всяка заявка ДПУ следва да изпраща и уникален идентификатор на устройството, използвано от потребителя (DEVICEID). За идентификатор на устройството се препоръчва използването на Vendor ID в iOS или ANDROID_ID в Android.

Третият основен и задължителен параметър, който трябва да присъства във всяка заявка, която доставчикът изпраща към Изипей във връзка с получаване на достъп до сметката е TOKEN идентифициращ потребителя. TOKEN-ът се получава при получаване на съгласие от потребителя за осъществяване на достъп до сметката му чрез друг ДПУ, както е описано в т. 3.1.

Комуникацията със сървърите на Изипей се извършва посредством JSON REST API. Изипей предоставя на Доставчика входни точки за комуникация със сървърите на Изипей при достъп до сметка – за тестова среда и за продукционна среда.

С валиден сертификат QWAC може да се създаде/провери/редактира или премахне профил на Developer на ДПУ.

Преглед:
GET API_BASE_WEB/psd2/app
В резултат се получава JSON, който съдържа данни за приложението:

{"certdata":{"serial":"26924758290291903361252444186158762848","subject":"Payments AD","validto":"1673690219","digest":"edPx684vhbWNfStWHPgt0BPn27g=","roles":["PSP_AS","PSP_PI","PSP_AI","PSP_IC"]},"app":{"APP.REPLY_URI":"","APP.SCHEME":"aaaaaaaaaaaaaaa","APP.APPID":"0517814436466328370834363951629359940584980052352957477218124635","APP.SECRET":"IYePSsmSFHXlg97fdMNQG5p2awKOmTKdrd8g3kdfwF87jkEh9ecj85IgtvXwbvLu6btywUiwceeO1hekiBfd3kiKuA93n0JddyCEl2bjZRnlsv4hV3IdMJsqUKcmFQ4n"},"status":"OK"}
		

или
            {
            "status" : "ERR", 
            "err" : "SOME_ERROR_CODE", 
            "errm" : "Съобщение, което може да покажете на потребителя"
        }
		

Например:
        {"err":"NOAPP","errm":"Неуспешна заявка. Моля, свържете се с поддръжка(NOAPP)","status":"ERR","app":null,"certdata":{"subject":"Payments AD","serial":"26924758290291903361252444186158762848","digest":"edPx684vhbWNfStWHPgt0BPn27g=","validto":"1673690219","roles":["PSP_AS","PSP_PI","PSP_AI","PSP_IC"]}}
			

който показва, че е предоставен валиден сертификат, но все още няма създадено приложение.


Създаване:
POST API_BASE_WEB/psd2/app/add с подаване на валиден адрес за обратна връзка - REPLY_URI за WEB приложение , SCHEME за мобилно приложение.
В резултат се получава JSON, който съдържа json от вида:

{"certdata":{"roles":["PSP_AS","PSP_PI","PSP_AI","PSP_IC"],"serial":"26924758290291903361252444186158762848","subject":"Payments AD","validto":"1673690219","digest":"edPx684vhbWNfStWHPgt0BPn27g="},"app":{"appid":"0517814436466328370834363951629359940584980052352957477218124635","secret":"IYePSsmSFHXlg97fdMNQG5p2awKOmTKdrd8g3kdfwF87jkEh9ecj85IgtvXwbvLu6btywUiwceeO1hekiBfd3kiKuA93n0JddyCEl2bjZRnlsv4hV3IdMJsqUKcmFQ4n"},"status":"OK"}
	

• Таен ключ (SECRET) в app.secret
• Уникален идентификатор (APPID), който се изпраща с всяка заявка към сървърите на ePay.bg/Easypay в app.appid
или
        {
            "status" : "ERR", 
            "err" : "SOME_ERROR_CODE", 
            "errm" : "Съобщение, което може да покажете на потребителя"
        }
			


Редакция:
POST API_BASE_WEB/psd2/app/save, която съдържа SCHEME или REPLY_URI
В резултат се получава JSON, който съдържа:

            {"status":"OK"}
			

или
            {
            "status" : "ERR", 
            "err" : "SOME_ERROR_CODE", 
            "errm" : "Съобщение, което може да покажете на потребителя"
        }
			

Например:
        {"err":"BADIN","errm":"Please add scheme or reply uri","status":"ERR"}
		


Премахване:
POST API_BASE_WEB/psd2/app/revoke
В резултат се получава JSON, който съдържа:

			{"status":"OK"}
			

или
			{
            "status" : "ERR", 
            "err" : "SOME_ERROR_CODE", 
            "errm" : "Съобщение, което може да покажете на потребителя"
        }
			


Освен APPID с всяка заявка ДПУ трябва да изпраща и уникален идентификатор на устройството, използвано от потребителя(DEVICEID), както и TOKEN идентифициращ потребителя, стъпките за чието получаване са описани по-долу.
За идентификатор на устройството се препоръчва използването на Vendor ID в iOS или ANDROID_ID в Android.
Комуникацията със сървърите на ePay.bg се извършва посредством JSON REST API. При успешна заявка се получава отговор, съдържащ:
{ "status": "OK" /*и данни според заявката*/ }
При неуспешна заявка :
{ "status" : "ERR", "err" : "SOME_ERROR_CODE", "errm" : "Съобщение, което може да покажете на потребителя" }
Входните точки за комуникация са:
За тестови цели:
API_BASE : https://demo.epay.bg/xdev/api
API_BASE_WEB : https://demo.epay.bg/xdev/mobile
Продукционна среда:
API_BASE : https://www.epay.bg/v3/api
API_BASE_WEB : https://www.epay.bg/v3/mob






Оторизация на приложението на ДПУ от потребителя

GET API_BASE_WEB/psd2/start с параметри APPID, DEVICEID,KEY ( уникален за DEVICEID, с който се проверява резултатът от заявката) , PSD2_ONETIME = 0/1 (Генерираният токен се използва за еднократно плащане)
UTYPE=1 , DEVICE_NAME (String Име на устройството) , BRAND ( String Марка на устройството) , OS ( String Операционна система на устройството ) , MODEL ( String Модел на устройството ) ( OS_VERSION String Версия на операционната система ) PHONE = 0/1 Телефонен номер на потребителя
Потребителя се пренасочва в браузър на адрес за автентикация, при успешна автентикация се генерира ключ за издаване на токен.
Примерна заявка за оторизация
https://demo.epay.bg/xdev/mobile/psd2/start?APPID=appid&DEVICEID=deviceid&KEY=uniq_key&DEVICE_NAME=myphone&BRAND=iPhone&OS=iOS&MODEL=iPhone5s&OS_VERSION=8.0&PHONE=1
При получаване на заявката клиентът се насочва за вход в системата на ePay.bg с парола и потребителско име . Според индивидуалните му настройки в системата, ePay.bg изисква SMS код или потвърждение в ePay.bg Mobile : Потребителите, регистрирани за "Временен SMS код" въвеждат SMS код, получен на регистрирания в epay.bg GSM номер. Потребителите, които не са регистрирани за "Временен SMS код" прочитат с ePay.bg Mobile показания на екран QR код и в мобилното приложение се показва информация и бутон за потвърждение на исканото съгласие.
В зависимост от резултата от оторизацията, потребителят ще бъде пренасочен към линкове, които да отворят мобилното приложение или да водят към WEB страницата на ДПУ .
За WEB приложение REPLY_URI/?ret=authok при успех, REPLY_URI/?ret=authagain при неуспех
за Мобилно приложение SCHEME/authok при успех, SCHEME/authagain при неуспех




Проверка на изхода от оторизациятa

След като потребителят е бил върнат в мобилното приложение на ДПУ или в WEB страницата му в случай на успешна оторизация, ДПУ трябва в рамките на 2 минути да вземе код за издаване на TOKEN с:
GET API_BASE/psd2/code/get с APPID, DEVICEID, KEY - Уникален ключ от предходната заявка GET API_BASE_WEB/psd2/start
Примерна заявка https://demo.epay.bg/xdev/api/psd2/code/get?APPID=appid&DEVICEID=deviceid&KEY=uniq_key
Отговор
{
    "status":"OK",
    "code":"token_code"
}

Не е нужно да чакате потребителят да се върне в приложението/страницата за изпращане на GET /psd2/code/geti.




Същинско получаване на TOKEN
GET API_BASE/psd2/token/get с APPID, DEVICEID, CODE ( от отговора на заявката на GET API_BASE/psd2/code/get)
Заявка https://demo.epay.bg/xdev/api/psd2/token/get?APPID=appid&DEVICEID=deviceid&CODE=token_code
Oтговор
{
    "status": "OK",
    "token": "token_string",
    "expires":1720188520,
    "kin":"client uniq number", 
    "username" : "client username",
    "realname": "client real name"
}

Важно! След получаването на TOKEN всички заявки трябва да съдържат APPID, DEVICEID и ТOKEN . Всяка заявка, съдържаща TOKEN, ще връща грешка в случай, че последната аутентикация за този токен е преди повече от 90 ( 180 за информационни ислуги )дни. Грешката, която се връща в случай, че е необходима допълнителна аутентикация с "Временен SMS код" е EAUTH_REQ_OTP, а в случай на необходимо потрърждение в приложението на ePay.bg - PENDING_APP_CONFIRM . Ако потребителят е регистриран за "Временен SMS код" от него ще се изисква да въведе получения смс код, който да пристигне в параметър "CODE" със следващата заявка или да потвърди действието в приложението на ePay.bg ( със сканиране на QR код или отговаряйки на нотификаця в приложението )




Инвалидиране на TOKEN
След тази заявка токенът се деактивира и потребителят няма да може да използва приложението.
GET API_BASE/psd2/token/invalidate APPID,DEVICEID,TOKEN

Информация за платежни сметки, наличност и движения



Информация за платежни сметки
GET API_BASE/psd2/accounts с параметри APPID,DEVICEID,TOKEN,CODE - SMS код, в случай че действието се нуждае от SCA, може да се пропусне в противен случай.
Примерна заявка: https://demo.epay.bg/xdev/api/psd2/accounts?APPID=appid&DEVICEID=deviceid&TOKEN=token
Отговор:

{
    "status":"OK",
    "accounts":[
        {
            "name":"Микросметка",
            "id":"UsYGw8-pTlZU4DJOAYT919QVd1EXm2KQ8iD9-2Mr-dQ",
            "currency":"BGN",
            "iban":"BG61ESPY40040014867982"
        }
    ]
}

Или в случай на грешка
{
    	"status":"ERR",
	"err":"EAUTH_REQ_OTP",
	"errm": "Моля, въведете sms код"
}
,
{
    	"status":"ERR",
	"err":"PENDING_APP_CONFIRM",
	"errm": "Моля, потвърдете действието в приложението ePay.bg"
}

Описание на параметрите на отговора
ID String, Идентификатор на платежния инструмент (подава се при плащане с него)
IBAN String, IBAN на сметката
NAME, String, Име на платежния инструмент (въведено от потребителя)




Информация за наличност по платежна сметка
Използва се ID на платежната сметка, което е получено в отговор на заявката за информация за платежни средства.
GET API_BASE/psd2/accounts/balance APPID,DEVICEID,TOKEN,CODE ( при необходимост от SCA ), ACCOUNT
Примерна заявка:
GET API_BASE/psd2/accounts/balance?ACCOUNT=microaccount_id&APPID=appid&DEVICEID=deviceid&TOKEN=token&ACCOUNT=accountid
Отговор:
{
    "status":"OK",
	"accounts": { "UsYGw8-pTlZU4DJOAYT919QVd1EXm2KQ8iD9-2Mr-dQ" : {
			"status":"OK",
			"id":"UsYGw8-pTlZU4DJOAYT919QVd1EXm2KQ8iD9-2Mr-dQ",
			"balance":"6.68",
			"currency":"BGN",
			"name":"Микросметка",
            "balanceType": "interimAvailable"
	    }
	}
}

Или в случай на грешка
{
    	"status":"ERR",
	"err":"EAUTH_REQ_OTP",
	"errm": "Моля, въведете sms код"
}
или
{
    	"status":"ERR",
	"err":"PENDING_APP_CONFIRM",
	"errm": "Моля, потвърдете действието в приложението ePay.bg"
}

Описание на параметрите на отговора
ID String , Идентификатор на платежния инструмент (подава се при плащане с него)
BALANCE , String , Сума в лв.
NAME String ,Име на платежния инструмент (въведено от потребителя)




Информация за наличности по платежна сметка
Използва се ID на платежната сметка, което е получено в отговор на заявката за информация за платежни средства.
GET API_BASE/psd2/accounts/balances APPID,DEVICEID,TOKEN,CODE ( при необходимост от SCA ), ACCOUNT
Примерна заявка:
GET API_BASE/psd2/accounts/balances?ACCOUNT=microaccount_id&APPID=appid&DEVICEID=deviceid&TOKEN=token&ACCOUNT=accountid
Отговор:
{
    "status":"OK",
	"balances": [ 
        {   
            "balancetype": "interimAvailable",
			"balanceamount": {
                "amount":"6.68",
                "currency":"BGN"
            }
	    }
	]
}

Или в случай на грешка
{
    	"status":"ERR",
	"err":"EAUTH_REQ_OTP",
	"errm": "Моля, въведете sms код"
}
или
{
    	"status":"ERR",
	"err":"PENDING_APP_CONFIRM",
	"errm": "Моля, потвърдете действието в приложението ePay.bg"
}

Описание на параметрите на отговора
balancetype: String , тип
amount - String , Сума
currency - String ,Валута




Получаване на информация за движения по платежна сметка
GET API_BASE/psd2/history с APPID,DEVICEID,TOKEN,CODE ( при необходимост от SCA ), ACCOUNT, DATE_FROM (Начална дата unix timestamp, до 90 дни преди настоящия момент), DATE_TO( Крайна дата unix timestamp) , LIMIT ( Int , Брой на движенията в отговора, 20 по подразбиране) , OFFSET ( Int, Брой на движенията, които да бъдат пропуснати.)
Сортирането е по дата в обратен ред, ( Последните по дата се връщат първо)
Отговор:
{
    "history":[
        {
            "status":"booked",
            "descr":"Вносна бележка: test na vn-bel",
            "account_name":"Микросметка",
            "sum_c":"",
            "longdescr":"ВНОСНА БЕЛЕЖКА\n------------------------------------------------------------\nДата      13.11.2014\nВ полза на           Тестов Потребител\nIBAN                 BG86PRCB03271155173630\nОбщо                 100.80 BGN\n",
            "account":"UsYGw8-pTlZU4DJOAYT919QVd1EXm2KQ8iD9-2Mr-dQ",
            "corr":"Тестов Потребител",
            "sum_d":"119.54",
            "id":"UsYGw8-pTlZU4DJOAYT919upmSriA_z9P8PBePgJ1UI",
            "dat":1415878489,
            "no":"2000000000019592",
            "corr_account_type": "cin",
            "corr_account": "3394619971"
        }
    ],
    "status":"OK"
}

ID String ID на операцията
DAT Integer Дата на движението в Unix time
NO String Референция на ePay.bg за движението (такса при плащане има същата референция)
SUM_C String Сума приход в лв
SUM_D String Сума разход в лв
DESCR String Кратко описание
ACCOUNT String ID на платежния инструмент
ACCOUNT_NAME String Име на платежния инструмент
LONGDESCR String Подробно описание на плащането
CORR String Видимо име на кореспондента (може да е e-mail, телефон, КИН, име или комбинация от тях)
CORR_ACCOUNT String - идентификатор на кореспондента
CORR_ACCOUNT_TYPE String - тип на идентификатора на кореспонедента - cin(клиентски номер),iban(номер на сметка),pos(идентификатор на терминал), uic (ЕГН или номер на лична карта на клиента)
STATUS - String, "booked" for finalized or "pending"




Услуги за иницииране на плащания /PIS, Payment initiation services /

Изпращане на кредитен превод от платежна сметка към IBAN


EasyPSD дава възможност на крайните потребители в интерфейса на ДПУ да наредят кредитен превод от сметката си в ePay.bg към произволен IBAN на физическо или юридическо лице в българска банка. В заявката се подава необхосимата информация за изпълнението на вносна бележка. Таксата за превода се удържа от сметката преди изтеглянето.
Плащането се осъществява на три стъпки:
Резултат от плащането може да се провери с заявка


Получаване на идентификатор за плащането
Идентификаторът ID, получен от тази заявка служи за последващите действия по обработка и извършване на превода , както и за проверка на статус.
POST API_BASE/psd2/send/init с APPID,DEVICEID,TOKEN,CODE ( при необходимост от SCA )
Резултат:

{
    "payment":{
        "id":"String"
    },
    "status":"String"
}




Проверка на входящи параметри.
Тази заявка трябва да се направи преди нареждане на превода, когато потребителят е въвел данни за него. В отговора се връщат таксите за плащането, ако са въведени необходимите данни.
POST заявка на API_BASE/psd2/send/check, съдържаща: APPID,DEVICEID,TOKEN,CODE ( при необходимост от SCA ) , ID ( от API_BASE/payment/init ), ACCOUNT ( ID на платежен инструмент от /psd2/accounts ) , IBAN_POL ( IBAN на получателя) , AMOUNT ( сума на превода в лв.) , NAME_POL ( име на получателя) , DESCR ( основание за превода)
Ако плащането е към бюджета се изискват други данни като
NAME_ZL - име на задълженото лице, ZL_ID_DATA - egn or bulstat or lnc, ZL_ID_TYPE = 1 ( EGN) ,2 (BULSTAT) ,3 (LNC) DOC_NO, DOC_DAT, DAT_B, DAT_E, PAY_TYPE_POL
Отговор:

{
    "payment":{
        "id":"String",
        "tax":"String",
        "total":"String"
    },
    "status":"ОК"
}
В случай, че е необходима декларация за произход на средствата в отговора присъства елемент declaration_required със стойност 1 , който указва, че потребителят трябва да уточни произхода на средствата - например "търговска дейност", "трудова дейност", "спестявания" , "други" Това става направо в заявката за "Изпълнение на паричен превод", като данните за произход на средствата се изпращат като текст с параметър "DECLARATION"
{
    "payment":{
        "id":"String",
        "tax":"String",
        "total":"String"
    },
    "declaraion_required": 1,
    "status":"ОК"
}

Или в случай на грешка
{
    	"status":"ERR",
	"err":"EAUTH_REQ_OTP",
	"errm": "Моля, въведете sms код"
}
,
{
    	"status":"ERR",
	"err":"PENDING_APP_CONFIRM",
	"errm": "Моля, потвърдете действието в приложението ePay.bg"
}
В този случай се изисква потвърждение от приложението, което трябва да е направено преди изпълнение на паричен превод с  POST на API_BASE/psd2/send/pay. Това може да се провери като се изпрати отново заявка за проверка .




Изпълнение на паричен превод по IBAN
Тази заявка трябва да бъде потвърдена с "Временен SMS код" или приложението на ePay.bg
POST API_BASE/psd2/send/pay съдържаща: APPID,DEVICEID,TOKEN,CODE , ID ( от API_BASE/psd2/send/init ), ACCOUNT ( ID на платежен инструмент от /psd2/accounts ) , IBAN_POL ( IBAN на получателя) , AMOUNT ( сума на превода в лв.) , NAME_POL ( име на получателя) , DESCR ( основание за превода)
CODE се попълва когато потребителят използва "Временен SMS код" и е върната грешка EAUTH_REQ_OTP . Ако потребителят не използва "Временен SMS код" трябва да потвърди това действие с ePay.bg приложението.
DECLARATION="string" се попълва с текст, изясняващ произхода на средствата, когато при проверка е върнат "declaration_required":1 или при изпълнение на паричен превод по IBAN, когато е върната грешка DECLARATION_REQUIRED .
Отговор:

{
   "status":"ОК"
}
или
{
   "status": "ERR", "err" : "EAUTH_REQ_OTP", "errm": "Моля въведете смс код"
}

В случай, че е необходимо потвърждение в приложението
{
    	"status":"ERR",
	"err":"PENDING_APP_CONFIRM",
	"errm": "Моля, потвърдете действието в приложението ePay.bg"
}
Ако получавате горната грешка на заявка за извършване на превод ВAPI_BASE/psd2/send/pay значи, че действието все още не е потвърдено в приложението и трябва да се пусне отново същата заявка, докато не получите ОК или друга грешка, различна от PENDING_APP_CONFIRM
Ако искате да знаете дали вече има потвърждение в приложението може да се пусне заявка за проверка  на /API_BASE/psd2/send/check , ако вече е потвърдено, няма да получавате грешка  "PENDING_APP_CONFIRM"



В случай, че е необходима декларация за произход на средствата се получава отговор

{
 "status"   : "ERR', "err"  : "DECLARATION_REQUIRED" 
}
Потребителят трябва да уточни произхода на средствата и той да бъде изпратен в параметър "DECLARATION" - например "търговска дейност", "трудова дейност", "спестявания" , "други"




Проверка на резултата от заявката превод по IBAN
POST API_BASE/psd2/send/state, съдържаща APPID,DEVICEID,TOKEN,CODE ,ID
В отговора в поле state се съдържа резултата от плащането. Може да бъде 2 -Успешно плащане, всички други - неуспешно или обработващо се . В полето state.name се съдържа информация, която може да бъде показана на потребителя.
Отговор:

{
    "status":"OK",
    "payment":{
        "state":4,
        "state.name":"Неуспешно плащане(Невалидни данни. (514))"
    }
}






Потвърждаване на наличност на средства /CF, Confirmation of funds/

GET API_BASE/psd2/accounts/avail с параметри APPID,DEVICEID,TOKEN,ACCOUNT,AMOUNT
Отговор:
{
	"status":"OK"
}

Актуална версия на документацията е налична на адрес: https://www.easypay.bg/site/?p=psd2_doc

© Изипей АД 2006 - 2024. Всички права запазени.