Интеграция API

Ниже приведена процедура интеграции API платежного сервиса, с учетом того, что имеется токен авторизации информации (authorizationId), полученный через 3DS Authentication TMSПоля и параметры, указанные в данном руководстве, являются обязательными значениями

Проверка клиента (Credential)

Оплату (подтверждение и другие сервисы) можно использовать только после отправки запроса Payment Service, указав в заголовке authorizationId, полученный после успешного прохождения 3DS Аутентификации, и данные, которые были возращены после успешного прохождения проверки клиента.

Запрос кода подтверждения (Request Authentication Code)
  • Live Request URL : GEThttps:/pay.opt-pay.com/authorize
  • Test Request URL : GEThttps:/test-pay.opt-pay.com/authorize
Sample Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import axios from "axios" class Api extends React.Component {     const handleSubmit = async ( ) => {         try {             const response = await axios.get("https:/test-pay.opt-pay.com/authorize", {                 headers: {                   'Content-type': "application/json",                   'clientCode': "clientCode",                   'clientSecret': "clientSecret"                 }             }             console.log(response);         } catch(e){             console.error(e);         }     render() {         (...)     );
Request Header
HeaderTypeDescription
clientCodeStringПредоставленный код клиента
clientSecretStringПредоставленный пароль клиента
Response Data
HeaderTypeDescription
AuthorizationStringКод подтверждения клиента

Запрос на оплату (Payment Request)

Служба, которая проверяет личность клиента перед оплатой, и только подтвержденный клиент может использовать платежную службу. Проверка должна обрабатываться через браузер, и результат будет отправлен в CallbackLocation отдельно, а страница процесса переместится на redirectUrl. Модуль не предоставляет пользовательский интерфейс.

URL
  • Live : POST https://pay.opt-pay.com/order/start
  • Test : POST https://test-pay.opt-pay.com/order/start
Content-Type

x-www-form-urlencoded

Подробное описание CallbackLocation

Это URL-адрес для получения окончательного результата после завершения платежа. Если у компании есть брандмауэр, вам необходимо разрешить Optatum Server IP 112.175.117.124 и порты 80, 443.

Предупреждение

Запрос должен быть сделан в форме отправки в веб-браузере. Пользовательский интерфейс для интеграции НЕ предоставляется Optatum, пользовательский интерфейс предоставляет компания.Запросы, отличные от отправки формы, не допускаются.

Sample Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <form method="post" action="https://test-pay.opt-pay.com/order/start">     <input type="text" name="merchantId" value="">     <input type="text" name="merchantReferenceCode" value="Payment Authenticate sample Test">     <input type="text" name="currency" value="USD">     <input type="text" name="cardAccountNumber" value="5200000000001096">     <input type="text" name="cardType" value="MASTER">     <input type="text" name="cardExpirationMonth" value="01">     <input type="text" name="cardExpirationYear" value="2023">     <input type="text" name="firstName" value="John">     <input type="text" name="lastName" value="Doe">     <input type="text" name="country" value="KR">     <input type="text" name="state" value="">     <input type="text" name="city" value="busan">     <input type="text" name="address" value="optatumbuilding, 61, Geumjeong-ro, Geumjeong-gu, Busan, Republic of Korea">     <input type="text" name="postalCode" value="46293">     <input type="text" name="phone" value="+8212341234">     <input type="text" name="email" value="test@test-email.com">     <input type="text" name="callbackLocation" value="">     <input type="text" name="redirectUrl" value="">     <input type="text" name="isWindowed" value="N">     <input type="text" name="isRedirect" value="N">     <input type="text" name="isAuthenticate" value="Y">     <input type="text" name="verifyId" value="">     <input type="text" name="authorization" value="">     <input type="text" name="amount" value="100">     <button type="submit">Submit</button> </form>
  • isRedirect : Y - В случае ошибки 3DS Аутентификации запускается Redirect / N(Основное значение) – В случае ошибки 3DS Аутентификации переход не осуществляется.
  • isWindowed : Y - Переход в новое окно подтверждения / N(Основное значение) – Переход на страницу подтверждения
  • isAuthenticate : Y(Основное значение) – Подтверждение платежа / N – Только подтверждение
Request Form Fields
FieldTypeDescription
merchantIdStringMID клиента
merchantReferenceCodeStringПоле для управления историей транзакций на стороне клиента
currencyStringКод валюты (см. ISO 4217, «3 цифры»)
cardAccountNumberNumberНомер карты TestEx) VISA 4000000000001091 MASTER 5200000000001096 JCB 3569960010083758
cardTypeStringЭмитент Ex) VISA, MASTER, JCB
cardExpirationMonthStringСрок действия карты (Месяц) Test Ex) 01
cardExpirationYearStringСрок действия карты (Год) Test Ex) Current Year + 3
firstNameStringФамилия держателя карты
lastNameStringИмя держателя карты
countryStringКод страны (см. ISO 3166-1 alpha-2, «2-значное»)
stateStringШтат (только в случае США и Канады)
cityStringГород
addressStringАдрес
postalCodeStringИндекс
phoneStringКонтакты клиента
emailStringАдрес электронной почты клиента
callbackLocationStringURL-адрес сервера для получения результатов URL-адрес должен заканчиваться на “/”.
redirectUrlStringURL-адрес, по которому нужно перейти после 3DS аутентификации. URL-адрес должен заканчиваться на “/”.
isWindowedStringВариант по умолчанию: Y (доступно только «Y» или «N») N: переход на страницу | Y: новое окно Вернуться назад, когда N Закрыть страницу, когда Y
isRedirectStringВариант по умолчанию: N (только «Y» или «N») Если Y, перенаправление выполняется даже в случае сбоя 3DS.
verifyIdStringПредоставленный код клиента
authorizationStringКод подтверждения клиента
isAuthenticateStringВариант по умолчанию: N (можно использовать только «Y» или «N») Если Y, выполняется подтверждение платежа.
Response Data
FieldTypeDescription
decisionStringЗначение результата (ПРИНЯТЬ / ОТКЛОНИТЬ)
reasonCodeStringКод результата / при успехе 100
transactionIdStringID транзакции
originalTransactionIdStringID исходной транзакции
Если платеж не подтвержден (isAuthenticated = «N»)
xidStringID транзакции 3DS MPI
eciStringЗначение результата 3DS аутентификации
commerceIndicatorStringЗначение результата 3DS аутентификации
cavvAlgorithmStringЗначение результата 3DS аутентификации
paresStatusStringЗначение результата 3DS аутентификации
paSpecificationVersionStringРезультат 3DS аутентификации (если есть)
directoryServerTransactionIDStringРезультат 3DS аутентификации (если есть)
cavvStringCavv, созданный эмитентом 3DS (Не применимо для MASTERCARD)
ucafCollectionIndicatorStringРезультаты 3DS сертификации (только MASTERCARD)
ucafAuthenticationDataStringРезультаты 3DS сертификации (только MASTERCARD)

