Versions Compared

Key

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

Google Pay — это метод токенизации карточных данных плательщика, который позволяет ускорить и упростить оплату ваших товаров и услуг. В случае, если у плательщика добавлена карта в приложении Google Pay, он может оплачивать покупки, вводя не свои карточные данные, а используя кнопку “Покупка с Google Pay”.

Для проведения платежа достаточно передать полученные из Google Pay токенизированные карточные данные в IntellectMoney API, создать инвойс в Платформе и оплатить его с помощью токена IntellectMoney, который содержит в себе токен Google Pay. Таким образом, при оплате производится процесс двойной токенизации - Платформа IntellectMoney реализует в схожую бизнес-логику при проведении платежей, создавая на основе платежных данных токены, которые используются для запуска платежей.

Note

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

Пример интеграции кнопки “Pay with Google Pay”

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

В качестве параметров скрипта укажите:

доступные методы платежа

Code Block
languagejs
var allowedPaymentMethods = ['CARD', 'TOKENIZED_CARD'];

тип токенизации - PAYMENT_GATEWAY:

Code Block
languagejs
tokenizationType: 'PAYMENT_GATEWAY'

для тестового окружения укажите значения gateway как intellectmoney и gatewayMerchantId какintellectmoney-test:

Code Block
'gateway': 'intellectmoney',
'gatewayMerchantId': 'intellectmoney-test'

Note

Указанный gatewayMerchantId используется для тестов. Для получения боевого gatewayMerchantId обратитесь к нам.

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

После нажатия кнопки на устройстве с подключенным Google Pay появится всплывающее окно или форма выбора привязанной карты. В случае подтверждения плательщиком оплаты коллбек вернет в функцию processPayment данные, необходимые для получения платежного токена IntellectMoney.

Пример набора данных, возвращаемых Google Pay

Code Block
languagejs
{
  "cardInfo": {
    "cardNetwork": "MASTERCARD",
    "cardDetails": "4444",
    "cardImageUri": "https://lh6.ggpht.com/h6TBIVV7tlYGr1zkIA8CmCzINizzASbPIetpxh_5otBu3VkPEC5_Kk_wH5szy7gDhMkRhVVp",
    "cardDescription": "Mastercard •••• 4444",
    "cardClass": "CREDIT"
  },
  "paymentMethodToken": {
    "tokenizationType": "PAYMENT_GATEWAY",
    "token": "{\"signature\":\"MEUCIZ29vZ2xlIHBheSBkZWNvZGVkIHNpZ25hdHVyZSBkYXRhIChiaW5hcnkpCg\\u003d\",\"protocolVersion\":\"ECv1\",\"signedMessage\":\"{\\\"encryptedMessage\\\":\\\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwg//c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu//YSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0//aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuCg\\\",\\\"ephemeralPublicKey\\\":\\\"Z29vZ2xlIHBheSBlbXBoZXJhbCBwdWJsaWMga2V5IChkZWNvZGVkIGJpbmFyeSkK\\\\u003d\\\",\\\"tag\\\":\\\"Z29vZ2xlIHBheSB0YWcgKGRlY29kZWQgYmluYXJ5KQo\\\\u003d\\\"}\"}"
  }
}
Note

Встроенный в эту документацию скрипт логгирует данные Google Pay в консоль вашего браузера. Вы можете просмотреть их и использовать для тестовых нужд. Обратите внимание! В Google Pay отсутствует возможность привязать тестовую карту, поэтому интерфейс вам будет показывать вашу реальную карту. Однако в тестовой среде Google эта карта непрозрачно подменяется на тестовую и вам в скрипт возвращаются данные тестовой карты. Таким образом вы можете безопасно использовать вашу привязанную реальную карту, средства с нее списаны не будут.

Интеграция Google Pay в IntellectMoney API

Для проведения платежа с Google Pay необходимо выполнить следующие вызовы IntellectMoney API:

  • создать в Платформе инвойс, вызвав метод createInvoice();
  • либо, если инвойс уже был создан ранее, создать invoiceAccessToken;
  • используя полученный invoiceAccessToken создать платежный токен IntellectMoney, вызывав метод createPaymentResource();
  • использовать полученный платежный токен IntellectMoney для запуска одно- или двустадийных платежей.

