Versions Compared

Key

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

Зміст

Table of Contents
minLevel1
maxLevel2
indent0px
absoluteUrltrue
stylecircle


Опис

Оплата Google Pay по технології C2A дебет.

Tip

Увага! Цей запит виконується в декілька етапів:

  1. Ініциалізація (API запит №1)

  2. Підтвердження (API запит №2)

  3. Редірект платника на 3DS


Чекліст інтеграції

  •  Привести сайт / додаток до відповідності вимогам.
  •  Інтегрувати API Google Pay.
  •  Вказати environment в режимі TEST.
  •  Передати тех підтримці PSP Platon посилання для Callback.
  •  Повідомити тех підтримці PSP Platon ваші IP адреси серверів сайта або про те, що буде використовуватить додаток (в цьому випадку обмеження по IP будуть зняті).
  •  Провести запит по API Google Pay для отримання кнопки Google Pay.
  •  Після авторизації користувача та вибору реальної картки в гаманці Google Pay вам повернуться зашифровані дані PaymentData.
  •  З отриманих шифрованих даних PaymentData необхідно витянути token та відформатувати його відповідно до вимогам і прикладу вказаному в цій документації.
  •  Провести запит відповідно API методу PSP Platon використовуючи відформатований токен Google Pay.
  •  Отримати Response або Callback для редиректа платника на 3DS перевірку.
  •  Відправити кліента на 3DS перевірку.
  •  Отримати Response або Callback зі статусом оплати DECLINED від PSP Platon.
  •  Відправити запит в Google Business Console для активації акаунта.
  •  Повідомити тех підтримці PSP Platon про активацію акаунта.
  •  Вказати environment в режимі PRODUCTION.
  •  Провести запит з отриманням Response или Callback зі статусом оплати SUCCESS від PSP Platon.
  •  Відобразити клиенту інформаію про успішну / невдалу оплату.

Вимоги

Include Page
Вимоги до сайтів та додатків
Вимоги до сайтів та додатків

Google Business Console

Google Pay API

Для сайта:

Для Android додатку:


Інтегруйте Google Pay API слідуючи документації вище для отримання PaymentData.

Параметри:

  • allowPaymentMethods : CARD

  • tokenizationSpecification = { "type": "PAYMENT_GATEWAY"}

  • allowedCardNetworks = ['MASTERCARD', 'VISA'];

  • allowedCardAuthMethods = ['PAN_ONLY', 'CRYPTOGRAM_3DS'];

  • gateway = platon

  • gatewayMerchantId = CLIENT_KEY (API ключ PSP Platon)

Expand
titleПриклад конфіг файла
Code Block
languagejson
{
    "apiVersion": 2,
    "apiVersionMinor": 0,
    "allowedPaymentMethods": [
        {
            "type": "CARD",
            "parameters": {
                "allowedAuthMethods": ["PAN_ONLY", "CRYPTOGRAM_3DS"],
                "allowedCardNetworks": ["VISA", "MASTERCARD"]
            },
            "tokenizationSpecification": {
                "type": "PAYMENT_GATEWAY",
                "parameters": {
                    "gateway": "platon", //фіксований ідентифікатор PSP Platon
                    "gatewayMerchantId": "RJ9AE5Y7GX" //API ключ PSP Platon
                }
            }
        }
    ],
    "merchantInfo": {
        "merchantId": "00986993593073708917", //ваші дані з Google Business Console
        "merchantName": "Name" //ваші дані з Google Business Console
    },
    "transactionInfo": {
        "totalPriceStatus": "FINAL",
        "totalPriceLabel": "Total",
        "totalPrice": "5.00",
        "currencyCode": "UAH",
        "countryCode": "UA"
    }
}

Якщо все зробити правильно - на вашому сайті / додатку відобразиться кнопка Google Pay та після вибору картки вам повернеться набір даних з PaymentData.

