- 10 октября 2020 г. Как и зачем интегрировать платежный сервис Google Pay в Android-приложение для коммерции
- Бизнес-преимущества Google Pay
- Подключение Google Pay
- Продолжаем интеграцию оплаты Google Pay в Android приложение
- Конечный результат интеграции: что видит юзер
- Подведем итог
- Покупки в Android приложении — Play Billing Library
- Интеграция Google Pay
- 1. Верстка
- 2. Код
- 3. Тестирование
- 4. Отправка на ручную проверку
- 5. Релиз
10 октября 2020 г. Как и зачем интегрировать платежный сервис Google Pay в Android-приложение для коммерции
Важное условие успеха в электронной коммерции — правильный выбор способа оплаты, предлагаемый клиенту. Если говорить о мобильных приложениях, то, по статистике, на этапе оплаты покупки вы можете терять до 80% клиентов лишь потому, что способ оплаты неудобен и не вызывает доверия. Чего стоят одни попытки правильно ввести свои данные при помощи тачскрин — не говоря уже о необходимости совершить множество переходов и страхе утечки данных. Удобным для всех решением в этой ситуации является интеграция в приложение сервиса Google Pay.
Бизнес-преимущества Google Pay
Google Pay (известный ранее как Android Pay) позволяет оплачивать покупки в мобильном приложении всего в два действия. Пользователь, зарегистрированный в Google, на этапе оплаты нажимает на кнопку «оплатить через Google», выбирает одну из своих платежных карт и нажимает кнопку подтверждения. А привязав к аккаунту способ доставки, он еще и избавляется от необходимости каждый раз вводить одни и те же контактные данные.
Не удивительно, что такой простой способ оплаты очень популярен среди пользователей: на сентябрь 2018 г. приложение Google Pay было скачано 100 млн. раз. Насколько это выгодно для бизнеса? AirBnB после интеграции сервиса отметила, что рост объема онлайн-платежей увеличился в 11 раз. Google не взимает за пользование сервисом оплату, так что все, что вы получаете от интеграции — это рост конверсий и прибыли.
Google Pay доступен для всех поставщиков товаров и услуг в странах, где поддерживается сервис. Это прекрасный способ связать при помощи единого интерфейса пользователя приложения с несколькими десятками платежных систем по всему миру. Его легко интегрировать в Android приложения. Как именно — читайте дальше.
Подключение Google Pay
Первое, что нам необходимо сделать, это подключить библиотеку. В gradle файле проекта необходимо добавить зависимость: implementation ‘com.google.android.gms:play-services-wallet:$play_service_wallet_version’ где $play_service_wallet_version — это версия библиотеки, которую мы будем использовать. Сейчас актуальная версия — 16.0.0. Более детальную инструкцию, как подключить библиотеку, и информацию, какие библиотеки Google Play Services вообще есть, можно посмотреть тут.
Предположим, что товар или услуга уже сформирована и готова перейти в вашу собственность. Нам осталось только настроить процесс совершения самой покупки. Для этого инициализируем платежный клиент:
В качестве PAYMENTS_ENVIRONMENT мы укажем тип окружения WalletConstants.ENVIRONMENT_TEST .
Далее предлагаю сперва проверить возможность осуществления покупки с помощью Google Pay:
В зависимости от результата, нам необходимо показать либо же оставить спрятанной кнопку:
Методы оплаты определены заранее:
Продолжаем интеграцию оплаты Google Pay в Android приложение
Все подготовительные этапы, касающиеся использования наших платежных систем, пройдены, и мы подошли к наиболее сложному этапу — совершение оплаты:
Важный момент: большинство платежных систем используют минимально возможное значение номинала валюты. Следовательно, в том случае, если это копейка, то, указывая в качестве суммы к списанию число 17852, мы подтверждаем, что мы хотим списать 178 целых и 52 сотых единиц.
Подготавливаем транзакцию. Не забываем указать тип валюты:
Формируем запрос. Тут же добавляем параметры, где указываем продавца и ссылку на сайт:
Дальше сам запрос. Тут мы указываем необходимые поля и параметры для оформления заказа. К примеру, мы можем указать, нужно ли нам запрашивать номер телефона, электронную почту и вообще, нужна ли нам возможность доставки. Не отходя от кассы мы укажем страны, куда можем доставить товар.Так же тут указываются варианты оплаты и типы платежных систем (VISA, MASTERCARD):
Что ж, запрос сформирован и отправлен. Далее нам необходимо обработать результат этого запроса:
Делаем обработку нашей транзакции. Сюда можно завязать очень много разной логики, переходов по экранам, поздравлений или просто вывода служебной информации, но в нашей версии просто проверим результат и выведем его. Это всего лишь ознакомительная версия, и мы не станем углубляться в бизнес-логику:
Конечный результат интеграции: что видит юзер
В итоге, для окончательного оформления заказа и оплаты юзер увидит кнопку Google Pay:
После нажатия будет вызвана форма оформления заказа:
Подведем итог
Google Pay — удобный и безопасный сервис оплаты через приложение с возможностью интеграции большого количества платежных систем. Он облегчает процесс покупки для клиентов, а продавцам это позволяет увеличить объемы онлайн-платежей. Воспользовавшись приведенным выше алгоритмом действий, вы легко сможете интегрировать сервис Google Pay в ваше Android-приложение.
Источник
Покупки в Android приложении — Play Billing Library
И как это до сих пор на Хабре нет статьи об этом? Не дело, надо исправлять.
Есть 2 способа добавить In-App покупки в Android-приложение — старый и новый. До 2017 года все пользовались библиотекой от anjlab, но с июня 2017 года ситуация изменилась, Google выпустила собственную библиотеку для внутренних покупок и подписок — Play Billing Library. Сейчас последний считается стандартом.
Play Billing Library это очень просто.
Добавьте разрешение в манифесте.
Создайте инстанс BillingClient и начните соединение.
В метод onPurchasesUpdated() мы попадаем когда покупка осуществлена, в методе onBillingSetupFinished() можно запросить информацию о товарах и покупках.
Запросить информацию о товарах. Поместите querySkuDetails() в onBillingSetupFinished().
В коде вы могли заметить понятие SKU, что это? SKU — от английского Stock Keeping Unit (идентификатор товарной позиции).
Теперь в mSkuDetailsMap у нас лежит вся информация о товарах (имя, описание, цена), зарегистрированных в Play Console данного приложения (об этом позже). Обратите внимание на эту строку skuList.add(mSkuId);, здесь мы добавили id товара из Play Console, перечислите здесь все товары, с которыми вы хотите взаимодействовать. У нас товар один —sku_id_1.
Все готово к тому, чтобы выполнить запрос на покупку. Передаем id товара. Запустите этот метод, например, по клику на кнопку.
Теперь, запустив этот метод, вы увидите вот такое диалоговое окно (прим. картинки из Интернета).
Теперь если пользователь купит товар — его ему надо предоставить. Добавьте метод payComplete() и осуществите в нем действия, предоставляющие доступ к купленному товару. Например, если пользователь покупал отключение рекламы, сделайте в этом методе так, чтобы реклама больше не показывалась.
Все хорошо, но если пользователь перезапустит приложение, наша программа ничего не знает о покупках. Надо запросить информацию о них. Сделайте это в onBillingSetupFinished().
В purchasesList попадает список всех покупок, сделанных пользователем.
Делаем проверку: если товар куплен — выполнить payComplete().
Готово. Осталось это приложение опубликовать в Play Console и добавить товары. Как добавить товар: Описание страницы приложения > Контент для продажи > Создать ограниченный контент.
Примечание 1: Вы не сможете добавить товар пока не загрузите билд приложения в Play Console.
Примечание 2: Чтобы увидеть диалоговое окно о покупке, вам надо загрузить билд в Play Console, добавить товар и подождать какое-то время (
30 минут — 1 час — 3 часа), пока товар обновится, только после этого появится диалоговое окно и можно будет осуществить покупку.
Примечание 3: Ошибка Please fix the input params. SKU can’t be null — товар в Play Console еще не успел обновиться, подождите.
Примечание 4: Вы можете столкнуться с ошибкой Error «Your transaction cannot be completed», в логах как response code 6 пока будете тестировать. По каким причинам это происходит мне точно неизвестно, но по моим наблюдениям это происходит после частых манипуляций с покупкой и возвратом товара. Чтобы это починить перейдите в меню банковских карт и передобавьте вашу карту. Как этого избежать? Добавьте ваш аккаунт в Play Console в качестве тестировщика и покупайте только с тестовой карточки.
(Кстати, на Хабре работает система донейтов по кнопке под статьёй — прим. модератора).
Источник
Интеграция Google Pay
Меня зовут Игорь, я Android-разработчик в команде Trinity Digital. Сегодня я хочу рассказать о классном инструменте — Google Pay API.
Итак, если в вашем приложении можно совершать покупки, и при этом вы используете не In-app Billing (за процессинг отвечает не Google Play), то скорее всего среди вариантов оплаты у вас есть и “Оплата картой”. А это значит, что вам каждый раз приходится отправлять пользователя вводить данные карты или на красиво сверстанные экраны с картой, или на веб-сайт вашего провайдера платежных сервисов (далее — payment processor). Уже посчитали сколько действий придется совершить пользователю, чтобы оплатить заветный заказ? Ага, а теперь представьте, что он сможет выполнить то же целевое действие всего в два тапа. Мы тоже представили и подумали, а почему бы не дать пользователям такую возможность? Основные условия успеха — продавец быть зарегистрирован в Google и payment processor должен сотрудничать с Google.
Список банков России, которые сотрудничают с Android Pay:
АК Барс Банк
Альфа Банк
БИНБАНК
Промсвязьбанк
ВТБ24
Банк Открытие
МТС Банк
Райффайзен Банк
Рокетбанк
Россельхозбанк
Банк Русский Стандарт
Сбербанк
Тинькофф Банк
Точка
Яндекс Деньги
Как все будет выглядеть для пользователя: он попадает на экран выбора типов оплаты в вашем приложении, нажимает на кнопку “Оплатить через Google ”, выбирает нужную карту или оставляет ту, что указана по-умолчанию, нажимает кнопку подтверждения. Готово!
Помните, что Google Pay API позволяет пользователям выбрать любую карту, привязанную или к аккаунту Google, или добавленную в Google Pay.
Теперь перейдем непосредственно к интеграции.
- Верстка
- Код
- Тестирование
- Отправка на ручную проверку
- Релиз
1. Верстка
Первое, о чем стоит сказать — предупредите дизайнеров о гайдлайнах. Если кратко по пунктам:
- на экранах ДО ИЛИ на экране, где будет расположена кнопка “Оплатить через Google” должна быть указана стоимость покупки;
- дайте пользователям возможность изменять данные заказа, выбирать тип оплаты [, менять адрес];
- никогда не показывайте данные для оплаты полностью (любые номера, даты и так далее);
- еще раз — “Оплатить через Google” — именно такая надпись должна быть на вашей кнопке, если делаете приложение с поддержкой русского языка;
- Google рекомендует использовать стандартные кнопки. Если вы хотите использовать темную тему или вообще кнопку со своим дизайном, то вам стоит написать в тех. поддержку по адресу androidpay-api-support@google.com. Но даже на кастомной кнопке должно быть лого Google и надпись … да, я надеюсь, вы поняли 🙂 ;
- по ширине ограничений нет, минимальная высота кнопки — 40dp. Если делаете выше/шире, то помните, что текст должен быть отцентрирован.
Соблюдение данных пунктов позволит вам быстрее пройти все проверки и попасть в белый список.
2. Код
Чтобы оплата через Google работала, на телефоне пользователя должны быть установлены Google Play Services версии не ниже 11.4. Но не беспокойтесь, есть специальный метод, который подскажет, можно ли провести оплату или же стоит спрятать кнопку.
Для начала добавим нужные зависимости в build.gradle уровня приложения. Перед внедрением проверяйте актуальность версий!
Далее следует обновить AndroidManifest:
Теперь осталось совсем чуть-чуть:
- Создаём PaymentsClient в вашей Activity или в Fragment. Чтобы не захламлять эти классы, можно вынести весь код в методы GooglePaymentUtils, например. Тогда:
Обратите внимание на константы:
WalletConstants.ENVIRONMENT_TEST — пока Google не разрешит выход в боевую среду, вы должны использовать именно её, чтобы самостоятельно протестировать флоу оплаты. Не пугайтесь, когда увидите предупреждение на диалоге Google Pay, что приложение не опознано.
WalletConstants.THEME_LIGHT — светлая тема диалога, также есть темная.
Отлично, у нас есть клиент, теперь мы готовы сделать запрос, можно ли вообще использовать оплату и показывать кнопку.
PAYMENT_METHOD_CARD, PAYMENT_METHOD_TOKENIZED_CARD — говорят, что мы хотим видеть карточки из Google аккаунта пользователя и карточки, привязанные к Android Pay.
Если мы можем показать кнопку, значит, мы должны повесить на нее обработчик нажатий
Тут запомните, что price — это строчка. И самое важное, даже если вы вызываете AutoResolveHelper.resolveTask из фрагмента, то результат все-равно придет в активити (об этом чуть позже) [на момент написания статьи работает именно так, AutoResolveHelper не умеет возвращать результат во фрагмент].
Тут CURRENCY_CODE = “RUB”.
WalletConstants.TOTAL_PRICE_STATUS_FINAL — говорим, что стоимость покупки окончательная и больше изменяться не будет.
Также есть варианты:
WalletConstants.TOTAL_PRICE_STATUS_ESTIMATED — стоимость примерная, и может измениться, например, после уточнения адреса.
WalletConstants.TOTAL_PRICE_STATUS_NOT_CURRENTLY_KNOWN — еще не знаем, какая стоимость.
Не могу сказать, как на практике поведут себя последние две константы, так как не проверял ¯\_(ツ)_/¯.
Остановимся на PaymentMethodTokenizationParameters и его методе setPaymentMethodTokenizationType:
- PAYMENT_METHOD_TOKENIZATION_TYPE_PAYMENT_GATEWAY
используется только если ваш payment processor в списке:
Adyen
Braintree
PaySafe
Stripe
Vantiv
WorldPay
Тогда вместо .addParameter(«publicKey», TOKENIZATION_PUBLIC_KEY)
вы должны написать .addParameter(«gateway», «yourGateway»)
.addParameter(«gatewayMerchantId», «yourMerchantIdGivenFromYourGateway»)
Для этого вам необходимо запросить у провайдера платежных сервисов публичный ключ и передавать именно его в .addParameter(«publicKey», TOKENIZATION_PUBLIC_KEY)
Теперь остается создать запрос.
.setPhoneNumberRequired — должен ли пользователь ввести номер.
.setEmailRequired — должен ли пользователь ввести email
.setShippingAddressRequired — должен ли пользователь выбрать страну. Тут можно ограничить число стран, для которых данная транзакция выполнится.
.addAllowedPaymentMethods — у нас это WalletConstants.PAYMENT_METHOD_CARD — карты из google аккаунта, WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD — карты, добавленные в Google Pay.
В CardRequirements мы указываем, что должны работать карточки систем Visa, Mastercard и других (МИР, например)
Все, мы создали запрос, отправили его через клиента и ждем результат через AutoResolveHelper.
Как вы помните, результат придет в активити.
Вот и все, в paymentData у вас будет токен, который следует отдать вашему серверу. Дальнейшая логика зависит от вашего payment processor.
3. Тестирование
Ничего сложного, просто проверяете, что установлена константа WalletConstants.ENVIRONMENT_TEST, и проходите весь флоу. Списание денег с карточки производиться не будет, вам будет отдаваться тестовый токен, поэтому payment processor должен отклонить оплату.
4. Отправка на ручную проверку
Поздравляю! Вы готовы отправить свой дебаг билд на ручную проверку в Google.
Несколько советов:
- Если ваше приложение поддерживает только русский язык, то подготовьте скриншоты с указаниями, куда нажимать.
- Если есть какая-то специфика в процессе заказа, то подробно опишите.
- Создайте тестовый аккаунт специально для Google и отправьте прямо с билдом.
Отправляете билд на androidpay-api-support@google.com и ждете ответа.
5. Релиз
Вам сказали, что все хорошо и можно выпускать приложение. Первым делом вас попросят активировать приложение по адресу (с аккаунта продавца (merchant)).
Далее вас могут попросить прислать PCI Compliance. Эти документы подтверждают, что ваш payment processor соответствует стандартам безопасности по работе с картами. Запрашиваете у него и отправляете в поддержку.
Как только вы выполнили эти два пункта, вам скажут, что можно поменять WalletConstants.ENVIRONMENT_TEST на WalletConstants.ENVIRONMENT_PRODUCTION. Также может потребоваться поменять TOKENIZATION_PUBLIC_KEY, если вы использовали ключ с тестовой среды вашего payment processor.
Вот и все, теперь протестируйте реальную оплату и можете выпускать релиз в маркет!
Источник