Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Самостоятельная интеграция способа оплаты привязанной к устройству Android банковской карты Данная инструкция описывает самостоятельную интеграцию способа оплаты, которая заключается в размещении кнопки Google Pay на сайте Вашего магазина . Если вы используете Мерчант IntellectMoney , то кнопка Google Pay уже включена для ваших плательщиков, никаких дополнительных действий не требуетсяи регистрации и верификации Вашего мерчанта в Google. Ознакомиться с условиями оказания услуг Google Pay вы можете по адресу https://pay.google.com/about/terms/

Требования

  • В личном кабинете следует включить способ "Google Pay" у магазина, на сайте которого планируется разместить кнопку Google Pay
  • Ваш сайт должен работать только по схеме HTTPS и поддерживать протокол TLS версии не ниже 1.2

Регистрация Merchant ID в Google

Пройдите регистрацию, заполнив форму. Выберите "Gateway" в качестве "Tokenization Method". В "Payment Processor or Gateway" укажите "intellectmoney". Выберите "Web" для "Integration Platform Type".

Реализация

Вы самостоятельно реализуете клиентскую и серверную части на своем сайте. На серверной части следует вызвать метод IntellectMoney Google Pay API "Pay". Используйте официальную документацию разработчика Google https://developers.google.com/pay/api/web/guides/tutorial , а также гайдлайны фирменного стиля Google https://developers.google.com/pay/api/web/guides/brand-guidelines .

Клиентская часть

Пример кода. Ajax запрос (/GooglePay/Payment) должен отправляться к скрипту, расположенному на вашем сервере.

Code Block
languagexml
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="/js/googlepay.js"></script>
<script async src="https://pay.google.com/gp/p/js/pay.js" onload="onGooglePayLoaded()"></script>
<script>
	var googlePayAmount = "10.00";
	var googlePayCurrency = "RUB";
</script>
<div id="google-pay-button" style="padding: 50px;" />

Используйте следующие параметры:

  • gateway: "intellectmoney"
  • merchantId: идентификатор, зарегистрированный в Google
  • gatewayMerchantId: идентификатор магазина, зарегистрированный в IntellectMoney
Code Block
languagejs
titlegooglepay.js
const baseRequest = { apiVersion: 2, apiVersionMinor: 0 }; const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"]; const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"]; const cardPaymentMethodType = 'CARD'; let paymentsClient = null; function getGoogleIsReadyToPayRequest() { return Object.assign( {}, baseRequest, { allowedPaymentMethods: [ { type: cardPaymentMethodType, parameters: {

Использование Мерчанта IntellectMoney (Hosted Checkout)

Вы можете использовать Мерчант IntellectMoney (см, например, переход с формы на https://merchant.intellectmoney.ru), который предоставляет способ оплаты Google Pay для ваших плательщиков и не требует размещения кнопки на вашем сайте. Необходимое условие: способ должен быть включен в настройках Вашего магазина в личном кабинете. Выполнение дальнейших инструкций не требуется.

Условия использования Google Pay™

Все магазины, использующие технологию Google Pay™ либо на сайте магазина, либо на мерчанте IntellectMoney (Hosted Checkout), должны соблюдать политику использования Google Pay API и принять условия предоставления услуг Google Pay API

Требования

  • В личном кабинете следует включить способ "Google Pay" у магазина, на сайте которого планируется разместить кнопку Google Pay
  • Ваш сайт должен работать только по схеме HTTPS и поддерживать протокол TLS версии не ниже 1.2

Регистрация Merchant ID в Google

Пройдите регистрацию, заполнив форму. Выберите "Gateway" в качестве "Tokenization Method". В "Payment Processor or Gateway" укажите "intellectmoney". В качестве "Integration Platform Type" выберите "Web" для реализации на сайте или "Android" для реализации в мобильном приложении.

Реализация на сайте

Вы самостоятельно реализуете клиентскую и серверную части на своем сайте. На серверной части следует вызвать метод IntellectMoney Google Pay API "Pay". Используйте официальную документацию разработчика Google https://developers.google.com/pay/api/web, см. также гайдлайны фирменного стиля Google https://developers.google.com/pay/api/web/guides/brand-guidelines и чек-лист интеграции https://developers.google.com/pay/api/web/guides/test-and-deploy/integration-checklist.

Клиентская часть

Пример кода. Ajax запрос (/GooglePay/Payment) должен отправляться к скрипту, расположенному на вашем сервере.

Code Block
languagexml
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="/js/googlepay.js"></script>
<script async src="https://pay.google.com/gp/p/js/pay.js" onload="onGooglePayLoaded()"></script>
<script>
	var googlePayAmount = "10.00";
	var googlePayCurrency = "RUB";
</script>
<div id="google-pay-button" style="padding: 50px;" />

Используйте следующие параметры:

  • gateway: "intellectmoney"
  • merchantId: идентификатор, зарегистрированный в Google
  • gatewayMerchantId: идентификатор магазина, зарегистрированный в IntellectMoney
  • поддерживаемые типы карт allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"]
  • поддерживаемые режимы аутентификации allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"];
Code Block
languagejs
titlegooglepay.js
const baseRequest = {
    apiVersion: 2,
    apiVersionMinor: 0
};

const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"];
const allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"];
const cardPaymentMethodType = 'CARD';
let paymentsClient = null;

function getGoogleIsReadyToPayRequest() {
    return Object.assign(
        {},
        baseRequest,
allowedAuthMethods: allowedCardAuthMethods,       {
            allowedPaymentMethods: [
   allowedCardNetworks: allowedCardNetworks            {
        }            type: cardPaymentMethodType,
   }             ]    parameters: {
     }     ); }  function getGooglePaymentsClient() {     if (paymentsClient === null) {allowedAuthMethods: allowedCardAuthMethods,
       paymentsClient = new google.payments.api.PaymentsClient({ environment: 'PRODUCTION' });           }    allowedCardNetworks: returnallowedCardNetworks
paymentsClient; }  function onGooglePayLoaded() {     const paymentsClient = getGooglePaymentsClient();     paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest())  }
      .then(function (response) {        }
    if (response.result) {      ]
        }
 addGooglePayButton();   );
}

function getGooglePaymentsClient() {
    }if (paymentsClient === null) {
    })    paymentsClient =    .catch(function (err) {
new google.payments.api.PaymentsClient({ environment: 'PRODUCTION' });
    }
    return  // show error in developer console for debuggingpaymentsClient;
}

function onGooglePayLoaded() {
    const paymentsClient = getGooglePaymentsClient();
      console.error(err);paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest())
        });
}