Expand
titleПриклад набору даних PaymentData, які повертаються від Google Pay
Code Block
languagejson
{
  "apiVersionMinor": 0,
  "apiVersion": 2,
  "paymentMethodData": {
    "description": "Mastercard •••• 5179",
    "tokenizationData": {
      "type": "PAYMENT_GATEWAY",
      "token": {
        "signature": "MEYCIQC+IHxUu9Wwra2Vu6tBa2wJPCMT3pWtN1VphLGYtNVLLwIhAOkdbNje//eLrXVc+n6LOlc4PqxWOUcqwrmki/CNA1ur",
        "intermediateSigningKey": {
          "signedKey": "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwhRrvGB0kZ1248MEJAPwX0YfrQInhyyRM7nyGFjQuzGSViZG3QC9NMvXR9Zd6uVcVzAz+6K/+NEGIWbX8zbk6A\\u003d\\u003d\",\"keyExpiration\":\"1571208568000\"}",
          "signatures": [
            "MEUCIQCR6vIEiyHB8qmlho4/tLd7W8CIGrZDJlCI48CBHeFPvQIgLZJIe4cZv6pYtYYa56QCI/vvg1GqXTP3bTBjO49r5mI="
          ]
        },
        "protocolVersion": "ECv2",
        "signedMessage": "{\"encryptedMessage\":\"k85CGUMmd5PaGmQlHFqHc0HrDZmjM1yG82rFB/p31ZyUleN5nihzjOZif/BKXwg3XA2oLXqBSSWcAdfZwXxCEOqvAQE+kpTC7qVO4wTPip6RruraT6vO9M9FtIf0kcqzYSAN7pl1SUA5jC9rHrqucPoh0/FSspup78SWBt8TnmVKC9O3sQhIZ3SMoGOG4mdjtIrgCwWH2cbrxUH0dHAqOe5ANGOY/mII4nTEp7xaKu41hK/kFE15zVyqgPJXP9bPxzMVk/ozEZSfhSzVTS+9stjkU/kT5EibKB3O1bbxyybKcGQ5vxBOtNOBKKd/NuqNmN2eEK3UbSKb1M3gv45gT9cCeEvlzO7Wg0N100vUBp9RPDN9TH4tj4w578sWFKfTi6FsSrZB27SGWcU0EaKHO9buo94mRBY5yqffF3bKg5mAMPzjDhyHSujqWKAs9C5fBzMEuEr2z7A23kfLqBceH5uS9LJMiZ/yVKCwfpY9u2XyCjKdp7I\\u003d\",\"ephemeralPublicKey\":\"BAMDAtfgcPNuzItrwGLigGj3rtxmyHhZLwx1B4RJZ2oo11jpFf3SA6a3utryCMmlCEcqLfLn6WDH2ArrNBGn+Ew\\u003d\",\"tag\":\"T/qhZ/XY5/3Fe4QBKafm6NqS6EzwVeiKXhRlp8NeWrA\\u003d\"}"
      }
    },
    "type": "CARD",
    "info": {
      "cardNetwork": "MASTERCARD",
      "cardDetails": "5179"
    }
  }
}

Ознайомтесь з прикладом token з PaymentData нижче:

Expand
titleПриклад token з набору даних PaymentData, які повертаються від Google Pay
Code Block
languagejson
{
  "signature": "MEYCIQC+IHxUu9Wwra2Vu6tBa2wJPCMT3pWtN1VphLGYtNVLLwIhAOkdbNje//eLrXVc+n6LOlc4PqxWOUcqwrmki/CNA1ur",
  "intermediateSigningKey": 
    {
    "signedKey": "{
        \"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwhRrvGB0kZ1248MEJAPwX0YfrQInhyyRM7nyGFjQuzGSViZG3QC9NMvXR9Zd6uVcVzAz+6K/+NEGIWbX8zbk6A\\u003d\\u003d\",
        \"keyExpiration\":\"1571208568000\"
      }",
      "signatures": [
        "MEUCIQCR6vIEiyHB8qmlho4/tLd7W8CIGrZDJlCI48CBHeFPvQIgLZJIe4cZv6pYtYYa56QCI/vvg1GqXTP3bTBjO49r5mI="
      ]
    },
    "protocolVersion": "ECv2",
    "signedMessage": "{
      \"encryptedMessage\":\"k85CGUMmd5PaGmQlHFqHc0HrDZmjM1yG82rFB/p31ZyUleN5nihzjOZif/BKXwg3XA2oLXqBSSWcAdfZwXxCEOqvAQE+kpTC7qVO4wTPip6RruraT6vO9M9FtIf0kcqzYSAN7pl1SUA5jC9rHrqucPoh0/FSspup78SWBt8TnmVKC9O3sQhIZ3SMoGOG4mdjtIrgCwWH2cbrxUH0dHAqOe5ANGOY/mII4nTEp7xaKu41hK/kFE15zVyqgPJXP9bPxzMVk/ozEZSfhSzVTS+9stjkU/kT5EibKB3O1bbxyybKcGQ5vxBOtNOBKKd/NuqNmN2eEK3UbSKb1M3gv45gT9cCeEvlzO7Wg0N100vUBp9RPDN9TH4tj4w578sWFKfTi6FsSrZB27SGWcU0EaKHO9buo94mRBY5yqffF3bKg5mAMPzjDhyHSujqWKAs9C5fBzMEuEr2z7A23kfLqBceH5uS9LJMiZ/yVKCwfpY9u2XyCjKdp7I\\u003d\",
      \"ephemeralPublicKey\":\"BAMDAtfgcPNuzItrwGLigGj3rtxmyHhZLwx1B4RJZ2oo11jpFf3SA6a3utryCMmlCEcqLfLn6WDH2ArrNBGn+Ew\\u003d\",
      \"tag\":\"T/qhZ/XY5/3Fe4QBKafm6NqS6EzwVeiKXhRlp8NeWrA\\u003d\"
    }"
  }
}

Налаштуйте відправку отриманого значення token в параметрі payment_token у відповідному форматі вказаному нижче:

Expand
titleПриклад формату для передачі токена по API методу PSP Platon

'payment_token' => '{"signature": "MEYCIQC+IHxUu9Wwra2Vu6tBa2wJPCMT3pWtN1VphLGYtNVLLwIhAOkdbNje//eLrXVc+n6LOlc4PqxWOUcqwrmki/CNA1ur","intermediateSigningKey":{"signedKey":"{\\"keyValue\\":\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENGvh+0txlndYyWnenquCGqEXnG77IWDPuk6HiMvg6XXwBWGDItHJuXadYnnEtX5g20xo8DBP5LSWORqRqjI2vA\\\\u003d\\\\u003d\\",\\"keyExpiration\\":\\"1683710430000\\"}","signatures":["MEYCIQDovFtcqE7q4ahpEXBbKzbnxlCzn3lF+oeFKn4UbWT25QIhAN6KdqmVyobBKM9V4j2GPmDKs15nzo/r/ZrKd8+7d0SL"]},"protocolVersion":"ECv2","signedMessage":"{\\"encryptedMessage\\":\\"8AYy2FFX0mm+6w8gJZUr57PjQ5txXNaosVFUPHuo06ZhykABc4do4Lvrc5RxdSrGJNSqq6a9KGEnP2tLHdjecVxTn5oL2sSerxTmVLa99TqBW65cGBLV0bIX6sdNht2XBuWn7jFIzSxMO/ZmcdoNYc6w/MI1CFLNfINTkTNjVxszATDBmNfdMi+s2V3NpjM5xmEIZs3FFWZ401/1XeoDHnJfbjMO7GY3GHrMKEsOOQsnDGUBnvB4q9pf/0rsQ8X4VlHB2UMfUAwErgyLOb6gpGtVKESh59tyewKn14fkfSYsETUiVlUsu62PoP+gY141AFYexgAB8K7ygTX/hxwau2DEd+vb1Y9rR9cYXBZDgYlhBWoR1tCeZcMLjDKk8A0vUEzlKbI7fgsKLIa4GvqmPx79bTSrJJ2dZo1fq14ShI9fFk2Jitu6aoHMKwGcyKnC+UOGox/ArlojtHRCdKzu65vjn0M4yMZDmuww9A\\\\u003d\\\\u003d\\",\\"ephemeralPublicKey\\":\\"BMPEPyCUSrSIlz2lZHh9nmbjtobXwoTnMq/PFDDItLpHDDd0PsPoy1VP1XQSpqFUEvxiXXxL2BQ8FhUCzpR6yDQ\\\\u003d\\",\\"tag\\":\\"LG5PWsVF7lDLfEI3pwEi47OHKRGIz/f2FasGq64JlK8\\\\u003d\\"}"}',