Пример структуры paymentResourse

Необходимые данные

  • в переменной paymentToolType укажите значение TokenizedCardData;
  • в переменной provider укажите GooglePay;
  • в переменной gatewayMerchantID:
    • для тестовой среды укажите intellectmoney-test;
    • для боевой среды укажите идентификатор вашего мерчанта, выданный вам IntellectMoney.
  • в структуру paymentToken передайте структуру, полученную из Google Pay.

Пример корректно заполненной структуры

Code Block
languagejs
{
  "paymentTool": {
    "paymentToolType": "TokenizedCardData",
    "provider": "GooglePay",
    "gatewayMerchantID": "intellectMoney-test",
    "paymentToken": {
      "cardInfo": {
        "cardNetwork": "MASTERCARD",
        "cardDetails": "4444",
        "cardImageUri": "https://lh6.ggpht.com/h6TBIVV7tlYGr1zkIA8CmCzINizzASbPIetpxh_5otBu3VkPEC5_Kk_wH5szy7gDhMkRhVVp",
        "cardDescription": "Mastercard •••• 4444",
        "cardClass": "CREDIT"
      },
      "paymentMethodToken": {
        "tokenizationType": "PAYMENT_GATEWAY",
        "token": "{\"signature\":\"MEUCIZ29vZ2xlIHBheSBkZWNvZGVkIHNpZ25hdHVyZSBkYXRhIChiaW5hcnkpCg\\u003d\",\"protocolVersion\":\"ECv1\",\"signedMessage\":\"{\\\"encryptedMessage\\\":\\\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwg//c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu//YSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0//aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuCg\\\",\\\"ephemeralPublicKey\\\":\\\"Z29vZ2xlIHBheSBlbXBoZXJhbCBwdWJsaWMga2V5IChkZWNvZGVkIGJpbmFyeSkK\\\\u003d\\\",\\\"tag\\\":\\\"Z29vZ2xlIHBheSB0YWcgKGRlY29kZWQgYmluYXJ5KQo\\\\u003d\\\"}\"}"
      }
    }
  },
  "clientInfo": {
    "fingerprint": "aa32fec9f377e6fae19a6a8bcde41bd1"
  }
}

Собираем все вместе

Ниже приведена цепочка curl вызовов к API IntellectMoney, позволяющая провести платеж с использованием платежного метода Google Pay.

создаем в Платформе инвойс:

...

languagejs

...

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

Использование Мерчанта 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,
        {
            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: 

...

{
  

...

    

...

  

...

 

...

  

...

 

...

    

...

пример ответа Платформы:

...

languagejs

...

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);
   

...

    

...

 })
        

...

обрабатываем в UA плательщика бизнес-процесс Google Pay, передаем полученные данные себе на бекэнд и вызываем createPaymentResource():

...

languagejs

...

.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) {
          

...

пример ответа Платформы:

Code Block
languagejs
{
    "clientInfo": {
        "fingerprint": "aa32fec9f377e6fae19a6a8bcde41bd1",
        "ip": "2A04:4A00:5:1014::100D"
    },
    "paymentSession": "{PAYMENT_SESSION}",
    "paymentToolDetails": {
        "bin": "411111",
        "cardNumberMask": "411111******4444",
        "detailsType": "PaymentToolDetailsBankCard",
        "lastDigits": "4444",
        "paymentSystem": "mastercard",
        "tokenProvider": "googlepay"
    },
    "paymentToolToken": "{PAYMENT_TOOL_TOKEN}"
}

запускаем платеж в Платформе

...

languagejs

...

      // 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 {
            

...

проверяем статус обработки платежа:

Code Block
languagejs
curl -X GET \
  https://api.intellectmoney.ru/v2/processing/invoices/10vRl9xqGlk/docs/payments/1 \
  -H 'Authorization: Bearer {YOUR_API_KEY}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json; charset=utf-8' \
  -H 'X-Request-ID: 1528471100'

пример ответа Платформы. Платеж успешно проведен:

...

languagejs

...

  • 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