.then(function addGooglePayButton(response) {
    const paymentsClient = getGooglePaymentsClient();     const button = paymentsClient.createButton({ onClick: onGooglePaymentButtonClicked });
if (response.result) {
   document.getElementById('google-pay-button').appendChild(button); }  function onGooglePaymentButtonClicked() {     const paymentDataRequest = Object.assignaddGooglePayButton();
        {},    }
    baseRequest,    })
    {    .catch(function (err) {
      merchantInfo: {     // show error in developer console for debugging
    merchantId: '12345678901234567890' //идентификатор, зарегистрированный в Google   console.error(err);
        });
},

function addGooglePayButton() {
    const paymentsClient = getGooglePaymentsClient();
allowedPaymentMethods: [   const button = paymentsClient.createButton({ onClick: onGooglePaymentButtonClicked });
    document.getElementById('google-pay-button').appendChild(button);
}

{function onGooglePaymentButtonClicked() {
    const paymentDataRequest = Object.assign(
          type: cardPaymentMethodType{},
        baseRequest,
        {
  parameters: {         merchantInfo: {
                allowedAuthMethodsmerchantId: allowedCardAuthMethods'12345678901234567890' //идентификатор, зарегистрированный в Google
            },
        allowedCardNetworks: allowedCardNetworks   allowedPaymentMethods: [
                },{
                    tokenizationSpecificationtype: cardPaymentMethodType,
{                    parameters: {
   type: "PAYMENT_GATEWAY",                    allowedAuthMethods: allowedCardAuthMethods,
   parameters: {                    allowedCardNetworks: allowedCardNetworks
       gateway: "intellectmoney",            },
                gatewayMerchantId: "432143" //идентификатор магазина, зарегистрированныйtokenizationSpecification: в{
IntellectMoney                         }type: "PAYMENT_GATEWAY",
                    }    parameters: {
           }             ],    gateway: "intellectmoney",
       transactionInfo: {
                totalPriceStatus: 'FINAL',   gatewayMerchantId: "432143" //идентификатор магазина, зарегистрированный в IntellectMoney
       totalPrice: googlePayAmount,                }
countryCode: 'RU',                 currencyCode: googlePayCurrency }
           }     }
   }     );    ],
 const paymentsClient = getGooglePaymentsClient();     paymentsClient.loadPaymentData(paymentDataRequest)   transactionInfo: {
    .then(function (paymentData) {          totalPriceStatus: 'FINAL',
 processPayment(paymentData);            })   totalPrice: googlePayAmount,
    .catch(function (err) {          countryCode: 'RU',
 // show error in developer console for debugging        currencyCode: googlePayCurrency
   console.error(err);         });
}  function processPayment(paymentData) {     console.log(paymentData}
    );

   var status const paymentsClient = getGooglePaymentsClient();
    $paymentsClient.ajaxloadPaymentData({paymentDataRequest)
        cache: false,.then(function (paymentData) {
        dataType: "json",   processPayment(paymentData);
     type: "post",  })
      url: "/GooglePay/Payment",
   .catch(function (err) {
     data: "paymentTokenDataJson=" + encodeURIComponent(JSON.stringify(paymentData.paymentMethodData.tokenizationData.token)),    // show error in developer complete:console functionfor (data)debugging
{             status = 'complete'console.error(err);
        });
}

function if (data.Result.OperationIdprocessPayment(paymentData) {
    console.log(paymentData);
    var status;
    $.ajax({
// check payment processing state via getBankCardPaymentState  cache: false,
         }dataType: "json",
        }type: "post",
        url: "/GooglePay/Payment",
        errordata: function (e) {
  "paymentTokenDataJson=" + encodeURIComponent(JSON.stringify(paymentData.paymentMethodData.tokenizationData.token)),
        complete: function (data) {
            status = 'complete';
            if (data.Result.OperationId) {
                // check payment processing state via getBankCardPaymentState
            }
        },
        error: function (e) {
            status = 'error';
        },
        success: function (e) {
            status = 'success';
        }
    });
}

Если вы все сделали правильно, то у вас на сайте появится кнопка "Оплатить через G Pay"


Column
width100%


G pay



Серверная часть

Скрипт payment на вашем сервере должен либо создать инвойс в системе IntellectMoney (метод createInvoice()), либо использовать существующий.


Info
titleДоступ к API

При обращении ко всем методам API следует прикладывать SSL-сертификат, см. Получение доступа к API

Скрипт на вашем сервере должен отправить POST-запрос на следующий адрес URL:

https://api.intellectmoney.ru/merchant/latest/googlepay/pay

В запросе необходимо передать следующие параметры:

Название

Имя параметра

Обязательный

Описание

Номер СКО

invoiceId

Да

Счёт К Оплате - уникальный номер в системе IntellectMoney, с помощью которого идентифицируется любой платеж. Для получения воспользуйтесь операцией “ Запрос выставления счета

Адрес успешной авторизации

returnUrl

Да

Адрес, на который перенаправляет плательщика после успешной 3DS-авторизации
IP адрес плательщикаipAddressДаIP адрес плательщика
Криптограмма платежных данныхpaymentTokenDataJsonДаКриптограмма платежных данных, полученная из Google Pay API


Code Block
languagepowershell
themeConfluence
titleПример запроса
linenumberstrue
collapsetrue
Post /merchant/latest/googlepay/pay
HTTP/1.1 Host: api.intellectmoney.ru
Content-Type: application/x-www-form-urlencoded; charset=utf-8

invoiceId = 3496318551
returnUrl = https://mysite.com/returnUrl
ipAddress = 10.10.10.10
paymentTokenDataJson = {"signature":"MEUCIZ29vZ2xlIHBheSBkZWNvZGVkIHNpZ25hdHVyZSBkYXRhIChiaW5hcn...", ... }


Code Block
languagexml
themeConfluence
titleПример ответа
linenumberstrue
collapsetrue
<Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<OperationState> 
		<Code>0</Code> 
		<Desc>Успешно обработана</Desc> 
	</OperationState> 
	<OperationId>b294b231-9a77-427a-9866-f111e4c88515</OperationId> 
	<EshopId>0</EshopId> 
	<Result> 
		<State> 
			<Code>0</Code> 
			<Desc>Успешно обработан.</Desc> 
		</State>
		<OperationId>Идентификатор платежа</OperationId>
	</Result>
</Response> 

Успешный ответ означает, что платеж поставлен в очередь на обработку.

Статус обработки платежа в системе IntellectMoney можно проверять методом getBankCardPaymentState()

Реализация в мобильном приложении

Вы самостоятельно реализуете приложение Android, получаете объект PaymentData и передаете платежный токен в метод IntellectMoney Google Pay API "Pay". Используйте официальную документацию разработчика Google https://developers.google.com/pay/api/android/, см. также гайдлайны фирменного стиля Google https://developers.google.com/pay/api/android/guides/brand-guidelines и чек-лист интеграции https://developers.google.com/pay/api/android/guides/test-and-deploy/integration-checklist.

Используйте пример использования Google Pay API от Google https://github.com/google-pay/android-quickstart

Используйте следующие параметры:

  • gateway: "intellectmoney"
  • gatewayMerchantId: идентификатор магазина, зарегистрированный в IntellectMoney

    Code Block
    languagejava
    titleKotlin
    private fun gatewayTokenizationSpecification(): JSONObject {
        return JSONObject().apply {
            put("type", "PAYMENT_GATEWAY")
            put("parameters", JSONObject(mapOf(
                    "intellectmoney",
                    "eshopId")))
        }
    }


  • поддерживаемые типы карт allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"]
  • поддерживаемые режимы аутентификации allowedCardAuthMethods = ["PAN_ONLY", "CRYPTOGRAM_3DS"];

    Code Block
    languagejava
    titleKotlin
    private val allowedCardNetworks = JSONArray(listOf(
            "AMEX",
    
status
  •  
=
  •  
'error';
  •       
}
  • "DISCOVER",
            
success: function (e) {
  • "INTERAC",
            "JCB",
          
status
  •  
= 'success';
  •  "MASTERCARD",
            
}
  • "VISA"))
    
    private val allowedCardAuthMethods 
}); }

