Xamarin Google 付费实施
Xamarin Google Pay implementation
我正在尝试为 Android 制作一个简单的 Xamarin 应用程序,并有机会通过 Google Pay 付款。使用 Android.Gms.Wallet。
在 AssemlyInfo 中添加了 [assembly: MetaData("com.google.android.gms.wallet.api.enabled", Value = "true")]
。
试图在 OnCreate 方法中调用 GoogleMainActivity 中的支付小部件:
openGooglePay(this,1000,5);
这是方法:
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);
}
但是我的 phone 屏幕是空的。
有什么问题?
好吧,我找到了问题的答案 - 只需将 java/kotlin code 重写为 c#。
public const int LOAD_PAYMENT_DATA_REQUEST_CODE = 991;
在 activity 中调用 openGooglePay(this,1);
,例如在 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();
}
我正在尝试为 Android 制作一个简单的 Xamarin 应用程序,并有机会通过 Google Pay 付款。使用 Android.Gms.Wallet。
在 AssemlyInfo 中添加了 [assembly: MetaData("com.google.android.gms.wallet.api.enabled", Value = "true")]
。
试图在 OnCreate 方法中调用 GoogleMainActivity 中的支付小部件:
openGooglePay(this,1000,5);
这是方法:
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);
}
但是我的 phone 屏幕是空的。
有什么问题?
好吧,我找到了问题的答案 - 只需将 java/kotlin code 重写为 c#。
public const int LOAD_PAYMENT_DATA_REQUEST_CODE = 991;
在 activity 中调用 openGooglePay(this,1);
,例如在 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();
}