Google Pay(Tez) Интеграция в мой платежный шлюз? (Android)

Примечание: я знаю, что это еще не доступно для iOS, также я не ищу Xamarin.Forms(очевидно).

Пытался интегрировать Google Pay(Tez) API в мой Xamarin Приложение, когда я понял, что нет никаких руководств для его интеграции в Xamarin что хорошо

Итак, я посетил страницу API Google Pay, на которой, похоже, есть приятное руководство по Android(Java) поэтому я начал конвертировать нативный код Android в Xamarin, А потом я столкнулся с проблемой, когда класс PaymentsClient, кажется, недоступен в Xamarin, поэтому я попытался проверить его пространство имен, чтобы, возможно, я мог понять, доступен ли он или нет (Xamarin.Android). Но нет никакого упоминания о пространстве имен этого класса (ни один, который я заметил). Все, что я мог найти в его информации, это то, что он наследует от com.google.android.gms.common.api.GoogleApi что на самом деле не помогло.

Запросы

  • Я пропускаю какой-то пакет здесь или есть какая-то альтернатива, которая используется в Xamarin?
  • Есть ли какое-то руководство по интеграции Google Pay(Tez) API для Xamarin приложения, которые я пропустил?
  • Интеграция Google Pay (Tez) еще не добавлена ​​в Xamarin.Android?
  • Или что-то не так с моим текущим конфигом? т.е. VS17 Pro версия 15.6.7, Xamarin версия 4.9.0.753 а также Xamarin.Android версия 8.2.0.16 Android SDK последний со всеми версиями API выше v 4.0

1 ответ

Решение

Google Pay (не Tez):

Package: `Xamarin.GooglePlayServices.Wallet`

Убедитесь, что вы включили свое приложение для обработки кошелька через metadata в манифесте или через ваше приложение MetaDataAttribute:

[Application]
[MetaData(name: "com.google.android.gms.wallet.api.enabled", Value = "true")]

Оттуда это вопрос using Android.Gms.Wallet; и настройка и использование PaymentsClientт.е.

PaymentsClient paymentsClient = WalletClass.GetPaymentsClient(
        this, 
        new WalletClass.WalletOptions.Builder()
                .SetEnvironment(WalletConstants.EnvironmentTest)
                .Build()
);

Google Pay для Индии (на основе UPI):

Чтобы передать информацию о транзакции в "Tez", вы определяете URI, который включает всю вашу информацию о продавце, сумму транзакции и т. Д. Этот URI основан на ИНТЕРФЕЙСЕ UNIFIED PAYMENTS UPI схема (это не контролируется Google, и поэтому вы должны обратиться к спецификации UPI, чтобы узнать, какие данные вам нужно передать).

re: https://www.npci.org.in/sites/all/themes/npcl/images/PDF/UPI_Linking_Specs_ver_1.5.1.pdf

using (var uri = new Android.Net.Uri.Builder()
        .Scheme("upi")
        .Authority("pay")
        .AppendQueryParameter("pa", "your-merchant-vpa@xxx")
        .AppendQueryParameter("pn", "your-merchant-name")
        .AppendQueryParameter("mc", "your-merchant-code")
        .AppendQueryParameter("tr", "your-transaction-ref-id")
        .AppendQueryParameter("tn", "your-transaction-note")
        .AppendQueryParameter("am", "your-order-amount")
        .AppendQueryParameter("cu", "INR")
        .AppendQueryParameter("url", "your-transaction-url")
        .Build())
{
    intent = new Intent(Intent.ActionView);
    intent.SetData(uri);
    intent.SetPackage("com.google.android.apps.nbu.paisa.user");
    StartActivityForResult(intent, 9999);
}

Тогда, конечно, вы бы реализовать переопределение для OnActivityResult и обработать результат:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    if (requestCode == 9999)
    {
        Log.Debug("tez result", data.GetStringExtra("Status"));
    }
}
Другие вопросы по тегам