Если вы все сделали правильно, то у вас на сайте появится кнопка "Оплатить через G Pay"

Column
width100%
G pay

Серверная часть

Скрипт payment на вашем сервере должен либо создать инвойс в системе IntellectMoney (метод createInvoice()), либо использовать существующий.

Info
titleДоступ к API

При обращении ко всем методам API следует прикладывать SSL-сертификат, см. Получение доступа к API

Скрипт на вашем сервере должен отправить POST-запрос
  • = JSONArray(listOf(
            "PAN_ONLY",
            "CRYPTOGRAM_3DS"))


Полученный в приложении платежный токен paymentData.getPaymentMethodToken().getToken() следует отправить POST-запросом на следующий адрес URL:

https://api.intellectmoney.ru/merchant/latest/googlepay/pay

В запросе необходимо передать следующие параметры:

Название

Имя параметра

Обязательный

Описание

Номер СКО

invoiceId

Да

Счёт К Оплате - уникальный номер в системе IntellectMoney, с помощью которого идентифицируется любой платеж. Для получения воспользуйтесь операцией “ Запрос выставления счета

Адрес успешной авторизации

returnUrl

Да

Адрес, на который перенаправляет плательщика после успешной 3DS-авторизации
IP адрес плательщикаipAddressДаIP адрес плательщика
Криптограмма платежных данныхpaymentTokenDataJsonДаКриптограмма платежных данных, полученная из Google Pay API


