Google Pay(Tez)是否已集成到我的付款网关中? (Android)

时间:2018-12-06 08:55:52

标签: android xamarin xamarin.android google-pay google-tez

注意::我知道它尚不支持iOS,而且我也没有在寻找Xamarin.Forms(很明显)。

当我意识到没有可用的将其集成到Google Pay(Tez)的指南时,尝试将Xamarin API集成到我的Xamarin应用程序中。

因此,我访问了Google Pay API页面,该页面似乎对Android(Java)有很好的指导,因此我开始将Android本机代码转换为Xamarin。然后我碰到了一个障碍,其中PaymentsClient类在Xamarin中似乎不可用,所以我尝试检查其名称空间,以便也许我可以了解它是否可用(Xamarin.Android)。但是没有提到此类的名称空间(我没有注意到)。我可以在其信息中找到的只是它是从com.google.android.gms.common.api.GoogleApi继承而来的,实际上根本没有帮助。

查询

  • 我在这里缺少包裹吗?还是Xamarin中使用了其他包裹?
  • 是否有一些指南针对我错过的Xamarin应用集成Google pay(Tez)API?
  • Xamarin.Android中是否尚未添加Google pay(Tez)集成?
  • 或者我当前的配置有问题吗?即VS17 Pro15.6.7Xamarin4.9.0.753Xamarin.Android8.2.0.16 Android SDK,最新的API版本高于v 4.0

1 个答案:

答案 0 :(得分:2)

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 for India(基于UPI Intent):

要将交易信息传递到“ Tez”,请定义一个URI,其中包括您所有的商家信息,交易金额等。此URI基于UNIFIED PAYMENTS INTERFACE 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"));
    }
}