Настройте платежи в песочнице

Заказ комплексных проектов позволяет настроить режим оплаты в песочнице при использовании быстрого теста или среды песочницы. Пока вы тестируете свой фид данных, вы можете переключаться между режимами оплаты «Песочница» и «Производство». Чтобы протестировать платежи для вашего сквозного проекта заказа без списания средств с карт, используйте «Песочницу» в качестве режима оплаты . Производственная среда не поддерживает режим оплаты «песочница».

Конфигурация

Чтобы включить режим оплаты «Песочница» в среде «Песочница» , выполните следующие действия:

  1. В Центре действий перейдите в раздел «Конфигурация» > «Функции» .
  2. На карточке «Функции учетной записи» найдите переключатель «Режим оплаты» .
  3. Выберите вариант «Песочница» и нажмите «Сохранить изменения» .

Карточка функций учетной записи с выбранным режимом песочницы

Чтобы включить режим оплаты «песочница» в среде быстрого тестирования , выполните следующие действия:

  1. В Центре действий выберите «Каналы» > «Быстрый тест» .
  2. Установите переключатель «Использовать песочницу для GPay ».

Быстрый тест с выбранным режимом песочницы

Если выбран режим оплаты «Песочница» :

  • Сквозной заказ настраивает Google Pay на возврат токенов инструментов, содержащих данные тестовой карты, а не фактические данные карты.
  • Для поля isInSandbox установлено значение true в CheckoutRequestMessage и SubmitOrderRequestMessage .

Ниже приведены различные комбинации параметров «Среда», «Режим оплаты» и «isInSandbox».

Среда Режим оплаты isInSandbox
Быстрый тест Песочница истинный
Быстрый тест Производство ЛОЖЬ
Песочница Песочница истинный
Песочница Производство ЛОЖЬ
Производство Производство ЛОЖЬ

Ответное сообщение при оформлении заказа

Сообщение CheckoutResponseMessage , отправленное вашей веб-службой заказа еды, содержит PaymentOptions . При настройке оформления заказа вы предоставляете варианты оплаты, используя пример платежного шлюза.

  • Обязательно обновите сообщение CheckoutResponseMessage , отправленное вашей веб-службой, с использованием соответствующей конфигурации токенизации.

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

Ниже приведены примеры объектов JSON PaymentOptions из CheckoutResponseMessage для различных платежных шлюзов, использующих ключи песочницы:

JSON

"paymentOptions": {
    "googleProvidedOptions": {
        "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gatewayMerchantId\":\"YOUR_MERCHANT_ID\",\"gateway\":\"cybersource\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} "
    }
}

JSON

"paymentOptions": {
    "googleProvidedOptions": {
        "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"braintree\",\"braintree:apiVersion\":\"v1\",\"braintree:sdkVersion\":\"1.4.0\",\"braintree:merchantId\":\"YOUR_MERCHANT_ID\",\"braintree:clientKey\":\"YOUR_BRAINTREE_SANDVOX_OR_PRODUCTION_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} "
    }
}

JSON

"paymentOptions": {
    "googleProvidedOptions": {
        "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripe\",\"stripe:version\":\"2018-10-31\",\"stripe:publishableKey\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} "
    }
}

JSON

"paymentOptions": {
    "googleProvidedOptions": {
        "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripev2\",\"gatewayMerchantId\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} "
    }
}

Пометить транзакции песочницы

Если включен режим оплаты «Песочница» , поле isInSandbox включается в запрос и имеет значение true для входящих запросов к конечной точке вашего веб-сервиса ( CheckoutRequestMessage и SubmitOrderRequestMessage ). Выполните следующие действия, когда для поля isInSandbox установлено значение true :

  • Используйте ключи песочницы вместо рабочих ключей в конфигурации токенизации вашего платежного шлюза. Большинство платежных систем предоставляют ключи API как для песочницы, так и для рабочей среды.
  • Не инициируйте какое-либо общение с поставщиком веб-услуг (обычно с рестораном), поскольку ему не нужно информировать о каких-либо транзакциях в песочнице.

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

Обработка платежей

Когда клиент отправляет свой заказ, сквозной процесс заказа отправляет сообщение SubmitOrderRequestMessage в конечную точку вашего веб-сервиса. Токен Google Pay включается в виде строки в кодировке Base64 в поле InstrumentToken SubmitOrderRequestMessage . Чтобы обработать платеж клиента, выполните одно из следующих действий в зависимости от вашего платежного шлюза:

Платежный шлюз
Страйп или Брейнтри Раскодируйте строку токена в кодировке Base-64 и отправьте соответствующие данные, содержащиеся в декодированной полезной нагрузке токена, на ваш платежный шлюз для обработки платежа.
Все остальные платежные шлюзы (включая Stripev2) Отправьте полную строку токена в кодировке Base64 в API вашего платежного шлюза для обработки платежа. Структура токена способа оплаты Google Pay содержит зашифрованные поля, которые ваш платежный шлюз может расшифровать для обработки платежа.

Пример декодированной полезной нагрузки

В следующих примерах показаны декодированные полезные данные, возвращаемые в поле instrumentToken для различных платежных шлюзов:

JSON

Этот пример JSON представляет собой декодированный платежный токен при использовании Braintree. Извлеките значение поля nonce и отправьте его в Braintree для обработки платежа.

