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

Пройдите регистрацию, заполнив форму.

После получения Merchant ID, отправьте к нам на почту ts@intellectmoney.ru запрос на получение gatewayMerchantId.

Реализация

Вы самостоятельно реализуете клиентскую и серверную части на своем сайте. На серверной части следует вызвать метод 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: идентификатор, зарегистрированный

    Использование Мерчанта 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
    Code Block
    • поддерживаемые типы карт 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,
            {
                allowedPaymentMethods: [
                    {
                        type: cardPaymentMethodType,
                        parameters: {
                            allowedAuthMethods: allowedCardAuthMethods,
                            allowedCardNetworks: allowedCardNetworks
                        }
                    }
                ]
            }
        );
    }
    
    function getGooglePaymentsClient() {
        if (paymentsClient === null) {
            paymentsClient = new google.payments.api.PaymentsClient({ environment: 'PRODUCTION' });
        }
        return paymentsClient;
    }
    
    function onGooglePayLoaded() {
        const paymentsClient = getGooglePaymentsClient();
        paymentsClient.isReadyToPay(getGoogleIsReadyToPayRequest())
            .then(function (response) {
                if (response.result) {
                    addGooglePayButton();
                }
            })
            .catch(function (err) {
                // show error in developer console for debugging
                console.error(err);
            });
    }
    
    function addGooglePayButton() {
        const paymentsClient = getGooglePaymentsClient();
        const button = paymentsClient.createButton({ onClick: onGooglePaymentButtonClicked });
        document.getElementById('google-pay-button').appendChild(button);
    }
    
    function onGooglePaymentButtonClicked() {
        const paymentDataRequest = Object.assign(
            {},
            baseRequest,
            {
                merchantInfo: {
                    merchantId: '12345678901234567890' //идентификатор, зарегистрированный в Google
                },
                allowedPaymentMethods: [
                    {
                        type: cardPaymentMethodType,
                        parameters: {
                            allowedAuthMethods: allowedCardAuthMethods,
                            allowedCardNetworks: allowedCardNetworks
                        },
                        tokenizationSpecification: {
                            type: "PAYMENT_GATEWAY",
                            parameters: {
                                gateway: "intellectmoney",
                                gatewayMerchantId: "432143" //идентификатор магазина, зарегистрированный в IntellectMoney
                            }
                        }
                    }
                ],
                transactionInfo: {
                    totalPriceStatus: 'FINAL',
                    totalPrice: googlePayAmount,
                    countryCode: 'RU',
                    currencyCode: googlePayCurrency
                }
            }
        );
    
        const paymentsClient = getGooglePaymentsClient();
        paymentsClient.loadPaymentData(paymentDataRequest)
            .then(function (paymentData) {
                processPayment(paymentData);
            })
            .catch(function (err) {
                // show error in developer console for debugging
                console.error(err);
            });
    }
    
    function processPayment(paymentData) {
        console.log(paymentData);
        var status;
        $.ajax({
            cache: false,
            dataType: "json",
            type: "post",
            url: googlePayApiProcessUrl + "/GooglePay/Payment",
            data: "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() очередь на обработку.

    Статус обработки платежа в системе 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",
              "DISCOVER",
              "INTERAC",
              "JCB",
              "MASTERCARD",
              "VISA"))
      
      private val allowedCardAuthMethods = 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()

    Info
    titleДоступ к API

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

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

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

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

    Table of Contents