Важное условие успеха в электронной коммерции — правильный выбор способа оплаты, предлагаемый клиенту. Если говорить о мобильных приложениях, то, по статистике, на этапе оплаты покупки вы можете терять до 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 вообще есть, можно посмотреть тут.
Предположим, что товар или услуга уже сформирована и готова перейти в вашу собственность. Нам осталось только настроить процесс совершения самой покупки. Для этого инициализируем платежный клиент:
private lateinit var mPaymentsClient: PaymentsClient mPaymentsClient = GooglePayUtil.createPaymentsClient(this) fun createPaymentsClient(activity: Activity): PaymentsClient { val walletOptions = Wallet.WalletOptions.Builder() .setEnvironment(PAYMENTS_ENVIRONMENT) .build()return Wallet.getPaymentsClient(activity, walletOptions)}
В качестве PAYMENTS_ENVIRONMENT
мы укажем тип окружения WalletConstants.ENVIRONMENT_TEST
.
Далее предлагаю сперва проверить возможность осуществления покупки с помощью Google Pay:
GooglePayUtil.isReadyToPay(mPaymentsClient).addOnCompleteListener{ task ->try{ setGooglePayButtonAvailable(task.getResult(ApiException::class.java))}catch(exception: ApiException){ mGooglePayStatusText.text="Payment status: Error init" Log.d("isReadyToPay failed", exception.statusCode.toString())}} fun isReadyToPay(client: PaymentsClient): Task<Boolean>{ val request = IsReadyToPayRequest.newBuilder()for(allowedMethod in SUPPORTED_METHODS){ request.addAllowedPaymentMethod(allowedMethod)}return client.isReadyToPay(request.build())}
В зависимости от результата, нам необходимо показать либо же оставить спрятанной кнопку:
private fun setGooglePayButtonAvailable(available:Boolean){if(available){ mGooglePayStatusText.text="Payment status: Supported" mGooglePayButton.visibility= View.VISIBLE}else{ mGooglePayStatusText.text="Payment status: Not supported"}}
Методы оплаты определены заранее:
private val SUPPORTED_METHODS = Arrays.asList( WalletConstants.PAYMENT_METHOD_CARD, WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD)
Продолжаем интеграцию оплаты Google Pay в Android приложение
Все подготовительные этапы, касающиеся использования наших платежных систем, пройдены, и мы подошли к наиболее сложному этапу — совершение оплаты:
mGooglePayButton.setOnClickListener{ requestPayment()}
Важный момент: большинство платежных систем используют минимально возможное значение номинала валюты. Следовательно, в том случае, если это копейка, то, указывая в качестве суммы к списанию число 17852, мы подтверждаем, что мы хотим списать 178 целых и 52 сотых единиц.
Тип валюты:
private fun requestPayment(){ mGooglePayButton.isClickable=false val price = GooglePayUtil.microsToString(17852) val transaction = GooglePayUtil.createTransaction(price) val request = GooglePayUtil.createPaymentDataRequest(transaction) val futurePaymentData = mPaymentsClient.loadPaymentData(request) AutoResolveHelper.resolveTask(futurePaymentData,this, LOAD_PAYMENT_DATA_REQUEST_CODE)}
Подготавливаем транзакцию. Не забываем указать тип валюты:
fun createTransaction(price:String): TransactionInfo {return TransactionInfo.newBuilder() .setTotalPriceStatus(WalletConstants.TOTAL_PRICE_STATUS_FINAL) .setTotalPrice(price) .setCurrencyCode("USD") .build()}
Формируем запрос. Тут же добавляем параметры, где указываем продавца и ссылку на сайт:
fun createPaymentDataRequest(transactionInfo: TransactionInfo): PaymentDataRequest { val paramsBuilder = PaymentMethodTokenizationParameters.newBuilder() .setPaymentMethodTokenizationType( WalletConstants.PAYMENT_METHOD_TOKENIZATION_TYPE_PAYMENT_GATEWAY) .addParameter("gateway", “https://www.example.com”) .addParameter("gatewayMerchantId","Example Merchant Name")return createPaymentDataRequest(transactionInfo, paramsBuilder.build())}
Дальше сам запрос. Тут мы указываем необходимые поля и параметры для оформления заказа. К примеру, мы можем указать, нужно ли нам запрашивать номер телефона, электронную почту и вообще, нужна ли нам возможность доставки. Не отходя от кассы мы укажем страны, куда можем доставить товар.Так же тут указываются варианты оплаты и типы платежных систем (VISA, MASTERCARD):
private fun createPaymentDataRequest( transactionInfo: TransactionInfo, params: PaymentMethodTokenizationParameters ): PaymentDataRequest { return PaymentDataRequest.newBuilder() .setPhoneNumberRequired(false) .setEmailRequired(true) .setShippingAddressRequired(true) .setShippingAddressRequirements( ShippingAddressRequirements.newBuilder() .addAllowedCountryCodes(SHIPPING_SUPPORTED_COUNTRIES) .build()) .setTransactionInfo(transactionInfo) .addAllowedPaymentMethods(SUPPORTED_METHODS) .setCardRequirements( CardRequirements.newBuilder() .addAllowedCardNetworks(SUPPORTED_NETWORKS) .setAllowPrepaidCards(true) .setBillingAddressFormat(WalletConstants.BILLING_ADDRESS_FORMAT_FULL) .build()) .setPaymentMethodTokenizationParameters(params) .setUiRequired(true) .build()} private val SHIPPING_SUPPORTED_COUNTRIES = Arrays.asList("UA, US, DE, GB") private val SUPPORTED_NETWORKS = Arrays.asList( WalletConstants.CARD_NETWORK_VISA, WalletConstants.CARD_NETWORK_MASTERCARD)
Что ж, запрос сформирован и отправлен. Далее нам необходимо обработать результат этого запроса:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?){ when (requestCode){ LOAD_PAYMENT_DATA_REQUEST_CODE ->{ when (resultCode){ Activity.RESULT_OK->{ data?.let{ onPaymentSuccess(PaymentData.getFromIntent(data))}} Activity.RESULT_CANCELED->{} AutoResolveHelper.RESULT_ERROR->{ onError(AutoResolveHelper.getStatusFromIntent(data)?.statusCode)}} mGooglePayButton.isClickable=true}}}
Делаем обработку нашей транзакции. Сюда можно завязать очень много разной логики, переходов по экранам, поздравлений или просто вывода служебной информации, но в нашей версии просто проверим результат и выведем его. Это всего лишь ознакомительная версия, и мы не станем углубляться в бизнес-логику:
private fun onPaymentSuccess(paymentData: PaymentData?){ Toast.makeText(this, “Payment Success”, Toast.LENGTH_LONG).show()} private fun onError(statusCode: Int?){ Log.w("loadPaymentData failed",String.format("Error code: %d", statusCode))}
Конечный результат интеграции: что видит юзер
В итоге, для окончательного оформления заказа и оплаты юзер увидит кнопку Google Pay:
После нажатия будет вызвана форма оформления заказа:
Подведем итог
Google Pay - удобный и безопасный сервис оплаты через приложение с возможностью интеграции большого количества платежных систем. Он облегчает процесс покупки для клиентов, а продавцам это позволяет увеличить объемы онлайн-платежей. Воспользовавшись приведенным выше алгоритмом действий, вы легко сможете интегрировать сервис Google Pay в ваше Android-приложение.
Если же программирование не является вашей профессиональной сферой - обращайтесь к специалистам Stfalcon.com, и мы быстро и качественно разработаем и внедрим любой функционал для вашего мобильного приложения.