Отмена подтверждения (Reverse), Запрос на покупку (Capture), Возврат (Refund)

URL
  • Отмена подтверждения Request URL : POST /reverse
  • Запрос на покупку Request URL : POST /capture
  • Возврат Request URL : POST /refund
Sample Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import axios from "axios" class Api extends React.Component {     const submitData = {         merchantId: "test_merchant_id",         merchantReferenceCode: "test_merchant_reference_code",         currency: "USD",         amount: "1",         email: "payment@optatumplatform.com",         originalTransactionId: "100000000000001"     };     const handleSubmit = async ( ) => {         try {             const response = await axios.post("https:/test-pay.opt-pay.com/[Request URL]", submitData, {                 headers: {                   'Content-type': "application/json",                   'verifyId': "verifyId",                   'Authorization': "Authorization"                 }             }             console.log(response);         } catch(e){             console.error(e);         }     render() {         (...)     );
Request Fields
FieldTypeDescription
merchantIdStringID клиента
merchantReferenceCodeStringКод для управления историей транзакций клиента
currencyStringКод валюты (ISO 4217, 3 цифры)
amountNumberСумма
emailStringАдрес электронной почты клиента
originalTransactionIdStringID оригинальной транзакции
Response Fields
FieldTypeDescription
decisionStringЗначение результата (ПРИНЯТЬ / ОТКЛОНИТЬ)
reasonCodeStringКод результата
transactionIdStringID Транзакции
originalTransactionIdStringID оригинальной транзакции

Недействительный (Void)

URL
  • Недействительный Request URL : POST /void
Sample Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import axios from "axios" class Api extends React.Component {     const submitData = {         merchantId: "test_merchant_id",         merchantReferenceCode: "test_merchant_reference_code",         currency: "USD",         amount: "1",         email: "payment@optatumplatform.com",         transactionId: "100000000000001",         type: "CAPTURE",     };     const handleSubmit = async ( ) => {         try {             const response = await axios.post("https:/test-pay.opt-pay.com/void", submitData, {                 headers: {                   'Content-type': "application/json",                   'verifyId': "verifyId",                   'Authorization': "Authorization"                 }             }             console.log(response);         } catch(e){             console.error(e);         }     render() {         (...)     );
Request Fields
FieldTypeDescription
merchantIdStringID клиента
merchantReferenceCodeStringКод для управления историей транзакций клиента
currencyStringКод валюты (ISO 4217, 3 цифры)
amountStringСумма
emailStringАдрес электронной почты клиента
transactionIdStringRequest ID
typeStringСтатус транзакции запроса TransactionId Должен быть ЗАХВАТ или ВОЗВРАТ
Response Fields
FieldTypeDescription
decisionStringЗначение результата (ПРИНЯТЬ / ОТКЛОНИТЬ)
reasonCodeStringКод результата
transactionIdStringID транзакции
originalTransactionIdStringID исходной транзакции

Получение платежа (Payment Retrieve)

URL
  • Live URL https://pay.opt-pay.com/payment/retrieve/[Merchant ID]/[Transaction ID]
  • Test URL https://test-pay.opt-pay.com/payment/retrieve/[Merchant ID]/[Transaction ID]
Sample Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import axios from "axios" class Api extends React.Component {     const handleSubmit = async ( ) => {         try {             const response = await axios.get("https:/test-pay.opt-pay.com/payment/retrieve/test_merchant_id/100000000000001", {                 headers: {                   'Content-type': "application/json",                   'verifyId': "verifyId",                   'Authorization': "Authorization"                 }             }             console.log(response);         } catch(e){             console.error(e);         }     render() {         (...)     );
Ответ на запрос истории транзакций
FieldTypeDescription
merchantReferenceCodeStringКод для управления историей транзакций клиента
transactionIdStringID транзакции
originalTransactionIdStringID исходной транзакции
stepStringОтдел запроса транзакции
reasonCodeStringКод причины
statusStringРезультат запроса (успешный / отклоненный / ошибка)
captureStatusStringСтатус услуги выплаты (только при выплате)
messageStringСообщение о результате
approvalCodeStringНомер разрешения
cardTypeStringЭмитент
currencyCodeStringКод валюты (ISO 4217, 3 цифры)
amountNumberСумма
cardPrefixStringЛицевой номер карты (кроме MASTERCARD)
cardSuffixStringномер на обороте карты
Запрос истории транзакций детали статуса платежа(CaptureStatus)
Status ValueTypeDescription
PENDINGStringThe authorization was captured, the credit request was successful, or the credit card transaction was captured, and the request was sent to the payment processor. The reply from the payment processor is pending.
TRANSMITTEDStringThe Capture/Credit request was successfully sent to the Processor.
VOIDEDStringThe request for the credit card capture, credit card credit, check debit, or check credit was successfully deleted. The authorization has not been deleted. You can see this transaction only on the search results page and in the exported search results.
TRXN_ERRORStringThere was an error processing this transaction at the Processor.

Reason Code

Детали ответа на запрос истории транзакций (reasonCode)
Reason CodeReply Flag (SCMP)Description
100SOKSuccessful transaction
101DMISSINGFIELDDeclined - The request is missing one or more fields
102DINVALIDDATADeclined - One or more fields in the request contains invalid data.
104DDUPLICATEDeclined - The merchantReferenceCode sent with this authorization request matches the merchantReferenceCode of another authorization request that you sent in the last 15 minutes.
110SPARTIALAPPROVALPartial amount was approved
150ESYSTEMError - General system failure.
151ETIMEOUTError - The request was received but there was a server timeout. This error does not include timeouts between the client and the server.
152ETIMEOUTError: The request was received, but a service did not finish running in time.
200DAVSNOSoft Decline - The authorization request was approved by the issuing bank but flagged by CyberSource because it did not pass the Address Verification Service (AVS) check.
201DCALLDecline - The issuing bank has questions about the request. You do not receive an authorization code programmatically, but you might receive one verbally by calling the processor.
202DCARDEXPIREDDecline - Expired card. You might also receive this if the expiration date you provided does not match the date the issuing bank has on file.
203DCARDREFUSEDDecline - General decline of the card. No other information provided by the issuing bank.
204DCARDREFUSEDDecline - Insufficient funds in the account.
205DCARDREFUSEDDecline - Stolen or lost card.
207DCARDREFUSEDDecline - Issuing bank unavailable.
208DCARDREFUSEDDecline - Inactive card or card not authorized for card-not-present transactions.
209DCARDREFUSEDDecline - card verification number (CVN) did not match.
210DCARDREFUSEDDecline - The card has reached the credit limit.
211DCARDREFUSEDDecline - Invalid Card Verification Number (CVN).
220DCHECKREFUSEDDecline - Generic Decline.
221DCHECKREFUSEDDecline - The customer matched an entry on the processor's negative file.
222DCHECKREFUSEDDecline - customer's account is frozen
230DCVSoft Decline - The authorization request was approved by the issuing bank but flagged by CyberSource because it did not pass the Card Verification Number (CVN) check.
231DINVALIDCARDDecline - Invalid account number
232DINVALIDDATADecline - The card type is not accepted by the payment processor.
233DINVALIDDATADecline - General decline by the processor.
234DINVALIDDATADecline - There is a problem with your merchant configuration.
235DINVALIDDATADecline - The requested amount exceeds the originally authorized amount. Occurs, for example, if you try to capture an amount larger than the original authorization amount.
236DINVALIDDATADecline - Processor failure.
237DINVALIDDATADecline - The authorization has already been reversed.
238DINVALIDDATADecline - The transaction has already been settled.
239DINVALIDDATADecline - The requested transaction amount must match the previous transaction amount.
240DINVALIDDATADecline - The card type sent is invalid or does not correlate with the credit card number.
241DINVALIDDATADecline - The referenced request id is invalid for all follow-on transactions.
242DNOAUTHDecline - The request ID is invalid. @@@@ You requested a capture, but there is no corresponding, unused authorization record. Occurs if there was not a previously successful authorization request or if the previously successful authorization has already been used in another capture request.
243DINVALIDDATADecline - The transaction has already been settled or reversed.
246DNOTVOIDABLEDecline - The capture or credit is not voidable because the capture or credit information has already been submitted to your processor. Or, you requested a void for a type of transaction that cannot be voided.
247DINVALIDDATADecline - You requested a credit for a capture that was previously voided.
248DBOLETODECLINEDDecline - The boleto request was declined by your processor.
250ETIMEOUTError - The request was received, but there was a timeout at the payment processor.
251DCARDREFUSEDDecline - The Pinless Debit card's use frequency or maximum amount per use has been exceeded.
254DINVALIDDATADecline - Account is prohibited from processing stand-alone refunds.
400DSCORESoft Decline - Fraud score exceeds threshold.
450DINVALIDADDRESSApartment number missing or not found.
451DINVALIDADDRESSInsufficient address information.
452DINVALIDADDRESSHouse/Box number not found on street.
453DINVALIDADDRESSMultiple address matches were found.
454DINVALIDADDRESSP.O. Box identifier not found or out of range.
455DINVALIDADDRESSRoute service identifier not found or out of range.
456DINVALIDADDRESSStreet name not found in Postal code.
457DINVALIDADDRESSPostal code not found in database.
458DINVALIDADDRESSUnable to verify or correct address.
459DINVALIDADDRESSMultiple address matches were found (international)
460DINVALIDADDRESSAddress match not found (no reason given)
461DINVALIDADDRESSUnsupported character set
475DAUTHENTICATEThe cardholder is enrolled in Payer Authentication. Please authenticate the cardholder before continuing with the transaction.
476DAUTHENTICATIONFAILEDEncountered a Payer Authentication problem. Payer could not be authenticated.
480DREVIEWThe order is marked for review by Decision Manager
481DREJECTThe order has been rejected by Decision Manager
490Your aggregator or acquirer is not accepting transactions from you at this time.
491Your aggregator or acquirer is not accepting this transaction.
520DSETTINGSSoft Decline - The authorization request was approved by the issuing bank but declined based on your Smart Authorization settings.
700DRESTRICTEDThe customer matched the Denied Parties List
701DRESTRICTEDExport bill_country/ship_country match
702DRESTRICTEDExport email_country match
703DRESTRICTEDExport hostname_country/ip_country match