Code Block
languagepowershell
themeConfluence
titleПример запроса
linenumberstrue
collapsetrue
Post /merchant/latest/googlepay/pay
HTTP/1.1 Host: api.intellectmoney.ru
Content-Type: application/x-www-form-urlencoded; charset=utf-8

invoiceId = 3496318551
returnUrl = https://mysite.com/returnUrl
ipAddress = 10.10.10.10
paymentTokenDataJson = {"signature":"MEUCIZ29vZ2xlIHBheSBkZWNvZGVkIHNpZ25hdHVyZSBkYXRhIChiaW5hcn...", ... }


Code Block
languagexml
themeConfluence
titleПример ответа
linenumberstrue
collapsetrue
<Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<OperationState> 
		<Code>0</Code> 
		<Desc>Успешно обработана</Desc> 
	</OperationState> 
	<OperationId>b294b231-9a77-427a-9866-f111e4c88515</OperationId> 
	<EshopId>0</EshopId> 
	<Result> 
		<State> 
			<Code>0</Code> 
			<Desc>Успешно обработан.</Desc> 
		</State>
		<OperationId>Идентификатор платежа</OperationId>
	</Result>
</Response> 

Успешный ответ означает, что платеж поставлен в очередь на обработку.

Статус обработки платежа в системе IntellectMoney можно проверять методом getBankCardPaymentState()
</Result>
</Response> 

Успешный ответ означает, что платеж поставлен в очередь на обработку.

Статус обработки платежа в системе IntellectMoney можно проверять методом getBankCardPaymentState()

Info
titleДоступ к API

При обращении ко всем методам API следует прикладывать SSL-сертификат, см. Получение доступа к API

Сценарий 3DS-аутентификации

Для нетокенизированных карт (метод аутентификации PAN_ONLY) может потребоваться дополнительная 3ds-аутентификации. Сценарий обработки следующий:

  • Если запрос проверки статуса платежа getBankCardPaymentState() вернет статус платежа PaymentStep=3, то плательщику следует отобразить форму (свойство Form3DS)
  • После прохождения 3ds-аутентификации опционально можно дожидаться успешного завершения платежа PaymentStep=0, либо обрабатывать уведомления, поступающие на resultUrl

Table of Contents