Versions Compared
Key
- This line was added.
- This line was removed.
- Formatting was changed.
Данная инструкция описывает самостоятельную интеграцию способа оплаты, которая заключается в размещении кнопки 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 | ||
---|---|---|
| ||
<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 | ||||
---|---|---|---|---|
| ||||
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 | ||
---|---|---|
| ||
|
Серверная часть
Скрипт payment на вашем сервере должен либо создать инвойс в системе IntellectMoney (метод createInvoice()), либо использовать существующий.
Info | ||
---|---|---|
| ||
При обращении ко всем методам 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 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
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 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<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 language java title Kotlin 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 language java title Kotlin 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 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
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 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<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 | ||
---|---|---|
| ||
При обращении ко всем методам API следует прикладывать SSL-сертификат, см. Получение доступа к API |
Сценарий 3DS-аутентификации
Для нетокенизированных карт (метод аутентификации PAN_ONLY) может потребоваться дополнительная 3ds-аутентификации. Сценарий обработки следующий:
- Если запрос проверки статуса платежа getBankCardPaymentState() вернет статус платежа PaymentStep=3, то плательщику следует отобразить форму (свойство Form3DS)
- После прохождения 3ds-аутентификации опционально можно дожидаться успешного завершения платежа PaymentStep=0, либо обрабатывать уведомления, поступающие на resultUrl
Table of Contents |
---|