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”

...

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

Требования

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

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

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

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

Реализация

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

...

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

...

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

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

Code Block
language

...


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:
    • для тестовой среды укажите intellect money-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

...

xml

...

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'
<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: {
                   

...

 

...

    allowedAuthMethods: allowedCardAuthMethods,
       

...

         

...

     

...

   

...

allowedCardNetworks: allowedCardNetworks
    

...

      

...

 

...

 

...

 

...

 

...

   

...

 

...

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

...

languagejs

...

  }
  

...

 

...

         

...

 

...

   }
     

...

 

...

      ]
      

...

  }
    );
}

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

...

       

...

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

...

languagejs

...

         type: "PAYMENT_GATEWAY",
                        parameters: {
                            gateway: "intellectmoney",
    

...

 

...

     

...

 

...

       

...

 

...

         

...

gatewayMerchantId: "

...

432143"

...

 //идентификатор магазина, зарегистрированный в 

...

IntellectMoney
  

...

         

...

 

...

         

...

 

...

  }
      

...

 

...

       

...

      }

...

 

...

         

...

 

...

     }
   

...

         ],
            transactionInfo: {
                totalPriceStatus: 'FINAL',
                totalPrice: googlePayAmount,
     

...

     

...

   

...

   

...

countryCode: 

...

'RU',
      

...

 

...

   

...

 

...

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

...

languagejs

...

     

...

currencyCode: googlePayCurrency
           

...

 }
        

...

}
    );

...


    

...

const paymentsClient = getGooglePaymentsClient();
  

...

 

...

 paymentsClient.loadPaymentData(paymentDataRequest)
       

...

 .then(function (paymentData) {
      

...

 

...

     processPayment(paymentData);
   

...

 

...

    })
    

...

 

...

   .catch(function (err) {
   

...

 

...

        

...

// show error in developer console for debugging
    

...

 

...

 

...

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

...

languagejs

...

 

...

 

...

 

...

   

...

console.error(err);
   

...

 

...

 

...

 

...

 

...

 });
}

...


function processPayment(paymentData) {
  

...

 

...

 console.log(paymentData);
    

...

var status;
    $.ajax({
  

...

 

...

     

...

cache: false,
      

...

  dataType: "

...

json"

...

,
 

...

       

...

type: "

...

post",
        

...

url:

...

 "/GooglePay/Payment",
    

...

    data: "

...

paymentTokenDataJson=" + encodeURIComponent(JSON.stringify(paymentData.paymentMethodData.tokenizationData.token)),
      

...

  complete: function (data) {
   

...

         

...

status = 'complete';
   

...

  

...

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

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

...

       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

Да

Адрес, на который перенаправляет плательщика после успешной авторизации
IP адрес плательщикаipAddressДаIP адрес плательщика
Криптограмма платежных данныхpaymentTokenDataJsonДаКриптограмма платежных данных, полученная из GooglePay 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()


Table of Contents