I am trying to make a simple Xamarin app for Android with opportunity to pay by Google Pay. Using Android.Gms.Wallet.
Added [assembly: MetaData("com.google.android.gms.wallet.api.enabled", Value = "true")]
in AssemlyInfo.
Tried to call GooglePay widget in MainActivity in OnCreate method:
openGooglePay(this,1000,5);
And this is the method:
void openGooglePay(Activity a, int money, int requestCode)
{
PaymentsClient paymentsClient = WalletClass.GetPaymentsClient(this,
new WalletClass.WalletOptions.Builder()
.SetEnvironment(WalletConstants.EnvironmentTest)
.Build()
);
var request = PaymentDataRequest.FromJson(money.ToString());
AutoResolveHelper.ResolveTask(paymentsClient.LoadPaymentData(request), a, requestCode);
}
But screen on my phone is empty.
What can be a problem?
Well, I found the answer to my question - just to rewrite java/kotlin code to c#.
public const int LOAD_PAYMENT_DATA_REQUEST_CODE = 991;
call openGooglePay(this,1);
in activity, e.g. in OnCreate
void openGooglePay(Activity act, int money)
{
PaymentsClient paymentsClient = WalletClass.GetPaymentsClient(
this,
new WalletClass.WalletOptions.Builder()
.SetEnvironment(WalletConstants.EnvironmentTest)
.Build()
);
TransactionInfo tran = TransactionInfo.NewBuilder()
.SetTotalPriceStatus(WalletConstants.TotalPriceStatusFinal)
.SetTotalPrice(money.ToString())
.SetCurrencyCode("USD")
.Build();
var req = createPaymentDataRequest(tran);
var futurePay = paymentsClient.LoadPaymentData(req);
AutoResolveHelper.ResolveTask(futurePay, act, LOAD_PAYMENT_DATA_REQUEST_CODE);
}
PaymentDataRequest createPaymentDataRequest(TransactionInfo transactionInfo)
{
var paramsBuilder = PaymentMethodTokenizationParameters.NewBuilder()
.SetPaymentMethodTokenizationType(
WalletConstants.PaymentMethodTokenizationTypePaymentGateway)
.AddParameter("gateway", "myGateway")
.AddParameter("gatewayMerchantId", "myMerchant");
return createPaymentDataRequest(transactionInfo, paramsBuilder.Build());
}
private PaymentDataRequest createPaymentDataRequest(TransactionInfo transactionInfo, PaymentMethodTokenizationParameters paymentMethodTokenizationParameters)
{
return PaymentDataRequest.NewBuilder()
.SetPhoneNumberRequired(false)
.SetEmailRequired(false)
.SetShippingAddressRequired(false)
.SetTransactionInfo(transactionInfo)
.AddAllowedPaymentMethods(new List<Integer>() { (Integer)WalletConstants.PaymentMethodCard, (Integer)WalletConstants.PaymentMethodTokenizedCard })
.SetCardRequirements(
CardRequirements.NewBuilder()
.AddAllowedCardNetworks(new List<Integer>() { (Integer)WalletConstants.CardNetworkVisa, (Integer)WalletConstants.CardNetworkMastercard })
.SetAllowPrepaidCards(true)
.SetBillingAddressFormat(WalletConstants.BillingAddressFormatFull)
.Build()
)
.SetPaymentMethodTokenizationParameters(paymentMethodTokenizationParameters)
.SetUiRequired(true)
.Build();
}