Google Pay(Tez) 集成到我的支付网关中? (Android)

Google Pay(Tez) Integration into my payment gateway ? (Android)

注意: 我知道 iOS 尚不可用,我也不是在寻找 Xamarin.Forms(显然)。

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

所以,我访问了 Google Pay API page, Which seems to have a sweet looking guide for Android(Java) so I started converting the native Android code into Xamarin. And then I hit a bump where the PaymentsClient class 似乎在 Xamarin 中不可用,所以我尝试检查它的命名空间,这样也许我可以了解它是否可用(Xamarin.Android).但是没有提到这个class(我注意到的None)的命名空间。我在它的信息中所能找到的只是它继承自 com.google.android.gms.common.api.GoogleApi,实际上根本没有帮助。

查询

Google 支付(不是 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 为印度付费(基于 UPI 意图):

要将交易信息传递给 "Tez",您可以定义一个 URI,其中包含您的所有商家信息、交易金额等...此 URI 基于统一支付接口 UPI方案(这不受 Google 控制,因此您可以参考 UPI 规范了解需要传递的数据)。

回复: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"));
    }
}