{
  "androidPayCards": [{
    "type": "AndroidPayCard",
    "nonce": "aeeb8297-4242...",
    "description": "AndroidPay",
    "consumed": false,
    "details": {
      "cardType": "Visa",
      "lastTwo": "29"
    }
  }]
}

Если Google Pay не включен в панели управления Braintree, поле instrumentToken декодируется со следующей ошибкой:

{
  "error": {
    "message": "Record not found"
  },
  "fieldErrors": []
}

JSON

Этот пример JSON представляет собой декодированный платежный токен при использовании Stripe. Извлеките значение поля id и отправьте его в Stripe для обработки платежа.

{
  "id": "tok_abcdefg1234...",
  "object": "token",
  "card": {
    "id": "card_abcde...",
    "object": "card",
    "address_city": null,
    "address_country": null,
    "address_line1": null,
    "address_line1_check": null,
    "address_line2": null,
    "address_state": null,
    "address_zip": null,
    "address_zip_check": null,
    "brand": "Visa",
    "country": "US",
    "cvc_check": null,
    "dynamic_last4": "1234",
    "exp_month": 1,
    "exp_year": 2019,
    "funding": "credit",
    "last4": "1234",
    "metadata": {},
    "name": null,
    "tokenization_method": "android_pay"
  },
  "client_ip": "74.125.177.36",
  "created": 1500483670,
  "livemode": false,
  "type": "card",
  "used": false
}

JSON

Этот пример JSON представляет собой декодированный токен платежа при использовании Stripev2.

  {
  "protocolVersion":"ECv2",
  "signature":"MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biRxqBQAiAondqoUpU/bdsrAOpZIsrHQS9nwiiNwOrr24RyPeHA0Q\u003d\u003d",
  "intermediateSigningKey":{
    "signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw\\u003d\\u003d\"}",
    "signatures": ["MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQIhALLJmrUlNAY8hDQRV/y1iKZGsWpeNmIP+z+tCQHQxP0v"]
  },
  "signedMessage":"{\"tag\":\"jpGz1F1Bcoi/fCNxI9n7Qrsw7i7KHrGtTf3NrRclt+U\\u003d\",\"ephemeralPublicKey\":\"BJatyFvFPPD21l8/uLP46Ta1hsKHndf8Z+tAgk+DEPQgYTkhHy19cF3h/bXs0tWTmZtnNm+vlVrKbRU9K8+7cZs\\u003d\",\"encryptedMessage\":\"mKOoXwi8OavZ\"}"
}
  

JSON

Этот пример JSON представляет собой декодированный токен платежа при использовании Square.

  {
    "signature": "MEYCIQCMAsWCrY2GfHM/gMAKiK3QCKJJOIkjZeTQGzcdWgvrhwIhAJ3mXwe+wmU9z+Apv1rTDsCVQBzayvWzT4ywxytrSPla",
    "protocolVersion": "ECv1",
    "signedMessage": "{\"encryptedMessage\":\"WkYz21EYxojwTqWh6A3oYXtmctu1PlqF+tNYPA4cq017nqj16Ge7kaVR7MI1XG1OrCmcMwP20u5Zb5E28XYan8UI8M4L120orvE9XU1ivZuO4Myq2O3ue8v0lY1MDx8Mnk+5mkAv1kLmzJc91gEQ2leIwrPuMDYqsQUHzTR3Jikh5/v+iWRkyQPKKxgj5c6Erdu/pkg1xV6fQJcHNdq9Jw11zl95x6eQurxw2Uy8v811azGr+noKJbw0uye72MkhmzMS5QKOzwGT9nBfO+zPLYSEewsdOcPbNZF94zk/KU9nxom/gQ+eYEMIZvOj9lO4gQqDqR6DyWyStk7MjeXQTvXWZBI1JpqvOrlTHL0Ct18RpbfOio7hAtafzb0NnqEKlsun+SSpJmvI7U6n6Cnu1JUMUGfT/Jsi6RJ3N6pRw2BubeR1925Xl3jXQnlz5io6X1YRlAcnshZyf6CjBpKES32aTf1m1IHRhZ2Jj6i/g7Y\\u003d\",\"ephemeralPublicKey\":\"BDQA0Cf//BHPcnB0R/GRrWa2g7T1QF97eOhAYy7l45M+kJnsoeL9OaUQV/KIMLvcgbmKkZIm2FQeL7ftd6S4q4c\\u003d\",\"tag\":\"DHtVyXNo+PDr7Thi/EjBBbsr2k7y1SwGIn0D9mmPTJc\\u003d\"}"
  }
    

Чтобы обработать платеж с использованием токена, верните строку токена в кодировке Base 64 с вашим запросом к платежному API Square в поле source_id с префиксом gpay:

  {
    "idempotency_key": "ID",
    "source_id": "gpay:GOOGLE_PAY_BASE64_ENCODED_TOKEN",
    "amount_money": {
        "amount": 50,
        "currency": "USD"
    },
    "location_id": "LOCATION_ID",
    "billing_address": {
        "postal_code": "11111"
    }
  }

Ниже приведен пример Node.js, который декодирует instrumentToken в кодировке Base64 из Braintree:

Node.js

function decodeToken(instrumentToken) {
  let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii')
  if (decodedString.androidPayCards) {
    return decodedString.androidPayCards[0].nonce;
  }
}