API параметри №1

HTTP METHOD: POST

API ENDPOINT: https://secure.platononline.com/p2p-debit/

Параметр

Значення

Опис

Особливості

action

Status
colourGreen
titleОбов'язковий

DEBIT_PREPARE_GOOGLE_PAY

Код платіжного методу

 

async

Status
colourYellow
titleне Обов'язковий

Y
N

Асинхронний режим

Стандартне значення "N" можна не передавати

channel_id

Status
colourYellow
titleне Обов'язковий

String

Додатковий платіжний канал

Відправка коштів на окремий платіжний термінал

client_key

Status
colourGreen
titleОбов'язковий

String

API ключ мерчанта

Ключ надається на пошту мерчанту

order_id

Status
colourGreen
titleОбов'язковий

String

ID оплати в системі мерчанта

Max 32 символи

order_amount

Status
colourGreen
titleОбов'язковий

Number

Сума оплати

Tip

Вірний варіант

1000.00

Warning

Невалідні варіанти

1000
1000.0
1,000.0
1,000.00

order_currency

Status
colourGreen
titleОбов'язковий

UAH

Валюта оплати

Info

Оплата можлива лише в національній валюті гривні

order_description

Status
colourGreen
titleОбов'язковий

String

Опис оплати

Note

Для криличних символів треба використовувати формат UTF-8

Max 255 символов

payer_first_name

Status
colourGreen
titleОбов'язковий

String

Ім'я платника

Max 32 символів без пробілів
Вкажіть "NA" якщо немає даних

payer_last_name

Status
colourGreen
titleОбов'язковий

String

Прізвище платника

Max 32 символів без пробілів
Вкажіть "NA" якщо немає даних

payer_address

Status
colourGreen
titleОбов'язковий

String

Адреса платника

Max 256 символів
Вкажіть "NA" якщо немає даних

payer_country

Status
colourGreen
titleОбов'язковий

String

Країна платника

Стандарт ISO 3166-1 alpha-2
В форматі "ХХ"
2 символа

payer_state

Status
colourGreen
titleОбов'язковий

String

Штат платника

Стандарт ISO 3166-2
В форматі "ХХ"
2 символа

payer_city

Status
colourGreen
titleОбов'язковий

String

Місто платника

Max 32 символи
Вкажіть "NA" якщо немає даних

payer_zip

Status
colourGreen
titleОбов'язковий

String

Поштовий індекс платника

Max 32 символи

payer_email

Status
colourGreen
titleОбов'язковий

String

Пошта платника

Info

Обов'язково валідна пошта

Info

Без пробілів.

Max 255 символа

payer_phone

Status
colourGreen
titleОбов'язковий

String

Номер телефону платника

Info

Обов'язковий формат телефону 380…

payer_ip

Status
colourGreen
titleОбов'язковий

Number

IP-адреса платника

В форматі "ХХХ.ХХХ.ХХХ.ХХХ"

Note

IPv6 на даний момент не підтримується

payment_token

Status
colourGreen
titleОбов'язковий

String

Токен Google Pay

Токен необхідно відформатувати відповідно до прикладу вказаного вище.

req_token

Status
colourGreen
titleОбов'язковий

Y
N

Для формування card_token

Стандартне значення "N"

term_url_3ds

Status
colourGreen
titleОбов'язковий

String

Посилання по якому буде відправлено платника після успішної / невдалої спроби оплати після 3DS

Max 255 символів

itn

Status
colourYellow
titleне Обов'язковий

String

ІПН платника

signature

Status
colourGreen
titleОбов'язковий

String

Контрольний підпис

