Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 26 Next »

Данная инструкция описывает самостоятельную интеграцию способа оплаты, которая заключается в размещении кнопки Google Pay на сайте Вашего магазина и регистрации и верификации Вашего мерчанта в Google. Если вы используете Мерчант IntellectMoney (например, переход с формы на https://merchant.intellectmoney.ru), то способ оплаты Google Pay уже доступен для ваших плательщиков, необходимое условие: способ должен быть включен в личном кабинете. Ознакомиться с условиями оказания услуг 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) должен отправляться к скрипту, расположенному на вашем сервере.

<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
googlepay.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: "/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"


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

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

Доступ к API

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

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

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

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

Название

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

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

Описание

Номер СКО

invoiceId

Да

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

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

returnUrl

Да

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


  • No labels