Code Block
languagephp
sha1(
  $pass.
  strtolower(
    implode(
      '',
      $action.
      $client_key.
      $order_id.
      $order_amount.
      $order_currency.
      $order_description.
      $payment_token.
      $payer_first_name.
      $payer_last_name.
      $payer_phone.
      $payer_address.
      $payer_country.
      $payer_state.
      $payer_city.
      $payer_zip.
      $payer_email.
      $payer_ip.
      $term_url_3ds.
    )
  )
)
Note

Значення в hash мають відповідати послідовності полів в самому запиті.


API параметри №2

HTTP METHOD: POST

API ENDPOINT: https://secure.platononline.com/p2p-debit/

Параметр

Значення

Опис

Особливості

action

Status
colourGreen
titleОбов'язковий

DEBIT_RUN

Код платежного методу

 

client_key

Status
colourGreen
titleОбов'язковий

String

API ключ мерчанта

Ключ надається на пошту мерчанта

trans_id

Status
colourGreen
titleОбов'язковий

String

ID оплати в системі PSP Platon

signature

Status
colourGreen
titleОбов'язковий

String

Контрольний підпис

Code Block
languagephp
sha1(
  $pass.
  strtolower(
    implode(
      '',
      $action,
      $client_key,
      $trans_id
    )
  )
)

Приклад запиту

Expand
titleПриклад запиту на PHP
Code Block
languagephp
<?php
  $pass='***************'; //Client's password
  $params['action']='DEBIT_PREPARE_GOOGLE_PAY';
  $params['client_key']='******'; //Client's KEY 
  $params['order_id']='Platon_test_37254'.rand(100, 999);
  $params['order_amount']='10.00';
  $params['order_currency']='UAH';
  $params['order_description']='test_by_Platon';
  $params['payment_token'] = *****;
  $params['payer_first_name']='Jack';
  $params['payer_last_name']='Anderson';
  $params['payer_phone']='380962111111';
  $params['payer_address']='NA';
  $params['payer_country']='UA';
  $params['payer_state']='NA';
  $params['payer_city']='NA';
  $params['payer_zip']='01001';
  $params['payer_email']='test@test.com';
  $params['payer_ip']='111.111.111.111';
  $params['term_url_3ds']='https://google.com';
  $params['signature'] = sha1($pass . strtolower(implode('', $params)));
  
  $url = 'https://secure.platononline.com/p2p-debit/';
  
  $tempData = array();
    foreach ($params as $key => $value) {
      $tempData[] = $key.'='.urlencode($value);
    }
    
  $crq = curl_init();
    curl_setopt($crq, CURLOPT_URL, $url);
    curl_setopt($crq, CURLOPT_HEADER, 0);
    curl_setopt($crq, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($crq, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($crq, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($crq, CURLOPT_POSTFIELDS, implode('&', $tempData));
    $result = curl_exec($crq);
    if (curl_errno($crq)) {
      echo 'ERROR: '.curl_error($crq);
    }
    curl_close($crq);

  echo $result;
  $moda = json_decode($result, true);

  $pars['action']='DEBIT_RUN';
  $pars['client_key']='*******';
  $pars['trans_id']=$moda['trans_id'];
  $pars['signature']= sha1($pass . strtolower(implode('', $pars)));
  
  $temp = array();
    foreach ($pars as $key => $value) {
      $temp[] = $key.'='.urlencode($value);
    }
  $crq = curl_init();
    curl_setopt($crq, CURLOPT_URL, $url);
    curl_setopt($crq, CURLOPT_HEADER, 0);
    curl_setopt($crq, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($crq, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($crq, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($crq, CURLOPT_POSTFIELDS, implode('&', $temp));
    $res = curl_exec($crq);
    if (curl_errno($crq)) {
      echo 'ERROR: '.curl_error($crq);
    }
    curl_close($crq);
  
  echo $res;
  $respRedirect = json_decode($res, true);
  echo $respRedirect['redirect_url'];
  
  header('Location: '.$respRedirect['redirect_url']);
  
?>

Callback

Expand
titleОсобливості роботи з Callback
Include Page
Робота з Callback
Робота з Callback
Expand
titleБезпека
Include Page
Безпека
Безпека
Include Page
Callback / Response - DEBIT GOOGLE PAY
Callback / Response - DEBIT GOOGLE PAY